首页 > 一文快速学懂常用工具——Linux命令(上)
头像
蒋豆芽
发布于 2021-08-03 10:31
+ 关注

一文快速学懂常用工具——Linux命令(上)

img
  • 本专栏适合于软件开发的学生或人士,有一定的编程基础。
  • 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。这才是一份面试题总结的正确打开方式。这样才方便背诵
  • 如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习,共同进步。
  • 相信大家都有着高尚的灵魂,请尊重我的知识产权,未经允许严禁各类机构和个人转载、传阅本专栏的内容。
img

欢迎围观蒋豆芽的博客面经:https://blog.nowcoder.net/jiangwenbo


一. 引言

不用豆芽多说,Linux命令实在是太重要了,面试经常问,平时也常用,我们前几篇文章都是有涉及到的,今天我们就来学一学吧!


二. 指令学习

1. 常用指令一览

我们先列出常用的命令来,然后我们再一一介绍。

命令 功能
man 帮助命令
ls命令 查看当前文件与目录信息
cd命令 用于切换当前目录
pwd命令 用于显示工作目录。
mkdir命令 mkdir 命令用于创建文件夹。
rm命令 删除文件或文件夹命令
find 命令 查找目录或文件
mv命令 移动文件或文件夹命令
cp命令 复制命令
cat命令 查看文件内容;连接文件
more命令 more 会以一页一页的显示文件内容
less命令 less 与 more 类似,但使用 less 可以随意浏览文件
grep命令 该命令常用于分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工。
ps命令 查看进程情况
top命令 可以查看操作系统的信息,如进程、CPU占用率、内存信息等
kill命令 向进程发送终止信号

2. 基础命令介绍

man命令:帮助命令。当我们某个指令不会使用时或不熟悉参数,可以使用man命令+想要查找的命令。就会显示出关于该命令的详细内容。

man得到的内容比用 help 更多更详细,而且man没有内建与外部命令的区分,因为 man 工具是显示系统手册页中的内容,也就是一本电子版的字典,这些内容大多数都是对命令的解释信息,还有一些相关的描述。通过查看系统文档中的 man 也可以得到程序的更多相关信息和 Linux 的更多特性。所以这里建议用man替代help命令。

示例:

$ man mv

NAME
       mv - move (rename) files

SYNOPSIS
       mv [OPTION]... [-T] SOURCE DEST
       mv [OPTION]... SOURCE... DIRECTORY
       mv [OPTION]... -t DIRECTORY SOURCE...

DESCRIPTION
       Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.

       Mandatory arguments to long options are mandatory for short options too.

       --backup[=CONTROL]
              make a backup of each existing destination file

       -b     like --backup but does not accept an argument

       -f, --force
              do not prompt before overwriting

       -i, --interactive
              prompt before overwrite

       -n, --no-clobber
              do not overwrite an existing file

       If you specify more than one of -i, -f, -n, only the final one takes effect.

cd 命令。切换目录:cd [目录名]

示例:

cd /        //切换到根目录

cd /usr     //切换到根目录下的usr目录

cd ../      //切换到上一级目录 或者  cd ..

cd ~        //切换到home目录

ls命令:就是 list 的缩写,通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限) 查看目录信息等等。

//常用参数搭配:  
ls -a 列出目录所有文件,包含以.开始的隐藏文件  
ls -A 列出除.及..的其它文件  
ls -r 反序排列  
ls -t 以文件修改时间排序  
ls -S 以文件大小排序  
ls -h 以易读大小显示  
ls -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来  

实例:

//按易读方式按时间反序排序,并显示文件详细信息  
ls -lhrt  

//按大小反序显示文件详细信息  
ls -lrS  

//列出当前目录中所有以"t"开头的目录的详细内容  
ls -l t*  

//列出文件绝对路径(不包含隐藏文件)  
ls | sed "s:^:`pwd`/:"  

mkdir 命令。mkdir 命令用于创建文件夹。

