1.正则表达式和数据操作

a.grep命令:在文件中查找关键字,并显示关键字所在的行。

基本用法:grep text file text代表要搜索的文本,file代表供搜索的文件。

centos get请求命令_重定向


-i参数:默认的情况下,grep命令时严格区分大小写的,比如我搜索的文本是text,那么就不会搜出Text,tExt,TEXT等等文本。此时给grep加上-i参数,使得grep可以忽略大小写。

-n参数:显示搜索到的文本所在的行号。
-v参数:只显示搜索的文本不在的那些行(与不加-v参数搜索结果正好相反)。
-r参数:grep -r “Hello World” folder/ 这句命令的意思就是在folder目录的所有子目录和子文件中查找Hello World这个文本。

grep的高级用法:配合正则表达式

正则表达式使用单个字符串来描述,匹配一些列符合某个句法规则的字符串。

centos get请求命令_linux_02


-E参数:使用正则表达式

例如:grep -E [Pp]ath /etc/profile,[]的作用,是将[]中的字符任取其一,既可以是Path,又可以是path。

grep -E [a-zA-Z] /etc/profile 就是包含在a至z之间的任意字母或者A-Z之间的任意字母的行。

centos get请求命令_后台进程_03

b.sort命令:为文件排序,后接文件名
仅使用sort排序是不会改变文件内容的,仅仅会把排序后的结果显示到终端上。
-o参数:将排序结果输出到文件中。
例如sort -o name_sorted.txt name.txt 就是把在name.txt中排序的结果输出到name_sorted.txt中,而name.txt中的文件依旧不变。

-r参数:倒序排列
-R参数:随机排序,每次排序的结果可能都不一样
-n参数:默认的,仅用sort命令的时候,是不区分字符是否是数字的,会把这些数字看成字符串,按照1-9的顺序来排列。例如138会排在25的前面,因为1排在2的前面。加上-n参数后,138就会排在25的后面。

c.wc命令:可以统计单词数目,行数,字符数,字节数等,后接文件名。
wc命令显示的三个数字:行数,单词数,字节数(\n也被看成一个字符)

-l参数:只统计行数,不显示单词数和字节数
-w参数:只统计单词(用空格隔开的字符串)数目
-c参数:只统计字节数
-m参数:统计字符数

d.uniq命令:删除文件中的重复内容,后接文件名
但是uniq命令有点呆,只能将连续的重复行变为一行
和sort命令一样,uniq只是将改变后的文件内容显示出来,而不改变原文件的内容。uniq repeat.txt unique.txt表示将repeat文件输出结果存储到unique.txt中。

-c参数:统计重复的行数
-d参数:只显示重复行的值

e.cut命令:剪切文件的一部分内容,用于对文件的每一行进行剪切处理。
-c参数:根据字符数来剪切。例如cut -c 2-4 name.txt 就是将文件中每一行的第2-4个字符剪切出来并且显示在屏幕上。

2.重定向:把本来要显示在终端的命令结果,输送到文件中或者作为其他命令的输入(命令管道)。
管道:把两个命令连起来使用,一个命令的输出作为另一个命令的输入,这就构成了管道。
如何实现重定向:通过在命令间插入特定的符号。

>和>>:重定向到文件

最简单的操作就是把命令的输出结果重定向到文件中,就不会在终端显示命令运行结果了。

cut命令进阶:根据分隔符来剪切。

CSV格式:逗号分隔值文件格式。

首先创建一个csv文件:nano notes.csv

centos get请求命令_centos get请求命令_04


cut的-d参数:用于指定用什么分隔符(比如逗号,分号,双引号等等)。

-f参数:表示剪切下用分隔符分割的哪一块或哪几块区域

centos get请求命令_linux_05


如果-f参数后是1,3,就是剪切第一和第三部分。如果是2-,就是从第二个部分一直剪切到最后。

虽然我们剪切了一些东西,但是原始文件仍然是不变的。>可以将命令的输出结果重定向到你选择的文件中。例如cut -d ,-f 1 notes.csv > students.txt。

centos get请求命令_centos_06


此时用ls命令看一下,就会发现多了个students.txt文件。

使用>符号时,如果此文件不存在,则新建一个文件,如果此文件已经存在,那就会把文件内容覆盖掉。

黑洞文件:/dev/null 这是一个特殊文件,不是一个目录。此文件具有唯一的属性:总是空的。它能使发送到/dev/null的任何数据作废。

