Linux常用命令总结
【命令使用求助】
命令名 --help
如:date --help
【管道操作】
-|
管道,配合其他命令使用。将上一条命令的输出作为下一条命令的输入。
【信息分析处理】
#awk #sed #grep #wc #echo #cut #sort
-awk:文本分析工具。awk 会把每行进行一个拆分,用相应的命令对拆分出来的“段”进行处理。
(1)行工作模式,读入文件的每一行,会把一行的内容,存到$0里
(2)使用内置的变量FS(段的分隔符,默认用的是空白字符),分割这一行,把分割出来的每个段存到相应的变量$(1-100)
(3)输出的时候按照内置变量OFS(out FS),输出
(4)读入下一行继续操作
语法:awk ‘匹配模式+行为’ filename
示例:
provins=($(awk '{print $2}' provinsInfo.txt)):将文本provinsInfo.txt中每行按空格分隔后的第2个(从1开始)字符串放入数组provins中。
echo "String:number" | awk -F':' ‘{print $2}’ :将字符串"String:number"按‘:’进行分隔,并取第2部分
-sed:文本处理工具
语法:sed -参数 '行为'
示例:
sed -i ‘/linux/d’ log.txt:直接在log.txt文件中删除包含linux的行
sed ‘$d’ log.txt:删除log.txt文件的最后一行
sed -n ‘3p’ log.txt:打印log.txt文件中的第3行
-grep:文本的条件筛选工具
语法:cat filename | grep '筛选条件'
示例:
cat xferlog | grep ‘20170915’:筛选出文件xferlog中包含字符‘20170915’的记录(行)。
grep -v:筛选出不包含筛选条件的记录(行)。
grep -c:输出匹配行的条数
grep -n:输出匹配行所在的行号
cat xferlog | egrep ‘20170915|20170916’:筛选出文件xferlog中包含字符‘20170915’或‘20170916’的记录(行)。
-wc:文本信息统计工具
语法:wc filename
-l:列出文本行数
-w:列出文本字数(英文单字)
-m:列出字符数
示例:
wc -l config.txt:显示config文件的行数。(其他写法:grep -n “” 文件名)
wc config.txt:显示结果为:n1 n2 n3 config.txt n1为文本行数,n2为文本字数,n3为文本字符数
-echo:文本打印或控制台输出
语法:echo String
示例:
echo “${username}=vike”:在控制台打印。
echo -n "first line":不打印换行符,后续内容将与“first line”同行显示
-cut:按条件截取字符串
语法:cat filename | cut -b n-m 截取文件的第n-m行字符
echo String | cut -d '分隔符' n 根据自定义分隔符截取第n段
示例:
cat config.txt | cut -b 2-8:截取config.txt文件中的2-8行。
echo config | cut -b 3 :截取config字符串的第三个字符。
-sort:将文本内容按ASCII码值进行排序,升序打印。
语法:sort filename
示例:
sort config.txt:以文件的各行为单位,按ASCII码排序打印输出,原文本未做修改。
【系统信息查询】
#du (disk usage) #df #stat
作用:显示目录(或文件)所占磁盘空间的大小。
参数说明:
-
-0 每个结果显示后不换行
-
-a或–all 为每个指定文件显示磁盘使用情况,或者为目录中每个文件显示各自磁盘使用情况。
-
–apparent-size 显示目录或文件自身的大小
-
-B或–block-size=SIZE 以SIZE为计量单位显示目录或文件大小;SIZE可以为任意整数,也可以为KB 1000, K 1024, MB 10001000, M 10241024, 类似地对于G, T, P, E, Z, Y。
-
-b或–bytes 以byte为单位显示目录或文件大小,等价于’–apparent-size –block-size=1′
-
-c或–total 除了显示目录或文件的大小外,同时显示所有目录或文件的总和。
-
-D或–dereference-args 显示指定符号连接的源文件大小。
-
–files0-from=F 显示文件F 中以NUL 结尾的文件名对应占用的磁盘空间;如果F 的值是”-”,则从标准输入读入文件名
-
-h或–human-readable 以K,M,G为单位,提高信息的可读性。
-
-H或–si 与-h参数相同,但是K,M,G是以1000为换算单位,而不是以1024为换算单位。
-
-k或–kilobytes 以1024 bytes为单位,等价于–block-size=1K。
-
-l或–count-links 重复计算硬连接的文件。
-
-L或–dereference 统计符号连接源文件大小。
-
-P或–no-dereference 不同符号链接源文件的大小,默认。
-
-m或–megabytes 以1MB为单位,等价于–block-size=1M。
-
-s或–summarize 仅显示总计,即当前目录占用空间的总和。
-
-S或–separate-dirs 显示每个目录的大小时,并不含其子目录的大小。
-
-x或–one-file-system 忽略位于其他文件系统上的目录。
-
-X FILE或–exclude-from=FILE 忽略在FILE文件中指定目录或文件。
-
–exclude=PATTERN 忽略符合PATTERN规则的目录或文件。
示例:
du -ah --max-depth=1 :查看目录下的所有文件的大小,以K、M、G的单位显示。
-a 表示目录中每个文件显示各自磁盘使用情况
-h 以K,M,G为单位,提高信息的可读性。
--max-depth=n 表示只深入到第n层目录,此处设置为1,即表示只深入到第一层子目录
df -h:显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。
-h 以K,M,G为单位,提高信息的可读性。
stat -c 格式代码 文件名:获取关于文件的额外信息,包括文件系统和文件。
【用户及权限操作】
#chmod #chown #passwd
-chmod:修改文件(夹)权限
语法:chmod mode file
其中mode是指:owner+[rwx]
owner:u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
此外mode也可以是数字:r=4,w=2,x=1。
示例:
chmod ugo+r file.txt :将文件 file.txt 设为所有人添加读取的权限。
chmod 777 file.txt :将文件file.txt 设为所有人皆可读可写可执行。
-chown:修改文件(夹)所属的用户或用户组
语法:chown own:group file
其中own指文件所属用户,group指文件所属的群组
示例:
chown root: file.txt:改变文件file.txt的拥有者和群组
chown :aiusr file.txt:改变文件file.txt的组群
-passwd:修改系统用户的密码
语法:passwd username
回车后再依次输入旧密码和两遍新密码即可修改完成
(先登录root,获得root权限) passwd aiusr :修改用户aiusr的密码。
【文件操作】
#mkdir #cd #cp #scp #mv #rm #touch #cat #head #tail #vi
-mkdir:创建文件夹
语法:mkdir [mode] dirname
示例:
mkdir 760 data:创建名为data的文件夹,权限为创建者可读可写可执行,同组的可读可写,普通用户无任何权限。
-cd:进入某个路径下的文件夹
语法: cd filepath
示例:
cd /home/data:进入目录/home/data
-cp:复制文件
语法:cp filepath1/filename1 filepath2/filename2
示例:
cp /home/data/1.txt /home/data/backup/2.txt:复制/home/data/目录下的文件1.txt到目录/home/data/backup/下,命名为2.txt。
-scp:复制文件至远程服务器
语法:scp filepath1/filename1 remote_username@remote_ip:filepath2/filename2
示例:
scp home/vike/data/1.txt universal@192.168.1.246:/home/zw/data/1.txt:复制当前主机下/home/data/目录下的文件1.txt到远程主机universal(ip:192.168.1.246)的/home/zw/data/目录下。
-mv:移动文件(重命名文件)
语法:mv filepath1/filename1 filepath2/filename2
示例:
mv /home/data/1.txt /home/data/backup/2.txt:移动/home/data/目录下的文件1.txt到目录/home/data/backup/下,命名为2.txt。
mv /home/data/1.txt /home/data/2.txt:将/home/data/目录下的文件1.txt重命名为2.txt。
-rm:删除文件
语法:rm filepath/filename
示例:
rm /home/data/1.txt:删除/home/data/目录下的文件1.txt
-f 强制删除文件或者文件夹,不提示
-r 递归处理,将目录下的文件及其子文件夹全部删除
-i 删除文件或目录前先询问用户(输入y或n后再进行操作)
-touch:创建文件
语法:touch filepath/filename
示例:
touch /home/data/2.txt:在/home/data/目录下创建文件2.txt
-cat:打开文件
语法:cat filepath/filename
示例:
cat /home/data/1.txt:打开/home/data/目录下的文件1.txt
cat -n filename:打开文件,并显示行号。
-head,-tail:查看文件前/后n行(不填写参数时默认显示10行)
语法:head [-n] filepath/filename;
tail [-n] filepath/filename
示例:
head /home/data/1.txt:打印/home/data/目录下文件1.txt的前10行
tail -50 /home/data/1.txt:打印/home/data/目录下文件1.txt的后50行
-vi,-vim:编辑文件(打开文件后--i(输入),:q!(退出),:wq(保存退出))
语法:vi filepath/filename
示例:
vi /home/data/1.txt:编辑/home/data/目录下的文件1.txt
【搜索】
#find #locate #whereis
【进程】
#ps -ef 查看进程
#crontab -l 查看当前定时任务
#crontab -e 编辑当前定时任务
crontab格式 分 时 日 月 周 命令行
* * * * * xxxx
* :所有取值 / :每 X-Y:从X连续到Y X,Y:离散的X和Y
【其他】
#字符串/数值比较(参考:http://blog.csdn.net/weiyuweizhi/article/details/7488388):
整数比较:
-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
< 小于(需要双括号),如:(("$a" < "$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))
> 大于(需要双括号),如:(("$a" > "$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))
字符串比较:
= 等于,如:if [ "$a" = "$b" ]
== 等于,如:if [ "$a" == "$b" ], 与=等价
注意:==的功能在[[]]和[]中的行为是不同的,如下:
1 [[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true
2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true
3 [ $a == z* ] # File globbing 和word splitting将会发生
4 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true
!= 不等于,如:if [ "$a" != "$b" ], 这个操作符将在[[]]结构中使用模式匹配.
< 小于,在ASCII字母顺序下.如:
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ] 在[]结构中"<"需要被转义.
> 大于,在ASCII字母顺序下.如:
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ] 在[]结构中">"需要被转义.
-z 字符串为"null".就是长度为0.
-n 字符串不为"null"
#字符串截取切割(参考:http://www.jb51.net/article/56563.htm)
假设有变量 var=http://www.aaa.com/123.htm.
1. # 号截取,删除左边字符,保留右边字符。
echo ${var#*//}
其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://,结果是 :www.aaa.com/123.htm
2. ## 号截取,删除左边字符,保留右边字符。
echo ${var##*/}
##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
即删除 http://www.aaa.com/,结果是 123.htm
3. %号截取,删除右边字符,保留左边字符
echo ${var%/*}
%/* 表示从右边开始,删除第一个 / 号及右边的字符
结果是:http://www.aaa.com
4. %% 号截取,删除右边字符,保留左边字符
echo ${var%%/*}
%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
结果是:http:
5. 从左边第几个字符开始,及字符的个数
echo ${var:0:5}
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:
6. 从左边第几个字符开始,一直到结束。
echo ${var:7}
其中的 7 表示左边第8个字符开始,一直到结束。
结果是 :www.aaa.com/123.htm
7. 从右边第几个字符开始,及字符的个数
echo ${var:0-7:3}
其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
结果是:123
8. 从右边第几个字符开始,一直到结束。
echo ${var:0-7}
表示从右边第七个字符开始,一直到结束。
结果是:123.htm
注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)
#停止后台运行的脚本/进程
1、筛选出需要的脚本,获取进程ID:
ps -ef | grep '脚本名'
2、强行终止脚本
kill -9 进程ID