Linux shell 学习汇总[转载]

转载自: 婶婶world_peace

转载地址:https://blog.csdn.net/baidu_33718858/article/details/81453835

一些平时使用过程中的知识点积累,来源都附上了博客,添加了一些自己的总结。

感触:linux命令用熟了相当提高工作效率,有时候用Python写十几行代码,Linux一行命令搞定~

1.Linux下的date命令

https://blog.csdn.net/jk110333/article/details/8590746

2.Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义

http://blog.51cto.com/dadekey/119938 

$# 是传给脚本的参数个数

$0 是脚本本身的名字

$1 是传递给该shell脚本的第一个参数

$2 是传递给该shell脚本的第二个参数

$@ 是传给脚本的所有参数的列表

$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个

$$ 是脚本运行的当前进程ID号

$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

3.basename命令

http://man.linuxde.net/basename

basename只会显示文件名,不会带上目录。

4.ps -ef 和 ps aux的区别

https://www.cnblogs.com/5201351/p/4206461.html

输出格式不同,都是用来查看进程。

5.awk 命令详解

https://www.cnblogs.com/xudong-bupt/p/3721210.html

http://blog.51cto.com/lizhenliang/1764025

$ awk '!a[$0]++' file  删除重复行

awk在文件中插入一列数据。

http://blog.sina.com.cn/s/blog_6561ca8c0102we0o.html

NR表示现在读的行数,NF表示列数

awk只输出偶数行 awk '!(NR%2)' file1 > file2

awk只输出奇数行 awk 'NR%2' file1 > file2

6.source 命令,以及与./, sh 的区别

https://www.cnblogs.com/pcat/p/5467188.html

7.if命令中-a到-z的意思

https://blog.csdn.net/lvchaman/article/details/51811820

[-s FILE] 存在且大小不为0

[-f FILE] 存在且是一个普通文件

[-z STRING ] “STRING” 的长度为零则为真。

8.crontab定时任务

http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html

https://blog.csdn.net/love__coder/article/details/6890997

crontab -l 可以查看参数

https://blog.csdn.net/qivan/article/details/53836426 (总结了一些crontab下运行不正常的情况)

9.vim的一些命令

不显示行号: :set nonu

显示行号::set nu

粘贴不会乱格式::set paste, 然后按i进入编辑模式,再粘贴

vim中如何全选: ggVG 可以全部选中。 

来自 https://blog.csdn.net/csh159/article/details/7533872 

gg 让光标移到首行,在vim才有效,vi中无效 
V   是进入Visual(可视)模式 
G  光标移到最后一行

中内容以后就可以其他的操作了,比如: 
d  删除中内容 
y  复制中内容到0号寄存器 
"+y  复制中内容到+寄存器,也就是系统的剪贴板,供其他程序用

10.wget命令和其一些参数

http://www.cnblogs.com/peida/archive/2013/03/18/2965369.html

wget ftp://xxx -O filename 表示将get下来的文件输出到filename中。

11.sleep 休眠

http://www.runoob.com/linux/linux-comm-sleep.html

12.vim 的一些快捷键,这些都要记住,真的是非常常用了!

https://www.cnblogs.com/jikey/archive/2011/12/28/2304341.html

    0: 跳转到行首。
    $: 跳转到行尾。