如果是>>:作用与>是类似的,不过不会像>那么危险,而是将重定向的内容写入到文件末尾,起到追加的作用,如果文件不存在,也会被创建。

3.2>,2>>,2>&1重定向错误输出
从键盘向终端输入数据,这是标准输入,也就是stdin。终端接收键盘输入的命令,会产生两种输出。第一种是标准输出:stdout指终端输出的信息(不包括错误信息),第二种是标准错误输出:stderr,指终端输出的错误信息。

例如:cat file.csv > results.txt 2> errors.log就是假如文件存在,将文件内容写入到results.txt中,假如文件不存在,则将错误信息写入到errors.log文件中。

类似的,2>>符号用于将标准错误输出重定向到文件末尾。

如果要想将标准输出和标准错误输出都重定向到同一个地方,就需要用到2>&1组合符号。例如:cat file.csv > results.txt 2>&1。如果想将他们都重定向到文件末尾:cat file.csv >> results.txt 2>&1。

4.<,<<:从文件或键盘读取。
不是所有的命令都有输入,也不是所有的命令都有输出,其实可以使命令的输入来自文件或者键盘输入。
输入重定向符号<用于指定命令的输入。例如cat notes.csv,cat命令接受的输入时notes.csv这个文件名,那么它要先打开notes.csv文件,然后打印出文件内容。如果是cat < notes.csv,则cat命令接受的输入直接是notes.csv这个文件的内容,cat命令只负责将其内容打印,而打开文件并将文件内容传递给cat命令的工作则交给终端完成。

<<符号的作用是将键盘的输入重定向为某个命令的输入。

centos get请求命令_centos_07


输入输出命令也可以结合使用:

centos get请求命令_后台进程_08


5.|:管道符号,作用就是建立命令管道。

将两个命令连成管道:简单的说就是将一个命令的输出作为另一个命令的输入。

例如:按学生名字排序:

centos get请求命令_后台进程_09


centos get请求命令_centos get请求命令_10


根据大小排序目录:

centos get请求命令_后台进程_11


列出包含关键字的文件:

centos get请求命令_后台进程_12


sudo grep log -Ir /var/log:遍历/var/log这个目录及其子目录,列出所有包含log这个关键字的行,-I参数用于排除二进制文件,-r参数用于递归遍历。

cut -d :-f 1,从上面命令的输出结果中,只剪切除文件名那一列(由冒号分隔的第一个区域)。

uniq:去掉重复的文件名。6.进程和系统监测

a.w命令:可以帮助我们快速了解系统中目前有哪些用户登陆着,以及他们在干什么。

centos get请求命令_centos get请求命令_13


up后面的数值是系统运行时间(重启系统后时间会置零)。

load average是负载:三个数值分别是1分钟之内的平均负载,5分钟之内的平均负载,15分钟之内的平均负载。

TTY:登陆的终端名称。

:0意思是指本地,就是目前我们所在的这个图形终端。

pts表示伪终端从属。

FROM:用户连接到的服务器的IP地址(或者主机名)

LOGIN@:用户连接系统时间

IDLE:用户有多久没活跃了(没运行任何命令)

JCPU:该终端所有相关的进程使用的CPU时间,每当进程结束就停止计时,开始新的进程则会重新计时。

PCPU:表示CPU执行当前程序所消耗的时间(当前进程就是在WHAT列里显示的程序)。

WHAT:当前用户正运行的程序。7.ps命令:列出运行的进程

简单来说,进程就是加载到内存中运行的程序,大多数程序运行时都只在内存中启动一个进程。

ps命令:用于显示当前系统中的进程,ps命令显示的进程列表不会随时间而更新,是静态的,只是运行ps命令当时的那个状态。

不加任何参数直接运行ps命令:

centos get请求命令_centos get请求命令_14


PID:进程号,每个进程都有唯一的进程号。

TTY:进程运行所在的终端。

TIME:进程运行了多久。

CMD:产生这个进程的程序名。如果在进程列表中看到有好几行都是同样的程序名,那么就是同样的程序产生了不止一个进程。ps -ef:-ef参数可以使ps命令列出所有用户在所有终端的所有进程。

centos get请求命令_后台进程_15


UID:表示用户名,也就是运行进程的用户

PPID:是程序的父进程号

