linux根目录下打不出命令,一些记不住的Linux命令(持续更新...)

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

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 文件处理器

命令grep,更适合单纯的查找或匹配文本

命令sed,更适合对匹配到的文本进行编辑

命令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

-f

-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结尾的单词的行。

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

1df4f8ae9763

image

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

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

1df4f8ae9763

image

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

1df4f8ae9763

image

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

1df4f8ae9763

image

3.3.4 内置变量说明

FS 输入字段分隔符,默认为空白字符

OFS 输出字段分隔符,默认为空白字符

RS 输入记录分隔符(输入换行符),指定输入时的换行符

ORS 输出记录分隔符(输出换行符),指定输出时的换行符

NF 当前行的字段数(当前行被分隔符分割成了几段)

NR 当前行的行号

FNR 不同文件分别计数

FILENAME 当前文件名

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

ARGC ARGC数组的个数

3.3.5 实例说明

FS:以“:”为字段输入分隔符,输出第1列和第2列

1)使用-F选项指定输入分隔符

1df4f8ae9763

image

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

1df4f8ae9763

image

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

1df4f8ae9763

image

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

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

1df4f8ae9763

image

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

1df4f8ae9763

image

6)NF:当前行的字段数

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

7)NR:当前行号

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

1df4f8ae9763

image

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

1df4f8ae9763

image

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

1df4f8ae9763

image

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

1df4f8ae9763

image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值