//参数  
-m: 对新建目录设置存取权限,也可以用 chmod 命令设置;  
-p: 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不在的目录,即一次可以建立多个目录。

实例:

//当前工作目录下创建名为douya的文件夹  
mkdir douya  

//在 tmp目录下创建路径为test/t1/douya的目录  
mkdir -p /tmp/test/t1/douya  

rm 命令。删除一个目录中的一个或多个文件或目录。

//参数  
-i 删除前逐一询问确认。  
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。  
-r 将目录及以下之档案亦逐一删除。  

实例:

//删除任何.log 文件,删除前逐一询问确认  
rm -i *.log  

//删除douya子目录及子目录中所有档案删除,并且不用一一确认  
rm -rf douya  

//删除以 -f 开头的文件  
rm -- -f*  

mv 命令。移动文件或修改文件名,根据第二参数类型(如目录,则移动文件;如为文件则重命令该文件)。当第二个参数为目录时,第一个参数可以是多个以空格分隔的文件或目录,然后移动第一个参数指定的多个文件到第二个参数指定的目录中。

实例:

//将文件 test.log 重命名为 test1.txt  
mv test.log test1.txt  

//将文件 log1.txt,log2.txt,log3.txt 移动到根的 test3 目录中  
mv log1.txt log2.txt log3.txt /test3  

cp 命令。将源文件复制至目标文件,或将多个源文件复制至目标目录。

//参数  
-i 提示  
-r 复制目录及目录内所有项目  
-a 复制的文件与原文件时间一样  

实例:

//复制 a.txt 到 test 目录下,保持原文件时间,如果原文件存在提示是否覆盖。  
cp -ai a.txt test  

命令:find 目录 参数 文件名称

实例:

find /usr/tmp -name 'a*'    //查找/usr/tmp目录下的所有以a开头的目录或文件

3. 进阶命令介绍

pwd 命令。pwd 命令用于查看当前工作目录路径。

实例:

//查看当前路径  
pwd  

//查看软链接的实际路径  
pwd -P  

cat 命令

实例:

//第一个功能:显示文件内容  
cat filename  

//第二个功能:创建文件  
cat > filename  

//第三个功能:合并文件  
//参数  
-b 对非空输出行号  
-n 输出所有行号  
//实例:  
//把 log2012.log 的文件内容加上行号后输入 log2013.log 这个文件里  
cat -n log2012.log log2013.log  

more命令。more 会以一页一页的显示,方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示。

//参数  
+n        从笫 n 行开始显示  
-n        定义屏幕大小为n行  
+/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示   
-c        从顶部清屏,然后显示  
-d        提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能  
-l        忽略Ctrl+l(换页)字符  
-p        通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似  
-s        把连续的多个空行显示为一行  
-u        把文件内容中的下画线去掉  
//常用操作命令  
Enter    向下 n 行,需要定义。默认为 1 行  
Ctrl+F   向下滚动一屏  
空格键   向下滚动一屏  
Ctrl+B   返回上一屏  
=        输出当前行的行号  
:f       输出文件名和当前行的行号  
V        调用vi编辑器  
!命令    调用Shell,并执行命令  
q        退出more  

实例:

//显示文件中从第3行起的内容  
more +3 text.txt  

//在所列出文件目录详细信息,借助管道使每次显示 5 行  
ls -l | more -5  

less命令。less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。

//参数  
-i  忽略搜索时的大小写  
-N  显示每行的行号  
-o  <文件名> 将less 输出的内容在指定文件中保存起来  
-s  显示连续空行为一行  
/字符串:向下搜索“字符串”的功能  
?字符串:向上搜索“字符串”的功能  
n:重复前一个搜索(与 / 或 ? 有关)  
N:反向重复前一个搜索(与 / 或 ? 有关)  
-x <数字> 将“tab”键显示为规定的数字空格  