:g/\[/s// 全局替换

13.shell中循环遍历字符串数组,感觉shell的语法确实很奇特呀

https://blog.csdn.net/stpeace/article/details/78343547 (试了第一种方法,有效,感觉比较方便)

数组中的值不可以用逗号分隔!!!

自己的代码,需要判断指定文件中是否包含要检测的字符串:

14. shell中的引号,尤其注意双引号和反引号。

https://blog.csdn.net/YXYY2016/article/details/68927490

15.sed从某行开始读到文件尾。

sed -n '674393, $p' file1 > file2

$p 表示到文件尾。

16.tail命令,从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容. 

http://www.cnblogs.com/peida/archive/2012/11/07/2758084.html (这个博客蛮好的,每天都会推送一个linux命令)

17.查找某个文件夹下包含给定字符串的某一文件,一般用来扫代码。

find . | xargs grep -ri "给定字符串" -l

-l 表示只打印出文件名

https://blog.csdn.net/duguduchong/article/details/7716908 (这个博客里面讲了正则、find、xargs、以及grep的一些知识点)

xargs主要是为了防止参数过长溢出。

find . -name '*.py' | xargs grep 'xxx' -l  

查询此目录下的所有.py文件中包含'xxx'的文件名。

find的各种参数:

xargs的作用和一些参数:

https://www.cnblogs.com/chyingp/p/linux-command-xargs.html (xargs的命令详解)

在linux上批量删除空文件

http://www.111cn.net/sys/linux/46433.htm (这篇博客讲了删除文件的很多情景下的命令)

find -type f -size 0c | xargs -t rm -f

-t是为了将命令打印出来看

find -type f -size 0c | xargs -t -n2 rm -f

可以用-nx(x为参数的最大数量)对参数进行分组,比如上述例子最大参数为2,防止查找出来的文件数量太多,导致的错误。

不加-n默认参数为传进来的所有文件。

18.查看某文件的修改时间

https://blog.csdn.net/rocky2com/article/details/5644096 (此博客讲了好几个查看的方法,亲测有效)

通过stat filename.txt来查

19.linux下执行某个脚本,希望打印异常信息在屏幕上,而不是log中。可以使用 sh -x filename。

执行命令的一些参数:

-n 只读取shell脚本,但不实际执行
-x 进入跟踪方式,显示所执行的每一条命令
-c "string" 从strings中读取命令

“-n”可用于测试shell脚本是否存在语法错误,但不会实际执行命令。在shell脚本编写完成之后,实际执行之前,首先使用“-n”选项来测试脚本是否存在语法错误是一个很好的习惯。因为某些shell脚本在执行时会对系统环境产生影响,比如生成或移动文件等,如果在实际执行才发现语法错误,您不得不手工做一些系统环境的恢复工作才能继续测试这个脚本。

“-c”选项使shell解释器从一个字符串中而不是从一个文件中读取并执行shell命令。当需要临时测试一小段脚本的执行结果时,可以使用这个选项,如下所示:
sh -c 'a=1;b=2;let c=$a+$b;echo "c=$c"'

"-x"选项可用来跟踪脚本的执行,是调试shell脚本的强有力工具。“-x”选项使shell在执行脚本的过程中把它实际执行的每一个命令行显示出来,并且在行首显示一个"+"号。 "+"号后面显示的是经过了变量替换之后的命令行的内容,有助于分析实际执行的是什么命令。 “-x”选项使用起来简单方便,可以轻松对付大多数的shell调试任务,应把其当作首选的调试手段。

来自 https://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/index.html (讲得蛮好的)

20.touch命令可以创建新文件

touch fileA,如果fileA存在,使用touch命令可更改这个文件或目录的日期时间,包括存取时间和更改时间;如果fileA不存在,touch命令会在当前目录下新建一个空白文件fileA。

http://www.cnblogs.com/zf2011/archive/2011/05/17/2049155.html (这个博客记录了一下linux的常用命令以及参数解析)

21.查看一个文件的前15行的第一列

head -15 文件名 | awk '{print$1}'

head命令可以打印出了最后M行以外的所有的行

head -n -5 file 打印出了最后5行以外的所有行。

head -n 5 file 打印第1-5行。

awk,sed,grep 常记心中。

复制中file1的1-50行放到file2中。

sed -n '1,50 p' file1 > file2

将文本中的两行变成一行。https://blog.csdn.net/abinge317/article/details/51287648

22. wc 命令详解

http://www.cnblogs.com/peida/archive/2012/12/18/2822758.html

非常常用的命令啦~ 意思是word count

23.grep命令详解

这个也是很基本的一个命令了,要对grep非常敏感,了解他的各项参数,可以完成各种针对文件内容的查询。

配合find使用,可以批量对文件进行grep操作,扫代码的时候非常管用。

http://www.cnblogs.com/peida/archive/2012/12/17/2821195.html

我认为比较常用的一些参数:(来自《linux shell 脚本攻略》这本书)

grep word filename --color=auto (可以高亮找到的内容)

egrep "[a-z]+" filename 等价于 grep -E "[a-z]+" filename (正则匹配)

grep -v match_pattern file (打印除包含match pattern 之外的所有行, -v可以将匹配到的结果进行反转)

grep -c word file (打印出来匹配行的数量)

grep -n word file (显示行号)

-A<显示行数>   --after-context=<显示行数>   #除了显示符合范本样式的那一列之外,并显示该行之后的内容。

-B<显示行数>   --before-context=<显示行数>   #除了显示符合样式的那一行之外,并显示该行之前的内容。 

还有查找进程的时候,也常用grep

24. seq命令用于产生从某个数到另外一个数之间的所有整数。

http://man.linuxde.net/seq

25. iconv 用来转换文件的编码方式

https://www.cnblogs.com/leezhxing/p/3929435.html

26. linux中的&,&&,|,||, >, &>介绍

&  表示任务在后台执行,如要在后台运行redis-server,则有  redis-server & (后台执行,常用哦,代码后台跑着,就可以收拾书包回家了,之后可以用ps -ef|grep xx 查询进程)

&& 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo '2'   (常用哦,在写脚本,或者添加到crontab中时常用)

| 表示管道,上一条命令的输出,作为下一条命令参数,如 echo 'yes' | wc -l (常用哦)

|| 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo "fail" (暂时还没用到)

>只能将正常信息重定向(非常常用)

&>可以将错误信息或者普通信息都重定向输出。(没有用过)

27. sort 命令,可针对文本文件的内容,以行为单位来排序。

http://blog.51cto.com/lspgyy/1282334 

sort的-u, 在输出行中去除重复行。

sort提供了-t选项,后面可以设定间隔符。-k来指定列数。

sort -r 降序排列

sort -o 输出到指定文件

由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile。

但是,如果你想把排序结果输出到原文件中,用重定向可就不行了。使用-o完美解决。

sort -n 按照数值来排序

sort -bd txt  -b 可以忽略文件中的前导空白行,-d用于指明以字典序进行排序。

如果要使用uniq,必须先对文件进行sort排序。

uniq -u sorted.txt 只显示在文件中唯一的行。

uniq -c 统计各行在文件中出现的次数。

uniq -d 找出文件中重复的行。

28.linux 下如何将个服务器上的文件或者文件夹复制到另一台服务器上

scp命令  scp 文件名 用户名@计算机IP或者计算机名称:远程路径

https://blog.csdn.net/zxcvn8866/article/details/77750558

29.在awk中,比较数字的大小时,其实是拿字符串在比较,解决方法如下:

awk '{if($3+0>0.5+0||$4+0>0.5+0) printf $1"\t"$3"\t"$4"\n"}' result.txt 记得要在0.5后面也加上0。

统一某一列出现某个值的个数。

awk ‘BEGIN{num_1=0}{if($2==1) num_1 +=1}END{print “the num of flag1=”, num_1}’ result.txt

30.看到的一个删除大文件前n行的命令

tail -n +3 old_file > new_file

来源在这里:https://blog.csdn.net/cugb1004101218/article/details/44022571

tail 命令打印除前M行之外所有的行

tail -n +(M+1) file

31.求文本文件的交集和差集,使用comm命令。

comm必须使用排过序的文件作为输入。记得排序!!!

comm A B 不加任何参数输出的第一列为只在A中出现的行,第二列为只在B中出现的行,第三列为A和B中相同的行,\t为定界符。

只打印两个文件的交集,删除第一列和第二列,comm A B -12

打印出两个文件中不同的行,并删除输出的空白, comm A B -3 | sed 's/^\t//'

想得到在A中有,B中没有的行,comm A B -23

想得到在B中有,A中没有的行,comm A B -13

32.最常用的ls命令

http://www.cnblogs.com/peida/archive/2012/10/23/2734829.html (每天一个linux命令,这个博主好厉害,坚持~)

ls不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限),查看目录信息等等。

常用参数,可以配合使用:

33. cut命令将文件进行切分。

https://www.cnblogs.com/dong008259/archive/2011/12/09/2282679.html (蛮详细的)

-f 表示是按照字段(files),也就是列进行切分。

cut -f 2,3 filename 显示文件的2,3列

cut -f3 --complement filename 显示文件除第3列以外的所有列。

cut -f3-5 -d ";" filename 显示文件第三至五列,-d用来指定分隔符。

还可以选择下面两个参数。

字节(bytes),用选项-b

字符(characters),用选项-c

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值