基本linux命令

基本linux命令,第1张

基本linux命令有哪些呢?1、ls命令就是 list 的缩写,通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。常用参数搭配:ls -a 列出目录所有文件,包含以.开始的隐藏文件ls -A 列出除.及..的其它文件ls -r 反序排列ls -t 以文件修改时间排序ls -S 以文件大小排序ls -h 以易读大小显示ls -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来实例:(1) 按易读方式按时间反序排序,并显示文件详细信息ls -lhrt(2) 按大小反序显示文件详细信息ls -lrS(3)列出当前目录中所有以"t"开头的目录的详细内容ls -l t*(4) 列出文件绝对路径(不包含隐藏文件)ls | sed "s:^:`pwd`/:"(5) 列出文件绝对路径(包含隐藏文件)find $pwd -maxdepth 1 | xargs ls -ld2、cd 命令cd(changeDirectory) 命令语法:cd [目录名]说明:切换当前目录至 dirName。实例:(1)进入要目录cd /(2)进入 "home" 目录cd ~(3)进入上一次工作路径cd -(4)把上个命令的参数作为cd参数使用。cd !$3、pwd 命令pwd 命令用于查看当前工作目录路径。实例:(1)查看当前路径pwd(2)查看软链接的实际路径pwd -P4、mkdir 命令mkdir 命令用于创建文件夹。可用选项:-m: 对新建目录设置存取权限,也可以用 chmod 命令设置-p: 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不在的目录,即一次可以建立多个目录。实例:(1)当前工作目录下创建名为 t的文件夹mkdir t(2)在 tmp 目录下创建路径为 test/t1/t 的目录,若不存在,则创建:mkdir -p /tmp/test/t1/t5、rm 命令删除一个目录中的一个或多个文件或目录,如果没有使用 -r 选项,则 rm 不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。rm [选项] 文件…实例:(1)删除任何 .log 文件,删除前逐一询问确认:rm -i *.log(2)删除 test 子目录及子目录中所有档案删除,并且不用一一确认:rm -rf test(3)删除以 -f 开头的文件rm -- -f*6、rmdir 命令从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对其父目录的写权限。注意:不能删除非空目录实例:(1)当 parent 子目录被删除后使它也成为空目录的话,则顺便一并删除:rmdir -p parent/child/child117、mv 命令移动文件或修改文件名,根据第二参数类型(如目录,则移动文件;如为文件则重命令该文件)。当第二个参数为目录时,第一个参数可以是多个以空格分隔的文件或目录,然后移动第一个参数指定的多个文件到第二个参数指定的目录中。实例:(1)将文件 test.log 重命名为 test1.txtmv test.log test1.txt(2)将文件 log1.txt,log2.txt,log3.txt 移动到根的 test3 目录中mv llog1.txt log2.txt log3.txt /test3(3)将文件 file1 改名为 file2,如果 file2 已经存在,则询问是否覆盖mv -i log1.txt log2.txt(4)移动当前文件夹下的所有文件到上一级目录mv * ../8、cp 命令将源文件复制至目标文件,或将多个源文件复制至目标目录。注意:命令行复制,如果目标文件已经存在会提示是否覆盖,而在 shell 脚本中,如果不加 -i 参数,则不会提示,而是直接覆盖!-i 提示-r 复制目录及目录内所有项目-a 复制的文件与原文件时间一样实例:(1)复制 a.txt 到 test 目录下,保持原文件时间,如果原文件存在提示是否覆盖。cp -ai a.txt test(2)为 a.txt 建议一个链接(快捷方式)cp -s a.txt link_a.txt9、cat 命令cat 主要有三大功能:1.一次显示整个文件:cat filename2.从键盘创建一个文件:cat >filename只能创建新文件,不能编辑已有文件。3.将几个文件合并为一个文件:cat file1 file2 >file-b 对非空输出行号-n 输出所有行号实例:(1)把 log2012.log 的文件内容加上行号后输入 log2013.log 这个文件里cat -n log2012.log log2013.log(2)把 log2012.log 和 log2013.log 的文件内容加上行号(空白行不加)之后将内容附加到 log.log 里cat -b log2012.log log2013.log log.log(3)使用 here doc 生成新文件cat >log.txt <<EOF>Hello>World>PWD=$(pwd)>EOFls -l log.txtcat log.txtHelloWorldPWD=/opt/soft/test(4)反向列示tac log.txtPWD=/opt/soft/testWorldHello10、more 命令功能类似于 cat, more 会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示。命令参数:+n 从笫 n 行开始显示-n 定义屏幕大小为n行+/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示 -c 从顶部清屏,然后显示-d 提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能-l忽略Ctrl+l(换页)字符-p 通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似-s 把连续的多个空行显示为一行-u 把文件内容中的下画线去掉常用 *** 作命令:Enter向下 n 行,需要定义。默认为 1 行Ctrl+F 向下滚动一屏空格键 向下滚动一屏Ctrl+B 返回上一屏= 输出当前行的行号:f 输出文件名和当前行的行号V 调用vi编辑器!命令 调用Shell,并执行命令q 退出more实例:(1)显示文件中从第3行起的内容more +3 text.txt(2)在所列出文件目录详细信息,借助管道使每次显示 5 行ls -l | more -5按空格显示下 5 行。11、less 命令less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。常用命令参数:-i 忽略搜索时的大小写-N 显示每行的行号-o <文件名>将less 输出的内容在指定文件中保存起来-s 显示连续空行为一行/字符串:向下搜索“字符串”的功能?字符串:向上搜索“字符串”的功能n:重复前一个搜索(与 / 或 ? 有关)N:反向重复前一个搜索(与 / 或 ? 有关)-x <数字>将“tab”键显示为规定的数字空格b 向后翻一页d 向后翻半页h 显示帮助界面Q 退出less 命令u 向前滚动半页y 向前滚动一行空格键 滚动一行回车键 滚动一页[pagedown]: 向下翻动一页[pageup]: 向上翻动一页实例:(1)ps 查看进程信息并通过 less 分页显示ps -aux | less -N(2)查看多个文件less 1.log 2.log可以使用 n 查看下一个,使用 p 查看前一个。12、head 命令head 用来显示档案的开头至标准输出中,默认 head 命令打印其相应文件的开头 10 行。常用参数:-n<行数>显示的行数(行数为复数表示从最后向前数)实例:(1)显示 1.log 文件中前 20 行head 1.log -n 20(2)显示 1.log 文件前 20 字节head -c 20 log2014.log(3)显示 t.log最后 10 行head -n -10 t.log13、tail 命令用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。常用参数:-f 循环读取(常用于查看递增的日志文件)-n<行数>显示行数(从后向前)(1)循环读取逐渐增加的文件内容ping 127.0.0.1 >ping.log &后台运行:可使用 jobs -l 查看,也可使用 fg 将其移到前台运行。tail -f ping.log(查看日志)14、which 命令在 linux 要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索:which 查看可执行文件的位置。whereis 查看文件的位置。locate 配合数据库查看文件位置。find实际搜寻硬盘查询文件名称。which 是在 PATH 就是指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。常用参数:-n  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。实例:(1)查看 ls 命令是否存在,执行哪个which ls(2)查看 whichwhich which(3)查看 cdwhich cd(显示不存在,因为 cd 是内建命令,而 which 查找显示是 PATH 中的命令)查看当前 PATH 配置:echo $PATH或使用 env 查看所有环境变量及对应值15、whereis 命令whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。whereis 及 locate 都是基于系统内建的数据库进行搜索,因此效率很高,而find则是遍历硬盘查找文件。常用参数:-b 定位可执行文件。-m 定位帮助文件。-s 定位源代码文件。-u 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。实例:(1)查找 locate 程序相关文件whereis locate(2)查找 locate 的源码文件whereis -s locate(3)查找 lcoate 的帮助文件whereis -m locate