//常用操作  
b  向后翻一页  
d  向后翻半页  
h  显示帮助界面  
Q  退出less 命令  
u  向前滚动半页  
y  向前滚动一行  
空格键 滚动一行  
回车键 滚动一页  
[pagedown]: 向下翻动一页  
[pageup]:   向上翻动一页  

实例:

//ps 查看进程信息并通过 less 分页显示  
ps -aux | less -N  

//查看多个文件,可以使用 n 查看下一个,使用 p 查看前一个。  
less 1.log 2.log  

touch命令,Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。

实例:

使用指令"touch"修改文件"douya.c"的时间属性为当前系统时间,输入如下命令:

$ touch douya.c  #修改文件的时间属性

首先,使用ls命令查看douya.c文件的属性,如下所示:

$ ls -l douya.c
-rw-rw-r-- 1 douya douya 86 Dec 10 19:30 douya.c

可以看到原来的修改时间为:

Dec 10 19:30

然后我们执行touch命令后再来查看:

$ touch douya.c  #修改文件的时间属性
$ ls -l douya.c
-rw-rw-r-- 1 douya douya 86 Dec 10 22:23 douya.c

可以看到,修改时间已经改变。

使用指令"touch"时,如果指定的文件不存在,则将创建一个新的空白文件。

$ touch douya.c        // 创建一个douya.c文件

grep 命令。强大的文本搜索命令,grep(Global Regular Expression Print) 全局正则表达式搜索。grep 的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

//参数  
-A n --after-context显示匹配字符后n行  
-B n --before-context显示匹配字符前n行  
-C n --context 显示匹配字符前后n行  
-c --count 计算符合样式的列数  
-i 忽略大小写  
-l 只列出文件内容符合指定的样式的文件名称  
-f 从文件中读取关键词  
-n 显示匹配内容的所在文件中行数  
-R 递归查找文件夹  

//grep 的规则表达式:  
^  #锚定行的开始 如:'^grep'匹配所有以grep开头的行。   
$  #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。   
.  #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。    
*  #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。  
.*   #一起用代表任意字符。    
[]   #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。   
[^]  #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。    
\(..\)  #标记匹配字符,如'\(love\)',love被标记为1。     
\<      #锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。  
\>      #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。  
x\{m\}  #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。   
x\{m,\}  #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。    
x\{m,n\}  #重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。    
\w    #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。    
\W    #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。    
\b    #单词锁定符,如: '\bgrep\b'只匹配grep。  

实例:

//查找指定进程  
ps -ef | grep svn  

//查找指定进程个数  
ps -ef | grep svn -c  

//从文件中读取关键词  
cat test1.txt | grep -f key.log  

//显示包含 ed 或者 at 字符的内容行  
grep -E 'ed|at' test.txt  

ps命令。ps(process status),用来查看当前运行的进程状态,一次性查看,如果需要动态连续结果使用 top

//进程的状态  
1. 运行(正在运行或在运行队列中等待)  
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)  
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)  
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)  
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)  

//ps 工具标识进程的5种状态码:  
D 不可中断 uninterruptible sleep (usually IO)  
R 运行 runnable (on run queue)  
S 中断 sleeping  
T 停止 traced or stopped  
Z 僵死 a defunct (”zombie”) process  

//命令参数:  
-A 显示所有进程  
a 显示所有进程  
-a 显示同一终端下所有进程  
c 显示进程真实名称  
e 显示环境变量  
f 显示进程间的关系  
r 显示当前终端运行的进程  
-aux 显示所有包含其它使用的进程 

实例:

//显示当前所有进程环境变量及进程间关系  
ps -ef  

//显示当前所有进程  
ps -A  

//与grep联用查找某进程  
ps -aux | grep apache  

//找出与 cron 与 syslog 这两个服务有关的 PID 号码  
ps aux | grep '(cron|syslog)'  

top命令。显示当前系统正在执行的进程的相关信息,包括进程 ID、内存占用率、CPU 占用率等

//参数  
-c 显示完整的进程命令  
-s 保密模式  
-p <进程号> 指定进程显示  
-n <次数>循环显示次数  
img

