美文网首页
一些记不住的Linux命令(持续更新...)

一些记不住的Linux命令(持续更新...)

作者: Claire_wu | 来源:发表于2018-04-08 16:03 被阅读12次

平时操作命令的时候甚少,很多命令都非常生疏了。好记性不如烂笔头....

1 查找篇

1.1 which(寻找可执行文件)

这条命令主要是用来查找系统PATH目录下的可执行文件。说白了就是查找那些我们已经安装好的可以直接执行的命令。

fh:~ fenghuoMac$ which ls
/bin/ls

1.2 whereis(只找系统中某些特定目录下的文件)

这个命令可以用来查找二进制(命令)、源文件、man文件。与which不同的是这条命令可以是通过文件索引数据库而非PATH来查找的,所以查找的面比which要广。

fh:~ fenghuoMac$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

1.3 locate/updatedb(利用数据库来搜寻文件)

这个命令也是通过数据库查找文件,但是这个命令的适用范围就比whereis大多了。这个命令可以找到任意你指定要找的文件,并且可以只输入部分文件名(前面两个命令是要输入完整文件名的)。同时locte还可以通过-r选项使用正则表达式,功能十分强大。例如:

/wlsvhtest-tap0
/wlsvhtest-wlan1
/bin/alsaunmute
/bin/false
/bin/ls

这里只显示了前五条,但是实际上locate输出的内容是非常多的。
需要注意的是locate使用的索引数据库里的信息并不一定是实时有效的,可以使用updatedb命令更新索引数据库。
第一次执行locate时,它会建立一个索引数据库,当往后再次执行时,它便从索引数据库中迅速找出文件的位置。locate很适合用来反复搜索很少变动的目录树,但是对于刚改名的旧文件以及新建的文件,locate就找不到了,除非重建数据库。

1.4 find

find命令要比前边几条复杂的多,功能也强大的多。这条命令是通过直接搜索硬盘的方式查找的,所以可以保证查找的信息绝对可靠。并且支持各种查找条件。但是功能强大肯定是有代价的,那就是搜索速度慢。所以一般前边几种找不出来的情况下才会使用find。另外如果要实现某些特殊条件的查找,比如找出某个用户的size最大的文件,那就只能用find了。列几个实例:

在/home目录下查找以.txt结尾的文件名
find /home -name "*.txt"

//找出/home下不是以.txt结尾的文件
find /home ! -name "*.txt"

//当前目录及子目录下查找所有以.txt和.pdf结尾的文件
find . -name "*.txt" -o -name "*.pdf" 

2 文件篇

2.1 cat

cat是英文语句concatenate files and print on the standard output的缩写,中文的意思是,把字符串连接后输出到屏幕上,此时的标准输出就是屏幕。

//显示1.txt内容
fh:Desktop fenghuoMac$ cat 1.txt
abc
456

//连接显示1.txt text.txt内容
fh:Desktop fenghuoMac$ cat 1.txt test.txt
abc
456
123
456

//上面的-b表示no blank,不计算空行的情况下显示行号。
fh:Desktop fenghuoMac$ cat -b 1.txt
     1  abc
     2  456

//在1.txt后面追加内容
fh:Desktop fenghuoMac$ cat >> 1.txt


900^D

//上面的-b表示no blank,不计算空行的情况下显示行号。
fh:Desktop fenghuoMac$ cat -b 1.txt
     1  abc
     2  456


     3  900

//行数显示,空行也计算
fh:Desktop fenghuoMac$ cat -n 1.txt
     1  abc
     2  456
     3  
     4  
     5  900

2.2 touch

touch命令很简单,只需知道两个用法就可以。第一个是用来快速创建空文件,第二个是用来修改文件的时间戳。

#创建文件
fh:Desktop fenghuoMac$ touch 1.txt
fh:Desktop fenghuoMac$ ls -l | grep 1.txt
-rw-r--r--   1 fenghuoMac  staff         0  4 11 10:56 1.txt

#改变文件的时间戳
fh:Desktop fenghuoMac$ touch 1.txt
fh:Desktop fenghuoMac$ ls -l | grep 1.txt
-rw-r--r--   1 fenghuoMac  staff         0  4 11 10:57 1.txt

3 文件处理器

  1. 命令grep,更适合单纯的查找或匹配文本
  2. 命令sed,更适合对匹配到的文本进行编辑
  3. 命令awk,更适合文本格式化,对文本进行较复杂的格式处理

3.1 grep

3.2 sed

sed 是stream editor(流编辑器)的缩写,是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

3.2.1 定址

可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如1,3表示1,2,3行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定 。

3.2.2 sed命令形式

sed [options] 'command' file(s)      
sed [options] -f scriptfile file(s)

3.2.3 options

-e<script>或--expression=<script>:以选项中的指定的script来处理输入的文本文件;直接在指令列模式上进行 sed 的动作编辑;

-f<script文件>或--file=<script文件>:以选项中指定的script文件来处理输入的文本文件;直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作

-n或--quiet或——silent:在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

-i∶直接修改读取的档案内容,而不是由萤幕输出

3.2.4 常用命令

