五分钟扫盲:25个工作中常用的Linux命令
§基础篇
cd 命令
语法:cd [dirName]。
功能:全拼change directory,从当前工作目录切换到指定的工作目录。dirName 表示法可为绝对路径或相对路径。
说明:该命令将当前目录改变至dirName所指定的目录。若没有指定dirName,则回到用户的主目录。为了改变到指定目录,用户必须拥有对指定目录的执行和读权限。
常用方式示例:
- cd .. 返回上一级目录。
- cd ~ 进入当前用户目录。
- cd /root/Documents # 切换到目录/root/Documents
ls / ll 和 clear 命令
语法:ls [选项] [目录或是文件]
功能:列出目录的内容
说明:list之意,用于查看某个目录的内容。当未给出目录名或是文件名时,就显示当前目录的信息。ll与之类似,不再赘述。
clear:清除屏幕上的信息,清屏后,提示符移动到屏幕左上角。
cd和ls应该是使用最多的两个命令,尤其是对于Linux目录结构陌生的用户。
grep 命令 : 查找关键字
语法:grep [-acinv] [--color=auto] [keyword] [文件或目录...]
功能:文本搜索工具,类似于正则表达式搜索,可以在一个大的文件中快速搜索到满足一定规则的内容,查到就高亮显示。
说明:Global Regular Expression Print 的缩写,分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等。
例如,取出文件/etc/man.config中包含MANPATH的行,并把找到的关键字加上颜色
grep --color=auto 'MANPATH' /etc/man.config
find命令
语法:find [PATH] [option] [action]
功能:多用于查找文件路径。
说明:常用的是-name fileName
找出文件名为fileName的文件。
案例一:搜索Data目录下以点fna结尾的文件,
find ../Data -name *.fna
案例二:查找大于100M的文件;
find ./ -size 100M
案例三:查找 48 小时内修改过的文件,可以分分钟确认关键文件是否被修改
find -atime -2
案例四:查找关键词keyword在哪个目录:
find -name "keyword"
kill
语法:kill -signal PID。
功能:启动或者结束进程,PID可以通过ps命令、管道命令加上grep命令进行筛选获得。
说明:该命令用于向某个工作(%jobnumber)或者是某个PID(数字)传送一个信号,它通常与ps和jobs命令一起使用.
signal的常用参数如下:
- 1:SIGHUP,启动被终止的进程
- 2:SIGINT,相当于输入ctrl+c,中断一个程序的进行
- 9:SIGKILL,强制中断一个进程的进行(常用)
- 15:SIGTERM,以正常的结束进程方式来终止进程
- 17:SIGSTOP,相当于输入ctrl+z,暂停一个进程的进行
注:最前面的数字为信号的代号,使用时可以用代号代替相应的信号。例如:
以正常的结束进程方式来终于一个后台工作(pid = 2821)
kill -15 2821
tail
语法:tail [options] [fileName]
功能:查看文件的内容。
说明:有一个常用的参数 -f 常用于查阅正在改变的日志文件。
参数-n<行数> 显示文件的尾部 n 行内容。例如:
tail -f fileName # 把 fileName 文件里的最尾部的内容显示在屏幕上,并且不断刷新。
tail -500f fileName # 在屏幕上显示 fileName 文件里尾部500行的内容,且不断刷新。
cp命令
全拼copy,其功能为复制文件或目录。
语法:cp [选项] 源文件或目录 目标文件或目录。
功能:把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。
说明:为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。
mv命令
语法:mv [选项] 源文件或目录 目标文件或目录。
功能:用户可以使用mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中。
说明:视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
案例:将文件 test.log 重命名为 test1.txt
mv test.log test1.txt
rm命令
语法:rm [选项] 文件…
功能:删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。
说明:对于链接文件,只是断开了链接,原文件保持不变。
mkdir命令
语法:mkdir [-p] dirName。
功能:创建一个名为dirName的子目录。
说明:-p 确保目录名称存在,不存在的就建一个。
rmdir 命令
语法:rmdir [选项] dir-name
功能:删除空目录。
cat 命令
语法:cat fileName。
功能:查看文本文件的内容,后接要查看的文件名。
说明:通常可用管道与more和less一起使用,从而可以一页页地查看数据。例如:cat text | less
# 查看text文件中的内容
pwd 命令
语法:pwd
功能:显示当前工作目录的绝对路径。
说明:全拼print working directory。在Linux层次目录结构中,用户利用cd命令可以从一个目录转换到另一个目录,然而,没有提示信息告知用户目前处于哪一个目录中。要想知道当前所处的目录,可以使用pwd命令,它显示整个路径名。
gzip和unzip命令
语法:gzip/unzip [选项] 待压缩的文件名 或者 unzip [选项] 压缩文件名.zip。
功能:前者用于压缩,后者用于解压。
说明:减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。
ping 命令 : 检测主机
执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
语法:ping [-c] [主机名称或IP地址]
-c<完成次数> 设置完成要求回应的次数。
telnet 命令 : 端口是否可访问
语法:telnet [主机名称或IP地址<通信端口>]
虽然 Linux telnet 命令主要用于远端登入。执行 telnet 指令开启终端机阶段作业,并登入远端主机,但是我更经常用它来查看某个远端主机端口是否可访问。
| 管道命令
通常情况下,我们在终端只执行一条命令,那么如何执行多条命令呢?使用管道命令。管道是一种通信机制,通常用于进程间的通信(也可通过 socket 进行网络通信),它表现出来的形式将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。
ps 命令
语法:ps [options]
功能:查看当前进程 (process) 的状态。
options:-e 显示所有进程,-f 全格式。
说明:英文全拼是process status。列出当前正在运行的程序,连带命令行
ps -ef
那如何定位我们想要查看的进程A,这个时候需要结合管道命令和grep,即 ps -ef | grep A
。例如,查看是否已经有tomcat在运行:
ps -ef | grep tomcat
watch
语法:watch [参数] [指令]
功能:动态查看指令执行的结果
说明:以周期性的方式执行给定的指令,指令输出以全屏方式显示。
- 比如如果需要每隔一秒高亮显示网络连接数的变化情况。则
watch -n 1 -d netstat -ant
- 每隔一秒高亮显示http连接数的变化情况
watch -n 1 -d 'pstree | grep http'
- 十秒一次输出系统的平均负载
watch -n 10 'cat /proc/loadavg'
diff
语法:diff -c file1 file2
功能:显示两个文件的差异
§进阶篇
部署在Linux系统的服务出现性能问题,一般可以通过 top、iostat、free、vmstat和ifstat等命令来初步定位问题,下面就聊聊这几位宝贝。
top 及其精简版uptime
语法:top [options] / uptime
功能:实时显示 process 的动态,查看机器整体性能。然后,按数字“1”可监控每个逻辑CPU的状况。如果不按1,则在top视图里面显示所有cpu的平均值。
说明:常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。重点看load average、%CPU和%MEM三个指标。
top - 18:17:22 up 8:52, 1 user, load average: 0.05, 0.04, 0.05
Tasks: 99 total, 2 running, 97 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 739932 total, 353944 free, 125284 used, 260704 buff/cache
KiB Swap: 1044476 total, 1044476 free, 0 used. 459304 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
47 root 20 0 0 0 0 S 0.1 0.0 0:36.55 kworker/0:1
643 root 20 0 21668 1284 972 S 0.1 0.2 0:18.13 irqbalance
1668 root 20 0 0 0 0 S 0.1 0.0 0:01.08 kworker/1:1
1 root 20 0 127968 6480 4096 S 0.0 0.9 0:01.93 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.23 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.02 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 R 0.0 0.0 0:01.95 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
第一行,任务队列信息,与 uptime 命令的执行结果一模一样。
系统时间:18:17:22
运行时间:up 8:52 min,
当前登录用户: 1 user
负载均衡 load average: 0.05, 0.04, 0.05
load average后面的三个数分别代表1分钟、5分钟和15分钟的负载情况,是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。sum(三个值)/3\*100%>60%
同样表明系统在超负荷运转了。
第七行以下:各进程(任务)的状态监控
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S —进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
top -pid 4712 指定进程 id后显示 process 的动态
vmstat
语法:vmstat
功能: 查看磁盘空间
说明:是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的进程、虚拟内存、CPU活动进行监控。主要看首位两个参数proce和cpu。
示例:vmstat -n 2 3
每两秒采样一次,共采样三次:
CPU:
- us 用户进程消耗CPU时间百分比。我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。us值越高,用户消耗CPU时间越多,如果长期大于50%,则需要优化系统。
- sy 内核进程消耗CPU时间百分比。如果太高,表示系统调用时间长,例如是IO操作频繁。
- id 空闲 CPU时间,一般来说,id + us + sy = 100。
通常我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
Procs(进程):
- r: 运行队列中进程数量,就是说多少个进程真的分配到CPU。
- b: 等待IO的进程数量。
查询所有CPU信息:
mpstat -P ALL 2
idle CPU空闲率,超过80%说明性能可以,低于的话就要优化系统了。每个进程使用 cpu 的用量分解信息:
pidstat -u 1 -p 进程编号
free
语法:free [-bkmotV][-s <间隔秒数>]
功能:显示Linux系统中物理内存、交换内存的使用统计信息。
free -s 10 //每10s 执行一次命令
查看额外信息: pidstat -p 进程号 -r 采样间隔秒数
df
语法:df [选项] [dirName]
功能:统计磁盘使用情况,显示磁盘可用空间容量信息及空间结点信息。
说明:英文全拼是disk free。一般加一个-h选项,然后接要查看的磁盘,默认所有磁盘。
用法1:df
表示查看磁盘空间时以字节方式显示空间总大小和剩余空间。
用法2:df -h
表示查看磁盘空间时以KB、MB、GB等单位方式显示剩余和总空间大小,比较常用的方式。温馨提示,常用选项-h 是human-readable的缩写,功能是使用我们更易读的格式,将文件或者消耗容量以(GB,kB等)列出来。
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 5.5T 742G 4.7T 14% /
devtmpfs 126G 0 126G 0% /dev
输出信息中,Filesystem表示文件系统(可以理解为分区),Size表示总空间,Used(表示已使用的空间),Avail(表示剩余空间),Use%(表示已使用空间的百分比),Mounted on(表示挂载点或磁盘挂载对应的目录路径)
iostat 磁盘IO
语法:iostat
功能:监控系统设备的IO负载情况
说明: I/O statistics 是输入/输出统计的缩写。特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。
如果 %iowait 的值过高,表示硬盘存在I/O瓶颈。%idle值高说明CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应先排查应用程序,如果不存在问题,则加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
Linux 远程登录
介绍点远程登录的基础知识,温故知新。
Linux 服务器远程登录常用客户端工具:Putty和XShell(推荐)。
使用sftp客户端安装连接sftp服务器,来上传和下载安装包常用客户端工具:Winscp(推荐)和xftp。
小结
以上只是日常运维工作需要基本掌握的一些命令,有了它们可以完成绝大部分的工作。当然,技不压身,如果掌握更多的命令可以更高效地完成工作。