前五行是当前系统情况整体的统计信息区。

  1. 第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:

    00:12:54 — 当前系统时间

    up ?days, 4:49 — 系统已经运行了?天4小时49分钟(在这期间系统没有重启过)

    21users — 当前有1个用户登录系统

    load average: 0.06, 0.02, 0.00 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

  2. 第二行,Tasks — 任务(进程),具体信息说明如下:

    系统现在共有256个进程,其中处于运行中的有1个,177个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

  3. 第三行,cpu状态信息,具体属性说明如下:

    0.2%us — 用户空间占用CPU的百分比。

    0.2% sy — 内核空间占用CPU的百分比。

    0.0% ni — 改变过优先级的进程占用CPU的百分比

    99.5% id — 空闲CPU百分比

    0.0% wa — IO等待占用CPU的百分比

    0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比

    0.0% si — 软中断(Software Interrupts)占用CPU的百分比

  4. 第四行,内存状态,具体信息如下:

    2017552 total — 物理内存总量

    720188 used — 使用中的内存总量

    197916 free — 空闲内存总量

    1099448 cached — 缓存的总量

  5. 第五行,swap交换分区信息,具体信息说明如下:

    998396 total — 交换区总量

    989936 free — 空闲交换区总量

    8460 used — 使用的交换区总量

    1044136 cached — 缓冲的交换区总量


kill 命令。发送指定的信号到相应进程。不指定信号将发送SIGTERM(15)终止指定进程。也就是 kill -15 ,被称为优雅的退出。当使用kill -15时,系统会发送一个SIGTERM的信号给对应的程序。当程序接收到该信号后,具体要如何处理是自己可以决定的。

这时候,应用程序可以选择:

1、立即停止程序

2、释放响应资源后停止程序

3、忽略该信号,继续执行程序

因为kill -15信号只是通知对应的进程要进行"安全、干净的退出",程序接到信号之后,退出前一般会进行一些"准备工作",如资源释放、临时文件清理等等,如果准备工作做完了,再进行程序的终止。但是,如果在"准备工作"进行过程中,遇到阻塞或者其他问题导致无法成功,那么应用程序可以选择忽略该终止信号。

如果任无法终止该程序可用"-KILL" 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,和kill -15相比,kill -9就相对强硬一点,系统会发出SIGKILL信号,他要求接收到该信号的程序应该立即结束运行,不能被阻塞或者忽略。

所以,相比于kill -15命令,kill -9在执行时,应用程序是没有时间进行"准备工作"的,所以这通常会带来一些副作用,数据丢失或者终端无法恢复到正常状态等。

使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。

//参数  
-l  信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称  
-a  当处理当前进程时,不限制命令名和进程号的对应关系  
-p  指定kill 命令只打印相关进程的进程号,而不发送任何信号  
-s  指定发送信号  
-u  指定用户  

实例:

//先使用ps查找进程pro1,然后用kill杀掉  
kill -9 $(ps -ef | grep pro1)  

//杀死进程12345  
kill 12345  

//强制杀死进程  
kill -KILL 123456  

//彻底杀死进程  
kill -9 123456  

而常见信号如下:

信号代号 信号名称 说 明
1 SIGHUP 该信号让进程立即关闭.然后重新读取配置文件之后重启
2 SIGINT 程序中止信号,用于中止前台进程。相当于输出 Ctrl+C 快捷键
8 SIGFPE 在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误
9 SIGKILL 用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。般用于强制中止进程
14 SIGALRM 时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号
15 SIGTERM 正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这 个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9
17 SIGCHLD 子进程结束时, 父进程会收到这个信号。
18 SIGCONT 该信号可以让暂停的进程恢复执行。本信号不能被阻断
19 SIGSTOP 该信号可以暂停前台进程,相当于输入 Ctrl+Z 快捷键。本信号不能被阻断

其中最重要的就是 "1"、"9"、"15"、"17"这几个信号。


全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

热门推荐