管道用于有学园关系的进程之间。

管道的pipe 系统调用实际上就是创建出来两个文件描述符。

当父进P1程创建出 fd[2] 时,子进程P2 会继承父进程的所有,所以也会得到pipe 的 2个 文件描述符。

所以毫无瓜葛的两个进程,一定不会访问到彼此的pipe。无法用管道进行通信。

管道一般是单工的。f[0]读,f[1]写

管道也可以适用于 兄弟进程(只要有血缘即可)。由于管道是单工的,当两个进程之间需要双向通信,则需要两跟管道。

执行

ctrl-c(2号信号) + SIGUSR1 信号 绑了一个新函数。则 ctrl-c 无效。

查看进程的信号

号信号被捕获。

将2号信号忽略掉

9号信号 kill 和19号信号 stop 不能乱搞,只能用缺省。

其它信号甚至段信号也都可以捕获。

改变程序的执行现场,修改PC指针,有些像goto,只不过返回非0值

运行结果

making segment fault

after segment fault

程序不会死。

如果不忽略 page fault

则会产生 core dump.

不停的给data 赋值,同时每隔1s会有信号进来,打印 data的值。

理论上打印出来的结果同时为0,同时为1

但并非如此,是 0,1,交替随机的。

signal 异步的,随时都可以进来,所以打印出来的结果,并不是我想要的。

信号对于应用程序来说,很像中断对于内核,都是访问临界区数据

信号被屏蔽,延后执行。

写多线程的程序时,不要以为只有线程之间有竞争,其实信号也会有竞争

system v 的IPC 年代有些久远。

有血缘关系的进程 key_t 都是相同的。

Key 是私有key IPV PRIVATE

可能用消息队列,可能用共享内存,可能用信号量进行通讯。

利用 _pathname 路径,约定好一条路径。和tcp/ip地址很像,来生成一个key_t key, 用msg_get shm_get 得到共享内存or 信号量。

int id 可以理解为文件描述符 fd。

其中Sys V 的共享内存 最为常用。

一定要检查路径,如果仅仅有2个进程,你没有创建路径,两者都是 -1(相当于大家约定好了),那当然能通信拉。但更多的进程出现,则会有问题。

一定要检查返回值

依然依靠key,但是api 实在是太挫了。P&V *** 作都是 semop. (posix 的 ipc跟为简洁)

POSIX 共享内存当然也需要一个名字,但并不是路径。

无论读进程还是写进程,都需要传入相同的名字。

如果是unbuntu 会在以下路径生成文件

其实 2和3 是1 的符号链接。 只要保证是一个就能互相通信

关键点,mmap 内存的属性修改为 private 后,产生写时copy,虚拟地址一样,但是物理地址已经不同了

当然 如果子进程修改了程序背景,执行了 exec,那么完全不一样了,直接修改了内存逻辑。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7392379.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存