ps -u xxx:用实际用户替换xxx,列出此用户运行的进程
ps -aux:通过cpu和内存使用来过滤进程
例如,根据CPU使用率降序排列:ps -aux --sort -pcpu | less
根据内存使用率来降序排列:ps -aux --sort -pmem | less
综合来看并显示前十行:ps -aux --sort -pcpu,pmem | head

8.操作进程和重启关闭系统
top命令:进程的动态列表,这些进程是按照使用处理器的比率来排序的。
q:退出top
h:显示帮助文档
B:加粗某些信息
f/F:在进程列表中添加或者删除某些列
u:按照用户显示
k:结束某个进程
s:改变页面刷新时间,默认3s一次

Ctrl + C和kill命令:停止进程
有时候,系统会突卡住。
题外话:在终端中拷贝和粘贴,需要用Ctrl + Shift + C和Ctrl + Shift +V来执行。
Ctrl + C这个组合键只能作用域当前终端中正在运行的程序,而Linux中很多进程你是看不到的,在后台运行,这时就要用到kill命令,后接需要结束的进程号,也就是PID。也可以同时用kill来结束好几个进程,只要用空格隔开它们的PID。如果kill不起作用,可以kill -9 PID来强制结束进程。
killall命令用于结束全部要结束的进程,不同于kill命令,killall后接程序名,而不是PID。

halt:需要root身份才能关闭系统:sudo halt
reboot:需要root身份重启系统:sudo reboot

9.管理前后台进程

可以在同一个终端中同时运行好几个命令,需要用到后台进程的概念。

默认情况下,用户创建的进程都是前台进程,前台进程从键盘读取数据,并把处理结果输出到显示器。而后台进程的优点是不必等待程序运行结果,就可以输入其他命令。

&符号:在要运行的命令最后加上&这个符号

centos get请求命令_centos_16


1表示是第一个在后台运行的程序,10158是PID。

第二行表示已经完成。

注意:如果是需要root身份才能运行的命令,那么需要先sudo su输入root密码,之后才能进行&操作。

例如sudo find / -name “*log” &,运行时候虽然我们可以输入其他命令,但是终端会一直显示查找的结果,会很烦。这时候就需要用到前面学到的重定向知识:sudo find / -name “*log” > output_find &,这样就不会一直输出,但是还是会有标准错误输出,所以我们可以sudo find / -name “*log” > output_find 2>&1 &,这样就不会有任何输出了。

上述操作虽然进程在后台运行,但是还是和终端相关联,如果我们关闭终端,进程也会随之结束。这时候我们就需要用到:
nohup命令:使进程与终端分离。当用户注销或网络断开时,终端会受到HUP信号从而关闭其所有子进程,终端被关闭时也会关闭其子进程,可以用nohup命令使命令不受HUP信号影响。用法就是nohup后接要运行的命令,例如nohup cp file.txt file_copy.txt。


假如输入top,再输入Ctrl + Z,此时top命令被放入后台,子进程仍然在内存中但是被暂停运行了。这个命令的作用就是转到后台,并暂停运行。
bg命令:作用是将命令转入后台运行,假如命令已经在后台,并且暂停着,那么bg命令会将其状态改为运行。如果不加任何参数,bg命令会默认作用于最近的一个后台进程。如果后面加%1,%2这样的参数,则是作用于指定标号的进程(进程转入后台后,会显示它在当前终端下的后台进程编号)。bg %2就是作用于编号为2的后台进程。

11.5种常见的进程状态
a.运行,状态码是R
b.中断(休眠中,受阻),当某个条件形成后或者接受到信号时,则脱离该状态。状态码是S。
c.不可中断(进程不响应系统异步信号,即使用kill命令也不能使其中断),对应的状态码是D。
d.僵死(进程已终止,但进程描述符依然存在),对应的状态码是Z。
e.停止(收到停止信号后停止运行),对应的状态码是T。

jobs命令:显示当前终端里的后台进程状态。

fg命令:使进程转为前台运行,用法和bg类似。

centos get请求命令_重定向_17

13.任务的定时和延期
at命令:延时执行一个程序,at命令只能让程序执行一次。
在指定时刻执行顺序:先用at命令后接想要程序执行的确定时刻,再输入你想要在以上指定时刻执行的命令,例如at 22:10。用Ctrl + D组合键,at会显示,就会结束输入并退出at命令。如果想在明天的22:10执行,则at 22:10 tomorrow。如果在2019年12月10日的22点10分执行,则:at 22:10 12/10/19。

