常用linux命令介绍。入门Linux必学的命令行,熟练掌握后,效率远超Windows GUI操作。重要的是,可以方便的做自动化处理!
更多命令在线查询 linux-command.17lai.site
Bash 基础
说明
记录在Linux中经常会用到的命令,持续更新。更多命令详解可参考:
Shell选择与切换
在现代的 Linux 上,sh 已经被 bash 代替,/bin/sh
往往是指向/bin/bash
的符号链接。早期macos系统默认使用bash解释器,在macos10.15系统中官方推荐使用zsh解释器。bash和zsh均是shell的一种,由于bash或zsh本质上都是解释器,他们所共同服务的是shell语言,因此在命令语法上基本相同,zsh能基本完美兼容bash的命令,并且使用起来更加优雅。
当从bash切换为zsh时,如果不想重新配置一遍.zshrc
文件,可以在.zshrc
文件中加上source ~/.bash_profile
,从而直接从.bash_profile
文件读取配置。
如果选择zsh,会获得如下好用的功能:
扩展阅读:程序员内功系列–iTerm与Zsh篇
特殊命令符号
符号 | 格式 | 作用 |
---|
; | 命令1;命令2 | 多个命令顺序执行,命令之间无任何逻辑关系 |
&& | 命令1&&命令2 | 逻辑与:当命令1正确执行后,命令2才会正确执行,否则命令2不会执行 |
|| | 命令1||命令2 | 逻辑或:当命令1不正确执行后,命令2才会正确执行,否则命令2不会执行 |
| | 命令1命令2 | 管道符:命令1的正确输出作为命令2的操作对象 |
& | 命令 & | 后台执行:把命令放在后台执行 |
> | 命令1 > file | 输出重定向:将命令1的结果输出到文件中,该文件原有内容会被删除 |
>> | 命令1 >> file | 输出重定向:将命令1的结果附加到文件中,原文件内容不会被删除 |
< | 命令1 < file | 输入重定向:将file作为命令1的输入 |
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
- 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
- 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
- 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null
,以下是常用重定向命令示例:
- 将 stderr 重定向到 file:
command 2>file
- 将 stderr 追加到 file 文件末尾:
command 2>>file
。 - 将 stdout 和 stderr 合并后重定向到 file:
$ command > file 2>&1
- 对 stdin 和 stdout 都重定向:
command < file1 > file2
- 屏蔽 stdout 和 stderr:
command > /dev/null 2>&1
**注意:**0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。这里的 2 和 > 之间不可以有空格,2> 是一体的时候才表示错误输出。
Bash中的特殊符号
通配符 | 作用 |
---|
? | 匹配一个任意字符 |
* | 匹配0个或多个任意字符,也就是可以匹配任何内容 |
[] | 匹配括号中任意一个字符 |
[-] | 匹配括号中任意一个字符,“-”代表范围 |
[^] | 逻辑非,表示匹配不是括号内的一个字符 |
‘’ | 单引号,在单引号中所有的特殊符号,如“$”和“`”(反引号)都无特殊含义 |
“” | 双引号,在双引号中特殊符号都无特殊含义, 但“$”、“`”(反引号)和“\”是例外,拥有“调用变量值”,“引用命令”和“转义符”的特殊含义 |
“ | 反引号:反引号括起来的内容是系统命令,在Bash中先会执行它和() |
$() | 和反引号作用相同,用来引用系统命令 |
# | 在shell脚本中,#开头的行代表注释 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要用的 $name 方式得到 |
\ | 转义符,跟在\之后的特殊字符将失去特殊含义,变为普通字符 |
基础命令
查看系统基础信息
添加用户
基础设置
磁盘管理
查看网络情况
上传下载文件
清除history
窗口管理
tmux 是一个终端复用器,可以激活多个终端或窗口,每一个终端都可以访问、运行和控制各自的程序。tmux类似于screen,可以关闭窗口将程序放在后台运行,需要的时候再重新连接。常用快捷键如下:
Ctrl+b %
:划分左右两个窗格。Ctrl+b "
:划分上下两个窗格。Ctrl+b <方向键>
:光标切换到其他窗格。Ctrl+b x
:关闭当前窗格。Ctrl+b z
:当前窗格全屏显示,再使用一次会变回原来大小。Ctrl+b Ctrl+<方向键>
:按箭头方向调整窗格大小。
后台执行
性能测试
磁盘测试
延伸阅读:磁盘性能压测—FIO
网络测试
延伸阅读:使用 iPerf 进行网络带宽测试,使用 MTR 诊断网络问题
系统监
dstat
dstat 是一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品。使用dstat命令可以查看当前cpu,磁盘,网络,内存页和系统的一些当前状态指标。
1、 –total-cpu-usage—- CPU使用率
usr:用户空间的程序所占百分比;
sys:系统空间程序所占百分比;
idel:空闲百分比;
wai:等待磁盘I/O所消耗的百分比;
hiq:硬中断次数;
siq:软中断次数;
2、-dsk/total-磁盘统计
read:读总数
writ:写总数
3、-net/total- 网络统计
recv:网络收包总数
send:网络发包总数
4、—paging– 内存分页统计
in: pagein(换入)
out:page out(换出)
注:系统的分页活动。分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,通常情况下当系统已经开始用交换空间的时候,就说明你的内存已经不够用了,或者说内存非常分散,理想情况下page in(换入)和page out(换出)的值是0 0。
5、–system–系统信息
int:中断次数
csw:上下文切换
注:中断(int)和上下文切换(csw)。这项统计仅在有比较基线时才有意义。这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。你的服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。
vmstat
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可实时动态监视操作系统的虚拟内存、进程、CPU活动。
- r 表示运行队列,当这个值超过了CPU数目,就会出现CPU瓶颈了。
- b 正在等待资源的阻塞内核线程数,大于3表示io性能不好
- bi: 每秒读取的块数
- bo: 每秒写入的块数
- us: 用户进程执行时间(user time)
- sy: 系统进程执行时间(system time)
- id: 空闲时间(包括IO等待时间)
- wa: IO等待所占用的CPU时间的百分比,高过30%时IO压力高。
top
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用、内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。
- Cpu(s) %id:空闲CPU时间百分比
- Cpu(s) %wa:等待I/O的CPU时间百分比
- VIRT:进程占用的虚拟内存,详情可参考: 观察进程的内存占用情况
- RES:进程占用的物理内存
- SHR:进程使用的共享内存
- i 只显示正在运行的进程
- e 切换内存单位,切换顺序为: k,m,g,t,p
- k 杀掉某进程
- o: COMMAND=chain 过滤进程,只显示启动命令带chain的进程
sysstat
一个非常方便的工具,它带有众多的系统资源监控工具,用于监控系统的性能和使用情况。我们在日常使用的工具中有相当一部分是来自sysstat工具包的。同时,它还提供了一种使用cron表达式来制定性能和活动数据的收集计划。以下是包含在sysstat包中的工具:
- iostat: 输出CPU的统计信息和所有I/O设备的输入输出(I/O)统计信息。
- mpstat: 关于CPU的详细信息(单独输出或者分组输出)。
- pidstat: 关于运行中的进程/任务、CPU、内存等的统计信息。
- sar: 保存并输出不同系统资源(CPU、内存、IO、网络、内核等)的详细信息。
- sadc: 系统活动数据收集器,用于收集sar工具的后端数据。
- sa1: 系统收集并存储sadc数据文件的二进制数据,与sadc工具配合使用
- sa2: 配合sar工具使用,产生每日的摘要报告。
- sadf: 用于以不同的数据格式(CVS或者XML)来格式化sar工具的输出。
- Sysstat: sysstat工具的man帮助页面。
- nfsiostat: NFS(Network File System)的I/O统计信息。
- cifsiostat: CIFS(Common Internet File System)的统计信息。
- %user:CPU处在用户模式下的时间百分比。
- %nice:CPU处在带NICE值的用户模式下的时间百分比。
- %system:CPU处在系统模式下的时间百分比。
- %iowait:CPU等待输入输出完成时间的百分比。
- %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
- %idle:CPU空闲时间百分比。
- r/s: 每秒完成的读 I/O 设备次数。即 rio/s
- w/s: 每秒完成的写 I/O 设备次数。即 wio/s
- rMB/s: 每秒读M字节数。
- wMB/s: 每秒写K字节数。
- rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
- wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
- avgrq-sz:平均每次设备I/O操作的数据大小,类似于平均每人所买的东西多少
- avgqu-sz:平均I/O队列长度,类似于单位时间里平均排队人数,如果值比较大,表示有大量io在等待。
- await: 平均每次设备I/O操作的等待时间 (毫秒),类似于平均每人的等待时间,如果远大于svctm说明IO响应太慢。
- r_await:平均每次读请求的等待时间(毫秒)。这包括请求在队列中和执行它们所花费的时间。
- w_await:平均每次写请求的等待时间(毫秒)。这包括请求在队列中和执行它们所花费的时间。
- aqu-sz:发送到设备的请求的平均队列长度。
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈,同时可以结合vmstat 查看b参数和wa参数。
另外 await 的参数也要和 svctm 参考比较。差的过高就一定有 IO 的问题。svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢。
队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。
更详细的信息,可参考:深入理解iostat
iotop
iotop
是一个类似 top
的工具,用来显示实时的磁盘活动。监控 Linux 内核输出的 I/O 使用信息,并且显示一个系统中进程或线程的当前 I/O 使用情况。它显示每个进程/线程读写 I/O 带宽。它同样显示当等待换入和等待 I/O 的线程/进程花费的时间的百分比。
性能调优
分析进程调用
pstack用来跟踪进程栈,如果发现一个服务一直处于work状态(如假死),可以多执行几次pstack,若发现代码栈总是停在同一个位置,很可能就是出问题的地方:
strace能够动态的跟踪进程执行时的系统调用和所接收的信号:
内核参数优化
对于服务器来说,file-max和ulimit都需要设置,否则会出现文件描述符耗尽的问题。否则会碰到”Too many open files”或者Socket/File: Can’t open so many files等错误。
文本处理
Vim常用命令
文本处理
awk 数据流处理
awk
是文本处理程序,它依次处理文件的每一行,并读取里面的每一个字段。适用于处理日志、CSV 这种每行格式相同的文本文件。参考:Awk入门 及 30个Awk文本处理示例
脚本结构: awk 'BEGIN{statements} statements2 END{statements}'
,工作方式:
- 执行begin中语句块;
- 从文件或stdin中读入一行,然后执行statements2,重复这个过程,直到文件全部被读取完毕;
- 执行end语句块;
数字证书
系统相关
hostname - 查看主机名
hostname
命令用于查看系统的主机名,或是修改系统的主机名。
hostname
的常用命令如下:
uptime - 查看系统运行时间
uptime
命令用于打印系统的运行时间等信息。使用如下:
w、who - 列出登录的用户
w
命令用于显示登录用户及他们当前运行的进程。输入的内容格式如下:
who
命令有与w
命令类似的用途,但它的功能比w
命令更强大一些。语法格式如下:
who
常用命令如下:
uname - 查看系统信息
uname
命令用于打印内核名称和版本、主机名等系统信息。命令的语法如下所示:
常用使用方式如下:
date - 显示和设置系统日期和时间
date
命令用于以多种格式显示日期和时间,或设置系统的日期和时间。date
命令的语法如下所示:
常用使用命令如下:
id - 显示用户属性
id
命令用于打印输出用户uid
、gid
、用户名和组名等用户身份信息。id
命令的语法如下所示:
常见使用命令如下:
文件和目录操作
touch - 创建文件
touch
命令就可用于创建、变更和修改文件的时间戳。它是 Linux 操作系统的标准程序。touch
命令又如下选项:
touch 命令的常见用法如下:
mkdir - 创建目录
mkdir
命令用于创建一个新目录。最基本的mkdir
命令的使用方法如下所示:
cp - 复制文件或目录
cp
命令用于将文件从一个地方复制到另一个地方。原来的文件保持不变,新文件可能保持原名或用一个不同的名字。
使用 cp 命令复制文件和目录的语法有以下几种:
常用使用示例如下:
ln - 链接文件或目录
ln
命令用于创建软链接或硬链接。使用 -s 选项,可以创建一个软链接:
mv - 移动文件或目录
mv
命令用于将文件和目录从一个位置移到另外一个位置。除了移动文件,mv
命令还可用于修改文件或目录的名字。
mv 命令的基本语法如下所示:
常用命令如下:
rm - 删除文件或目录
rm
命令用于删除指定的文件和目录。其语法如下所示:
rm
的常用命令如下:
- -f 删除前不提示用户确认,并忽略不存在的文件
- -r 递归地删除目录及其下的内容
ls - 列出文件名和目录
ls
命令是Linux
中最常用的命令之一,其作用就是列出文件名和目录。在命令行提示符下,直接输入ls
命令,不带任何选项,将列出当前目录下所有文件和目录,但不会显示详细的信息,比如,文件类型、大小、修改日期和时间、权限等。
以下便是ls
命令及其选项的作用说明:
cat - 连接显示文件内容
cat
命令也是 Linux 系统中最常用的命令之一。cat
命令让我们可以看看文件的内容、连接文件、创建一个或多个文件和重定向输出到终端或文件。
cat
命令的语法如下所示:
cat
常用命令如下:
当你只输入 cat 命令,而没有任何参数时,它只是接收标准输入的内容并在标准输出中显示。所以你在输入一行内容并回车后,会在接下来的一行显示相同的内容。你也可以重定向标准输出到一个新文件。
dd
less、more - 分屏显示文件
more
命令在你使用小的 xterm 窗口时,或是想不使用文本编辑器而只是简单地阅读一个文件时是很有用的。more 命令是一个用于一次翻阅一整屏文件的过滤器。
与more
命令相比,我个人更喜欢less
命令来查看文件。less
命令与more
命令类似,但less
命令向前和向后翻页都支持,而且less
命令不需要在查看前加载整个文件,即less
命令查看文件更快速。
less
常用命令参数如下:
head - 显示文件头部
head
命令用于打印指定输入的开头部分内容。默认情况下,打印每个指定输入的前 10 行内容。
使用-n
选项可以指定打印文件的前 N 行:
tail - 显示文件尾部
tail
命令和head
命令相反,它打印指定输入的结尾部分的内容。默认情况下,它打印指定输入的最后 10 行内容。
使用-n
选项可以指定打印文件的最后 N 行:
file - 查看文件类型
file
命令用于接收一个文件作为参数并执行某些测试,已确定正确的文件类型。
wc - 查看文件统计信息
wc
命令用于查看文件的行数、单词数和字符数等信息。语法类似如下所示:
其中 X 表示行数,Y 表示单词数,Z 表示字节数,filename 表示文件名。
find - 查找文件或目录
find
命令用于根据你指定的参数搜索和定位文件和目录的列表。find
命令可以在多种情况下使用,比如你可以通过权限、用户、用户组、文件类型、日期、大小和其他可能的条件来查找文件。
find
命令常用使用和说明如下:
文本处理
sort - 文本排序
sort
命令用于将文本文件的行排序。默认情况下,sort
命令是按照字符串的字母顺序排序。
sort 的常用命令如下:
uniq - 文本去重
uniq
命令用于移除或发现文件中重复的条目。
tr - 替换或删除字符
tr
命令主要用于删除文件中控制字符或进行字符转换。使用tr
时要转换两个字符串:字符串 1 用于查询,字符串 2 用于处理各种转换。tr
刚执行时,字符串 1 中的字符被映射到字符串 2 中的字符,然后转换操作开始。
tr
命令的语法如下所示:
常用命令示例:
grep - 查找字符串
grep
命令用于搜索文本或指定的文件中与指定的字符串或模式相匹配的行。默认情况下,grep
命令只显示匹配的行。
grep
命令的语法如下所示:
diff - 比较两个文件
diff
命令用于比较两个文件,并找出它们之间的不同。diff
命令的语法如下所示:
常用使用方式如下:
Linux 和UNIX 的新手培训教程
免费的新手Linux教程
免费的UNIX 新手教程
Linux 和 UNIX 专家培训教程
免费的Linux高手教程
免费的UNIX高手教程
参考&感谢