Linux是目前服务器应用最广泛的系统,对于Linux的学习也是程序员必须具备的众多技能之一,先从Linux系统结构图来看,学习的整个过程大致围绕常用指令来学习:
1.列出某个文件夹下的所有文件和目录详细资料
$ ls -l -R Directory_Path 或者
$ ls -lR Directory_Path
2.列出当前目录中以某个字母或字符串开头的文件信息。
如:
$ ls -l abc*
3.只列出文件下的子目录
$ ls -F /home |grep /$ //列出/home文件下的子目录
$ ls -l /home |grep "^d" //列出/home文件下子目录详细情况
4.列出当前目录下的所有文件和详细信息,倒序排列
$ ls -lrt *
5.列出当前目录下所有档案及目录
$ ls -AF
6.计算当前目录下的文件数和目录数
$ ls -l * |grep "^-"|wc -l //文件个数
$ ls -l * |grep "^d"|wc -l //目录个数
7.列出当前目录下的所有文件包括隐藏文件的绝对路径。
$ find $PWD -maxdepth l | xargs ls -ld //对目录不做递归
$ find $PWD | xargs ls -ld //对目录递归
1.进入系统根目录
$ cd /
2.使用cd命令进入当前用户主目录
$ cd
3.返回进入此目录之前所在的目录
$ cd -
4.把上个命令的参数作为cd参数使用
$ cd !$
1.默认命令
$ pwd
2.目录联接链接时,显示实际路径
$ pwd -p
1.递归创建多个目录
$ mkdir -p test1/test11
2.创建权限为777的目录
$ mkdir -m 777 test
3.创建新目录并显示信息
$ mkdir -v test
命令参数:
-f, –force 忽略不存在的文件,从不给出提示。
-i, –interactive 进行交互式删除
-r, -R, –recursive 指示rm将参数中列出的全部目录和子目录均递归地删除。
-v, –verbose 详细显示进行的步骤
–help 显示此帮助信息并退出
–version 输出版本信息并退出
1.删除某个子目录及子目录中所有档案
$ rm -rf test
2.删除以 -f 开头的文件
$ rm -- -f
3.自定义回收站功能
$ myrm(){ D=/tmp/$(date +%Y%m%d%H%M%S); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; }
$ alias rm='myrm'
命令参数:
-b :若需覆盖文件,则覆盖前先行备份。
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会更新(update)
-t : –target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY,即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。
1.移动当前文件夹下的所有文件到上一级目录
$ mv * ../
2.把当前目录下的子目录中的文件移动到另一个目录
$ mv test/*.txt test2
3.文件被覆盖前做简单备份,前面加参数-b
$ mv hello.txt -b helloworld.txt
命令参数:
-a, –archive 等于-dR –preserve=all
–backup[=CONTROL 为每个已存在的目标文件创建备份
-b 类似–backup 但不接受参数
–copy-contents 在递归处理是复制特殊文件内容
-d 等于–no-dereference –preserve=links
-f, –force 如果目标文件无法打开则将其移除并重试(当 -n 选项存在时则不需再选此项)
-i, –interactive 覆盖前询问(使前面的 -n 选项失效)
-H 跟随源文件中的命令行符号链接
-l, –link 链接文件而不复制
-L, –dereference 总是跟随符号链接
-n, –no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效)
-P, –no-dereference 不跟随源文件中的符号链接
-p 等于–preserve=模式,所有权,时间戳
–preserve[=属性列表 保持指定的属性(默认:模式,所有权,时间戳),如果可能保持附加属性:环境、链接、xattr 等
-R, -r, –recursive 复制目录及目录内的所有项目
命令参数:
-a 或–time=atime或–time=access或–time=use 只更改存取时间。
-c 或–no-create 不建立任何文档。
-d 使用指定的日期时间,而非现在的时间。
-f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
-m 或–time=mtime或–time=modify 只更改变动时间。
-r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
-t 使用指定的日期时间,而非现在的时间。
1.更新两个文件的时间戳相同
$ touch -r test1.log test2.log
2.设定文件的时间戳
$ touch -t test.log
cat主要有三大功能:
命令参数:
-A, –show-all 等价于 -vET
-b, –number-nonblank 对非空输出行编号
-e 等价于 -vE
-E, –show-ends 在每行结束处显示 $
-n, –number 对输出的所有行编号,由1开始对所有输出的行数编号
-s, –squeeze-blank 有连续两行以上的空白行,就代换为一行的空白行
-t 与 -vT 等价
-T, –show-tabs 将跳格字符显示为 ^I
-u (被忽略)
-v, –show-nonprinting 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
1.显示文件加上行号然后输出到另一个文件中
$ cat -n test.log test2.log
2.把log2015.log 和 log2016.log 的文件内容加上行号(空白不加),之后将内容附加到 log201609.log
$ cat -b log2015.log log2016.log log201609.log
3.把 log2015.log 的文件内容加上行号后输出到 log2016.log 这个文件中
$ cat -n log2015.log > log2016.log
4.使用 here doc 来生成文件
$ cat > log.txt <<EOF
nl命令在Linux系统中用来计算文件中行号。nl可以将输出的文件内容自动的加上行号。其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能。
命令参数:
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在萤幕的最左方显示;
-n rn :行号在自己栏位的最右方显示,且不加 0 ;
-n rz :行号在自己栏位的最右方显示,且加 0 ;
-w :行号栏位的占用的位数。
-p 在逻辑定界符处不重新开始计算。
命令功能:
nl 命令读取 File 参数(缺省情况下标准输入),计算输入中的行号,将计算过的行号写入标准输出。 在输出中,nl 命令根据您在命令行中指定的标志来计算左边的行。 输入文本必须写在逻辑页中。每个逻辑页有头、主体和页脚节(可以有空节)。 除非使用 -p 标志,nl 命令在每个逻辑页开始的地方重新设置行号。 可以单独为头、主体和页脚节设置行计算标志(例如,头和页脚行可以被计算然而文本行不能)。
1.用nl列出文件中的内容
$ nl log.txt
2.列出文件中的内容,空本行也加上行号
$ nl -b a log.txt
3.行号前自动补0,统一输出格式
$ nl -b a -n rz log.txt //默认显示六位数
$ nl -b a -n rz -w 3 log.txt //指定输出格式为三位数显示
more命令功能类似cat,cat命令是整个文件的内容从上到下显示在屏幕上。 more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能 。more命令从前向后读取文件,因此在启动时就加载整个文件。
格式:
$ more [-dlfpcsu] [-num] [+/pattern] [+linenum] [file...]
功能:
more命令和cat的功能一样都是查看文件里的内容,但有所不同的是 more 可以按页来查看文件的内容,还支持直接跳转行等功能。
命令参数:
+n 从笫n行开始显示
-n 定义屏幕大小为n行
+/string 在每个档案显示前搜寻该字串(string),然后从该字串前两行之后开始显示
-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.从第几行开始显示文件内容
$ more +n filename //n值自定义,可以是任意数字
2.从文件中查找第一次出现某个字符串的行,并从此处显示
$ more +/string filename //如more +/hello hello.txt 从有hello的行开始显示
3.设置屏幕显示的行
$ more -n filename //n值自定义,可以是任意整数
4.使用分页显示一个文件下的所有目录
$ ls -l | more -n //使用管道分割设置每页显示行数
less 与 more 类似,less 在查看之前不会加载整个文件,可以随意浏览,more只能向前浏览。
命令参数:
-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将“tab”键显示为规定的数字空格
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
1.显示文件的前几行
$ head -n num filename //如显示前10行,n就是10
2.显示除了最后n行之外的全部内容
$ head -n -num filename
3.显示文件前n个字节
$ head -c num filename //如num=10,显示前10个字节
4.显示除最后n个字节以外的内容
$ head -c -num filename
用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理,常用查看日志文件。
命令参数:
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示行数
–pid=PID 与-f合用,表示在进程ID,PID死掉之后结束.
-q, –quiet, –silent 从不输出给出文件名的首部
-s, –sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
1.显示文件末尾内容
$ tail -n num filename
2.循环查看文件内容
$ tail -f filename
3.从第n行开始显示文件
$ tail -n +num filename
查看可执行文件的位置
命令参数:
-n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p 与-n参数相同,但此处的包括了文件的路径。
-w 指定输出时栏位的宽度。
-V 显示版本信息
查看文件位置
命令参数:
-b 定位可执行文件。
-m 定位帮助文件。
-s 定位源代码文件。
-u 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。
-B 指定搜索可执行文件的路径。
-M 指定搜索帮助文件的路径。
-S 指定搜索源代码文件的路径。