linux命令使用方法,在网页中搜索命令用Ctrl+F
查看命令用法可以在命令后加-h
或--help
,或者用man <command>
查看详细用法
常用命令
nohup
不挂断地执行命令
烦恼于晚上跑的任务因为网络波动或是电脑自动重启挂了?用它就对了!
nohup <command> [> logfile] [2>&1] [&]
最常用的方式是与&
结合使用,后台执行command
,配合输出重定向> logfile 2>&1
更佳哦(默认输出到当前目录下的nohup.out
)
能够在关闭终端的情况下也不间断地执行命令,如果是连接到远程跑任务那么关闭远程连接也没事,这样妈妈再也不用担心任务跑断啦!
time
记录命令使用的系统资源,一般用于记录cpu时间、最大使用内存等信息
根据选项可以自定义不同的输出信息,默认输出到标准输出的最后
time [options] <command>
-f FORMAT 以FORMAT字串设定输出格式
-o FILE 设定结果输出文件(默认覆盖)
-a 配合-o使用,以追加形式
Example:
// 我常用的格式
/usr/bin/time -f "%e %U %P %M" [command]
e 执行命令所花费的现实时间(s)
U 用户模式下的CPU时间(s)
P 平均使用CPU率
M 占用最大内存(KB)
top
查看当前运行进程信息及系统资源使用情况
top [options]
-u username 查看指定用户相关进程
-d N 指定刷新时间间隔(s)(默认1s)
-c 显示完整命令
history
查看历史命令
注1:该命令是直接输出到屏幕,所以一般配合浏览命令使用(如less
或more
)
history | less
注2:如果想执行之前相同的命令,可直接使用!number
执行对应number
行数的命令,比如!1024
就是执行1024行对应的命令。
ln -s
创建软链接(也称为符号链接,可理解为C语言里的指针)
测试时拷贝数据嫌麻烦?命令里输入一长串地址又费力?到它登场啦!
工作中每个人对于自己的目录有不同的管理方式,我个人一般会把代码和数据分开存放。在测试某个项目单元时对需要用到的数据创建一个软链接到测试目录,这样测试的时候在相同目录取用数据岂不美哉?
ln -s <src file> <link file>
-s 创建symbolic link
source file 你想创建的链接指向的目标
link file 创建的链接名
注:如果输入源文件名的时候用的是绝对路径,那么即使把软链接拷贝到另一个目录下也可以继续使用,但如果用的是相对路径,那么拷贝后可能无法使用。
du
查看目录或文件大小
du -h <path>
-h 结果以K、M、G为单位显示(可读性更好)
free
查看内存使用情况
free -h
-h 结果以K、M、G为单位显示(可读性更好)
文件操作
touch
本来是用于修改文件或目录的时间属性的,但一般用它来创建空文件
touch <filename>
chmod
更改文件或目录权限
一般用于限制或开放自己目录,或是给新脚本加权限
wc
对文件的换行符、单词或字符计数(WordCount)。一般用作看文件行数。
wc [options] <file(s)>
-c,--bytes 输出字节数
-m,--chars 输出字符数
-w,--words 输出单词数
-l,--lines 输出行数(换行符数)
head
& tail
打印文件内容,head
打印开头的,tail
打印结尾的,两者用法差不多。默认打印10行内容。
以head
为例:
head [options] <file(s)>
-c,--bytes=N 显示前N字节的内容
-n,--lines=N 显示前N行的内容
注1:数字N
可以是数字,也可以加上乘数后缀,比如
1K = 1024
1KB = 1000
1M = 1K*1K
1MB = 1KB*1KB
后续还有G、T、P、E等类似
注2:数字如果是负数,如--lines=-3
,则表示打印除最后3
行外的其他内容
vim
文本编辑器,详细使用教程请看这里。下面是常用命令:
:set number 显示行号
:set nonumber 隐藏行号
:N 跳转到N行
/pattern 向下搜索pattern
按 n 跳到下一个搜索结果
按 N 跳到上一个搜索结果
?pattern 向上搜索,n N 作用与上面相反
* 直接对光标当前所在的单词执行向下搜索
# 直接对光标当前所在的单词执行向上搜索
/\<pat\> \<和\>是单词定界符
:noh 取消当前高亮(搜索时匹配的结果会高亮)
cut
有点类似awk
对文本每一行进行操作,但不如awk
那么强大。
更适合对每一行格式相同、有固定分隔符的文本进行打印
cut [options] <file>
// 必须选用下面三个选项中的一个且仅能用一个
-b,--bytes=范围 只选中指定字节
-c,--characters=范围 只选中指定字符
-f,--fields=范围 只选中指定字段(默认打印不包含分隔符的行,除非指定了-s)
-d,--delimiter=分隔符 指定分隔符(默认TAB)
注:范围可以有一个或多个(用,
分隔),每个范围格式如下(类似python切片):
N 第N个字节、字符或字段(从1开始)
N-M 从N到M(包含M)
N- 从N开始到行末
-M 从行首开始到第M个
diff
比较两个文件内容
diff [options] <file1> <file2>
-s 文件相同时进行报告
-y 以两列的格式进行输出(默认一列输出,具体格式请自行查阅帮助文档)
--suppress-common-lines 相同的行不进行输出
hexdump
以16进制打印文件内容,默认输出到标准输出
一般用于检查输出的二进制文件内容对不对,比如文件头格式之类的
hexdump [options] <file>
-n <length> //格式化输出前length字节
-v //显示所有数据。不含此选项时,对于与上一行完全相同的数据,会以 * 显示
-C //输出规范的十六进制和Ascii码
-c //单字节字符显示
-d //双字节十进制显示
-o //双字节八进制显示
-x //双字节十六进制显示
注:如果文件较大请配合浏览命令使用(如less
或more
)
hexdump -C test.txt | less
文件同步
scp
节约资源,系统负荷小,可实现免密登录,但不支持断点续传
scp [options] <source> <destination>
-r 递归处理文件夹
-q 不显示进度
-l N 限制传输速度(kb/s)
rsync
最大特点是支持断点续传
rsync [options] <source> <destination>
-P 等于 --progress, --partial
--progress 显示进度
--partial 保留中间文件,实现断点续传
-r,--recursive 递归处理文件夹
-v,--verbose 显示详细信息
-L,--copy-links 将软链接复制为链接文件
Example:
// 将远端某路径同步到本地路径
rsync -P -r username@192.168.0.1:/path/on/remote ./local/path
三剑客
因为位置不够了我就放个简单版本吧,详细的后面再补(
awk
太强大了我用不来
sed
用命令行字符串或脚本来处理文件,以行为单位
一般用在想在指定行附近操作,如插入删除某些行,或替换指定行的部分内容等
sed [-e script | -f script_file] <file>
-e action 指定操作动作(可省略)
-f file 指定操作文件
-n 只输出script处理的行
-i 修改源文件(默认不修改)
action:
除了查找替换,其他所有操作都遵循模式:N(范围)A(动作)
范围:可以没有
N 第N行(从1开始)
N,M 第N~M行
/pattern/ 搜索符合pattern的行
动作:至少1个,有多个命令时用{}括起来,命令之间用;进行分隔
i 插入(指定行前)
a 追加(指定行后)
d 删除
p 打印
c 取代(整行取代)
s 替换(通常搭配正则表达式对匹配结果进行替换)
q 退出
Examples:
sed -n '2p' // 打印第2行
sed -e '2,5d' // 删除2~5行
sed -n '/oo/{s/oo/kk/;p;q}' // 搜索包含oo的行并替换成kk,打印,退出
sed -n 's/oo/kk/' // 将每行第一个oo替换为kk
sed -i 's/oo/kk/g' // 将所有oo都替换为kk,原地编辑
注1:插入多行时用\
来进行新行标记
注2:$
表示最后一行
注3:可以用多个-e script
进行多点编辑
grep
搜索并打印文件中包含字符串或正则的行
grep [options] pattern [file]
-i 忽略大小写
-n 显示匹配行号
-r 递归查找子目录中的文件
-v 反向搜索,只打印不匹配的行
任务管理
kill
给任务发送信号,默认发送TERM(15),即终止。
kill [-s 信号说明符 | -信号说明符 | -n 信号编号] <pid>
-l,-L 列出所有信号名
STOP 挂起后台进程
CONT 恢复后台进程(前台的不行)
Examples:
// 3种强制杀死进程的方式
kill -s KILL <pid>
kill -KILL <pid>
kill -9 <pid>
前后台切换
-
jobs
:查看暂停执行的任务
-l 显示pid
把任务后台执行时会有一个提示(类似下图),前面的1是job number(任务序号),后面的3694则是任务的pid
-
Ctrl+z:挂起前台进程
-
Ctrl+c:终止前台进程
-
stop [job num] 暂停任务
-
fg [job num] 恢复任务到前台运行(foreground)
-
bg [job num] 恢复任务到后台运行(background)
-
kill [job num] 终止任务
压缩解压
gzip
gzip [options] <file>
-c 输出到标准输出,不修改源文件
-k 保留源文件
-d 解压模式
-f,--force 强制覆盖输出文件
-r,--recursive 递归压缩子文件/子目录
-v,--verbose 打印冗余信息
-N 设定压缩等级[1-9],数字越小压缩速度越快,数字越大压缩率越好
默认为[6]
gzip
/ gunzip
/ zcat
zcat
命令可理解为对gz压缩文件的cat
命令,把输出重定向到文件即可完成与gzip -c -d
和gunzip -c
相同的解压功能
// 3种解压gz文件方式
gzip -c -d *.gz > output_filename
gunzip -c *.gz > output_filename
zcat *.gz > output_filename
tar
这是一个强大的打包工具,集成了各种压缩算法,可以用于备份和打包文件或目录。
tar [options] <output.tar> [files ...]
-z 使用gzip压缩归档文件
-c 创建新归档文件
-x 解压归档文件
-t 列出归档文件内容
-v 显示详细信息(verbose)
-f 指定归档文件名(必须放在选项最后)
常见错误集
- 执行脚本时
permission denied
一般是脚本忘记开执行权限了,具体看这里 - 执行脚本提示bad interpreter: No such file or directory
可能是脚本由windows编写,每行末尾包含不可见字符/r/n导致的。
可用vim
打开文件,执行:set ff
查看文件格式(fileformat),如果显示为dos则确实是格式有误,再执行:set ff=unix
设置文件格式后:wq
保存退出即可 - windows下编写的脚本上传到linux后每行末尾包含
^M
字样
这是换行符不一致问题。
可用vim
打开文件,执行:%s/^M$//g
替换掉^M
。注:^M
输入方式为Ctrl+v,Ctrl+M