a\ 在当前行下面插入文本。
i\ 在当前行上面插入文本。
c\ 把选定的行改为新的文本。
d 删除,删除选择的行。
D 删除模板块的第一行。
s 替换指定字符
h 拷贝模板块的内容到内存中的缓冲区。
H 追加模板块的内容到内存中的缓冲区。
g 获得内存缓冲区的内容,并替代当前模板块中的文本。
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
l 列表不能打印字符的清单。
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
p 打印模板块的行。
P(大写) 打印模板块的第一行。
q 退出Sed。
b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
r file 从file中读行。
t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
w file 写并追加模板块到file末尾。 
W file 写并追加模板块的第一行到file末尾。 
! 表示后面的命令对所有没有被选定的行发生作用。 
= 打印当前行号码。 
# 把注释扩展到下一个换行符以前。

3.2.5 元字符集

^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。 
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\< 匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行。
\> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。
x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。
x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。

3.2.6 实例

1)删除

$ sed '2d' example-----删除example文件的第二行。            
$ sed '2,$d' example-----删除example文件的第二行到末尾所有行。    
$ sed '$d' example-----删除example文件的最后一行。    
$ sed '/test/'d example-----删除example文件所有包含test的行。

2)替换命令

sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。    
b)   $ sed -n 's/^test/mytest/p' example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。      
c)   $ sed 's/^192.168.0.1/&localhost/' example-----&符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost。    
d)   $ sed -n 's/\(love\)able/\1rs/p' example-----love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。

3) 编辑命令

a)  $ sed -e '1,5d' -e 's/test/check/' example-----(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执 行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。    
b)  $ sed --expression='s/test/check/' --expression='/love/d' example-----一个比-e更好的命令是--expression。它能给sed表达式赋值。

4)读入命令

//-----file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面。(example的内容会被完全展示出来,然后在每个匹配test的行后面都会显示file的全部内容)
$ sed '/test/r file' example

5)写入命令

//在example中所有包含test的行都被写入file里(试了下这条命令会直接覆盖file文件里原来的内容)
$ sed -n '/test/w file' example

6) 退出命令

$ sed '10q' example-----打印完第10行后,退出sed。

7) 追加命令(先放着,Mac上没走通)

$ sed '/^test/a\\--->this is a example' example<-----'this is a example'被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。  

8) 插入命令(先放着,Mac上没走通)

a)  $ sed '/test/i\\    
b)  new line    
c)  -------------------------' example    
d)  如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。 

9)下一个n命令(先放着,Mac上没走通)

a)  $ sed '/test/{ n; s/aa/bb/; }' example-----如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。    

3.3 awk

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

3.3.1 awk命令形式

awk [options] 'pattern{action}' file
或
awk [options] -f scriptfile var=value file(s)

3.3.2 options说明

//以下三个选项是最常用的,了解这三个即可

//一般最常用的又是这个,解析文本时常用到这个命令即可
-F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
-v var=value or --asign var=value
赋值一个用户定义变量。
-f scripfile or --file scriptfile
从脚本文件中读取awk命令。

//不常用的
-mf nnn and -mr nnn
对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
-W compact or --compat, -W traditional or --traditional
在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
-W copyleft or --copyleft, -W copyright or --copyright
打印简短的版权信息。
-W help or --help, -W usage or --usage
打印全部awk选项和每个选项的简短说明。
-W lint or --lint
打印不能向传统unix平台移植的结构的警告。
-W lint-old or --lint-old
打印关于不能向传统unix平台移植的结构的警告。
-W posix
打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。
-W re-interval or --re-inerval
允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
-W source program-text or --source program-text
使用program-text作为源代码,可与-f命令混用。
-W version or --version
打印bug报告信息的版本。

3.3.3 pattern说明

在没有options和pattern的情况下,使用命令awk

image

但pattern还包括两种特殊模式,分别是BEGIN和END:

1.BEGIN模式,是指命令在处理文本之前执行

image

2.END模式,是指命令在处理文本之后执行

image

3.BEGIN模式和END模式同时存在时,其中,BEGIN与END之间的{}相当于一个循环体,对文件中的每一行进行处理

image

3.3.4 内置变量说明

FS  输入字段分隔符,默认为空白字符
OFS 输出字段分隔符,默认为空白字符
RS  输入记录分隔符(输入换行符),指定输入时的换行符
ORS 输出记录分隔符(输出换行符),指定输出时的换行符
NF  当前行的字段数(当前行被分隔符分割成了几段)
NR  当前行的行号
FNR 不同文件分别计数
FILENAME    当前文件名
ARGV    数组,保存的是命令行所给定的各参数
ARGC    ARGC数组的个数

3.3.5 实例说明

FS:以“:”为字段输入分隔符,输出第1列和第2列
1)使用-F选项指定输入分隔符


image

2)使用内置变量FS指定输入分隔符,需要注意的是,使用变量时,要使用-v选项来指定对应的变量

image

3)OFS:以“#”为字段输出分隔符,输出第1列和第2列


image

4)RS:以“:”为行输入分隔符,输出对应的行号和当前行内容。

需要注意的是,两个红框中的内容,由于Jack和DEF、Alice和GHI之间没有“:”,所以在awk中被认作为同一行

image

5)ORS:以“---”为行输出分隔符

image

6)NF:当前行的字段数

其中,$NF表示的是最后一个字段的内容,$(NF-1)表示的是倒数第二个字段的内容

7)NR:当前行号

8)FNR:不同文件分别计数

image

9)FILENAME:显示当前行的文件名

image

10)ARGV:数组,保存的是命令行所给定的各参数

image

11)ARGC:保存的是ARGV数组的个数

image

相关文章

网友评论

      本文标题:一些记不住的Linux命令(持续更新...)

      本文链接:https://www.haomeiwen.com/subject/xdjphftx.html