在指定间隔后执行程序:例如在10分钟后执行指定程序:at now +10 minutes。
at命令的一些关键字:minutes表示分钟,hours表示小时,days表示天,weeks表示星期,months表示月,years表示年。
例如at now +7 weeks表示在距今七个星期后执行。

atq和atrm命令:列出和删除正在等待执行的at任务
atq命令:列出正等待执行的at命令
atrm命令:删除正在等待执行的at任务,后接at任务的编号

sleep命令:休息一会
例如touch file.txt; sleep 10; rm file.txt表示创建文件,暂停10s,删除文件。默认的,sleep后数值表示秒,也可以自行改变,例如15m代表15分钟,还有15h,15d。
需要注意的是,用分号隔开的命令实际就是两个命令,前面命令执行成功与否并不影响后面的命令。

&&和||符号:和分号一样,用于分隔两个命令,使得命令依次执行。区别在于&&号前的命令执行成功,才会执行后面的命令,||号前的命令执行失败,才会执行后面的命令。

crontab命令:定时执行程序,at命令只能执行某个或某几个命令一次,crontab却可以重复执行命令。

三个主要参数:

a.-l:显示crontab文件

b.-e:修改crontab文件

编辑的格式:m h dom mon dow command

m:分钟

h:小时

dom:表示一个月的哪一天

mon:月份

dow:表示星期几

command:表示需要定时执行的命令

例如如果我希望每天的22点10分都在家目录下创建file.txt文件,可以在crontab文件里写入:10 22 * * * touch ~/file.txt

路径最好用绝对路径,因为不能确定cron命令执行这些语句的时候是在哪个目录

centos get请求命令_重定向_18

c.-r:删除crontab文件
14.文件的压缩和解压
tar命令:将多个文件归档
打包:是将多个文件变为一个总的文件,这个总的文件我们一般称为archive。
压缩:是将一个大文件通过某些压缩算法变成一个小文件。
首先用tar将多个文件归档为一个总的文件,然后用gzip或者bzip2命令将archive压缩为更小的文件。

创建一个tar归档:tar -cvf sorting.tar sorting/ 就是把sorting目录归档为sorting.tar
也可以直接对文件进行归档操作,不需要先把所有文件放到一个目录里:tar -cvf archive.tar file1.txt file2.txt file3.txt 就会把这三个文件归档为archive.tar

-tf参数:显示归档里的内容,并不解开归档 tart -tf sorting.tar
-rvf参数:追加文件到归档
tar -rvf archive.tar file_extra.txt 就是将 file_extra.txt这个文件添加到archive.tar归档中。
-xvf参数:是-cvf的相反操作,将生成的归档解开。

gzip命令:压缩归档,可以gzip sorting.tar
gunzip命令:解压 gunzip sorting.tar.gz

可以用tar命令同时完成归档和压缩的操作,就是给tar命令多加一个选项参数,使之完成归档操作后,还是调用gzip或bzip2命令来完成压缩操作。使用-zcvf参数:归档,tar -zvcf sorting.tar.gz sorting。可以使用tar -zxvf sorting.tar.gz来解压。

zcat,zmore,zless命令:显示用gzip命令去压缩的文件内容

如果是windows用户发送的压缩文件,一般是以.zip或者.rar结尾的
zip/unzip:压缩/解压zip文件

15.编译安装软件
大致步骤:下载源代码(通常被打包压缩为.tar.gz的格式)-解压压缩包(tar zxvf xxx.tar.gz)-运行解压之后文件夹里的configure文件:./configure-运行make编译-运行sudo make install完成安装。

当我们要找的软件不在CentOS的软件仓库中时,可以试试去软件的官网找后缀是.rpm的安装包。
alien软件:实现deb安装包和rpm安装包的互相转换。
将deb转换为rpm:sudo alien -r xxx.deb
安装rpm安装包:sudo rpm -i xxx.rpm
注意:用alien转换成成的rpm包并不能保证百分百顺利安装,所以能找到rpm安装包的话,最好直接用rpm。

如果软件既不在软件仓库,网上又找不到rpm安装包,只能编译安装了。
简单来说,编译就是将程序的源代码转换成可执行文件的过程。大多数linux程序都是开放源码的,可以编译成适合我们电脑和操作系统属性的可执行文件。README文件一般会说明详细的安装步骤。

补充:linux中一个点代表当前目录!!