Linux常用命令知识笔记
0。mtimefindpathmtime1execrmf{};查找过去一天的内容进行删除
1。more或者less如何显示颜色
greptext。textcoloralwayslessR
2。man命令使用
查找命令的使用手册
mangrep
查找相关的命令
mankgrep
3。链接文件
符号链接
lnssrcdesc得到的两个文件是完全不一样的,内容并不相同,可以通过文件的inode编号区别。
硬链接
lnsrcdesc得到的两个文件是完全一样的,当修改其中一个文件时,另一个文件也会被修改;同时需要注意的是链接计数显示这两个文件都有2个链接。
4。查看文件或者目录的inode
文件或目录的inode编号是一个用于标识的唯一数字,这个数字由内核分配给文件系统中的每一个对象。
lsia。txt
5。文件相关
5。1查看文件类型
file1。txt
5。2对搜索到的文件执行命令
findexecfindtypefname。log。execrmf{};对。log。类型的文件进行删除{}符号代表找到的文件,并用对分号(;)进行转义以作为命令的结束
5。3将搜索结果打印文件
findfprintfindtypefname。log。fprinta。txt将结果输出到文件
6。进程管理
查看系统上运行的所有进程
psefoutC:cpu利用率STIME:进程启动时的系统时间TIME:运行进程需要的累计CPU时间CMD:启动程序的名称UIDPIDPPIDCSTIMETTYTIMECMDroot1002019?02:18:39usrlibsystemdsystemdsystemdeserialize18root2002019?00:00:10〔kthreadd〕
长格式输出
psefloutF:内核分配给进程的系统标记S:进程的状态(O:正在运行;S:休眠;R:可运行,正等待运行;Z:僵化,进程已结束,但父进程不存在;T:停止)PRI:进程的优先级,数字越大,优先级越低。FSUIDPIDPPIDCPRINIADDRSZWCHANSTIMETTYTIMECMD1Sroot2008000kthrea2019?00:00:10〔kthreadd〕1Sroot3208000smpboo2019?00:33:11〔ksoftirqd0〕
实时显示进程信息
topout第一行显示了当前时间、系统的运行时间、登录的用户数以及系统的平均负载loadaverage(近1min,5min,15min)。top18:00:53up609days,6:35,5users,loadaverage:0。11,0。42,0。32Tasks:338total,1running,337sleeping,0stopped,0zombie进程概要Cpu(s):1。9us,1。0sy,0。0ni,97。0id,0。1wa,0。0hi,0。0si,0。0stCPU概要KiBMem:8008856total,275988free,6336084used,1396784buffcache系统内存状态KiBSwap:0total,0free,0used。1165124availMem按照CPU值对进程排序,q键退出topPIDUSERPRNIVIRTRESSHRSCPUMEMTIMECOMMAND22710root200114656626162152S3。70。83493:31hidsagent8049root21821180768519257200S1。71。18566:37servicemeshma
进程信号
在Linux中,进程之间通过信号来通信。进程的信号就是预定义好的一个消息,进程能识别它并决定忽略还是作出反应。
查看Linux进程信号
killlout1)SIGHUP2)SIGINT3)SIGQUIT4)SIGILL5)SIGTRAP2)SIGABRT7)SIGBUS8)SIGFPE9)SIGKILL10)SIGUSR11)SIGSEGV12)SIGUSR213)SIGPIPE14)SIGALRM15)SIGTERM2)SIGSTKFLT17)SIGCHLD18)SIGCONT19)SIGSTOP20)SIGTSTP3)SIGTTIN22)SIGTTOU23)SIGURG24)SIGXCPU25)SIGXFSZ4)SIGVTALRM27)SIGPROF28)SIGWINCH29)SIGIO30)SIGPWR5)SIGSYS34)SIGRTMIN35)SIGRTMIN136)SIGRTMIN237)SIGRTMIN36)SIGRTMIN439)SIGRTMIN540)SIGRTMIN641)SIGRTMIN742)SIGRTMIN87)SIGRTMIN944)SIGRTMIN1045)SIGRTMIN1146)SIGRTMIN1247)SIGRTMIN138)SIGRTMIN1449)SIGRTMIN1550)SIGRTMAX1451)SIGRTMAX1352)SIGRTMAX129)SIGRTMAX1154)SIGRTMAX1055)SIGRTMAX956)SIGRTMAX857)SIGRTMAX710)SIGRTMAX659)SIGRTMAX560)SIGRTMAX461)SIGRTMAX362)SIGRTMAX211)SIGRTMAX164)SIGRTMAX
发送进程信号
kill进程pid默认发送TERM信号,告诉进程尽可能停止运行killssignalpidkillsKILL19331强制进程根据信号做出反应killsignalpidkil919331killallhttp结束所有以http开头的进程
7。磁盘管理
查看磁盘的使用情况
dfhoutFilesystemSizeUsedAvailUseMountedondevvda150G9。6G38G21devtmpfs3。9G03。9G0dev
查看系统挂载设备列表
mountoutsysfsonsystypesysfs(rw,relatime)proconproctypeproc(rw,relatime)
查看某一特定目录的磁盘使用情况
duhmaxdepth1c:显示所有已列出文件总的大小s:显示每个输出参数的总计h:按用户易读的格式输出大小maxdepth:指定统计的目录深度
8。后台命令
查看当前运行在后台模式的进程
jobslfgn将后台进程调回前台执行或者前台模式重启停止的任务bgn将前台程序调到后台执行或者后台模式重启停止的任务
将程序后台执行
pythona。py表示后台执行
查找命令位置
whichmysqltypemysqlwhereishosts查找文件位置
9。环境变量
全局环境变量
env或printenv查看所有全局环境变量printenvHOME查看个别环境变量的值
局部环境变量
set显示为某个特定进程设置的所有环境变量,包括局部变量、全局变量、用户自定义变量
设置全局环境变量
GO111MODULEonexportGO111MODULE修改子shell中全局环境变量并不会影响到父shell中该变量的值;子shell甚至使用export命令也无法改变父shell中全局环境变量的值。
删除环境变量
unsetGO111MODULE如果在子进程中删除了一个全局环境变量,这只对子进程有效。该全局环境变量在父进程中依然可用。
如果要用到变量,使用。如果要操作变量,不使用。这条规则的一个例外就是使用printenv显示某个变量的值。
环境变量持久化
在命令行定义的环境变量并不是持久的,会随着shell的退出而失效。可以把个人自定义环境变量放在用户目录下的。bashprofile文件中。执行source。bashprofile使其生效。
10。使用变量
shell脚本中最有用的特性就是从命令输出中提取信息,并赋值给变量。有两种方法可以将命令输出赋给变量,然后就可以在脚本中随意使用了。
1。date2。()(date)
!binzshadateY。m。dbdateAecho今天是a号星期becho(dirname0)
11。重定向输入输出
输出重定向,输入重定向,输出数据追加,内联输入重定向
按照既有格式输出cat数据catEOF你和ad123EOF必须指定一个文本标记来划分输入数据的开始和结尾。任何字符串都可作为文本标记,但在数据的开始和结尾文本标记必须一致。
12。数学运算
1。expr152。a〔15〕;echoa3。decimal(echoscale2;31。8bc);echodecimal浮点运算,使用bc计算器,scale表示保留到小数点位
13。特殊参数变量
变量
含义
命令行参数的个数
{!}
命令行参数的最后一个值
保存所有命令行参数(作为整体)
保存所有命令行参数(作为每一个个体)
?
函数的退出状态码,成功执行的命令状态码为0,未成功的为一个正数值
本地变量:用户私有变量,只有本用户可以使用,保存在家目录下的。bashprofile、。bashrc文件中
全局变量:所有用户都可以使用,保存在etcprofile、etcbashrc文件中
用户自定义变量:用户自定义,比如脚本中的变量
14。结构化命令
ifthen语句
ifcommand如果command退出状态码为0,则执行then下的命令,否则不执行then下的命令thencommandsfiifcommand;thencommandsfi高级特性1。用于数学表达式的双括号((expersion))if〔1eq2〕;thenechoTrueelseif((151));thenecho1510fiechoFalsefi2。用于高级字符串处理的双方括号〔〔expersion〕〕
ifthenelse语句
ifcommandthencommandselsecommandsfiifcommandthencommandselifcommandthencommandsfi
test测试命令
iftestconditionthencommandsfiif〔condition〕注意方括号的空格。复合测试条件〔condition1〕〔condition2〕thencommandsfi
case命令
readnumcasenumin1)echo你输入了1exit?;;命令结束标记2)echo你输入了2;;34)echo你输入了3或者4;;)echo请重新输入;;esac
for命令
rray(123456)forvarin{array〔〕};doechovardonec语言风格的for命令for((a0;a10;a));doechoadone(cd(dirname0);pwd)04。txt输出到文件,不打印到控制台
while命令
a1while((a4));doechoaaa1报错letaa〔a1〕doneuntil命令和while命令的工作方式完全相反,until指定当测试命令的退出状态码不为0,才会执行循环中列出的命令,当退出状态码为0,就结束循环。
控制循环
break跳出内部一层循环breaknn指定了要跳出的循环层级continue提前终止某次循环
15。处理用户输入
获取不包含路径的脚本名
name(basename0);echoname
移动变量
shift在使用shift命令时,默认情况下它会将每个参数变量向左移动一个位置。所以,变量3的值会移到2中,变量2的值会移到1中,而变量1的值则会被删除(注意,变量0的值,也就是程序名,不会改变)。shiftn给shift命令提供一个参数,指明要移动的位置数就行了。
06。shcount1while〔ne0〕;doechoparamtercount1count〔count1〕shiftdoneoutsh06。sh1234paramter11paramter22paramter33paramter44
获取用户输入
readname从键盘或文件描述符读取数据,放进变量name
echon请输入数据:n不换行readnameechohelloname通过read指定提示符readp请输入数据:nameechohelloreadname接收多个变量readp请输入数据:nameageechohelloreadname,age不指定接收值,read接收的数据放在特殊变量REPLY中readp请输入数据:echohelloreadREPLY
16。文件描述符
文件描述符
缩写
描述
0hrSTDIN
标准输入
1hrSTDOUT
标准输出
2hrSTDERR
标准错误
只重定向错误
lsalbadfile2test4将该文件描述符值放在重定向符号前。该值必须紧紧地放在重定向符号前,否则不会工作
重定向错误和数据
lsaltesttest2test3badtest2test61test7如果想重定向错误和正常输出,必须用两个重定向符号,分别输出到不同的文件lsaltesttest2test3badtesttest7将STDERR和STDOUT的输出重定向到同一个输出文件
17。控制脚本
后台模式运行脚本
。test1。sh如果终端退出,后台进程也会随之推出
非控制台下运行脚本
nohup。test1。shnohup命令运行了另外一个命令来阻断所有发送给该进程的SIGHUP信号。这会在退出终端会话时阻止进程退出
18。函数
局部变量与全局变量
默认情况下,在脚本中定义的任何变量都是全局变量functionfunc1(){变量在函数内部被赋给了新值,那么在脚本中引用该变量时,新值依然有效temp〔value5〕localtemp〔value5〕局部变量保证了变量只局限于函数中,只在函数内部有效result〔temp2〕}temp4value6func1echoTheresultisresultif〔tempgtvalue〕;thenechotempislargerelseechotempissmallerfi
脚本作为库使用
使用。号来引用01。sh文件,注意点号(。)和文件名中间有一空格。source的别名,点操作符。。01。sh使用source来引用文件source。01。shfunctionfunc1(){echo第一个shell函数}func1
19。sed流编辑器
命令行使用编辑器命令
echothisisatestsedstestbigtestgthisisabigtest
sed编辑器并不会修改文本文件的数据,它只会将修改后的数据发送到STDOUT,原始数据并不会被修改。
命令基本格式:sedoptionsscriptfile
命令行使用多个编辑器命令
sedesbrowngreen;sdogcatdata1。txt将brown替换为green,dog替换为cat。命令之间用分号隔开,且命令末尾和分号之间不能有空格
从文件中读取编辑器命令
script。sedsbrowngreensfoxelephantsdogcatsedfscript。seddata1。txt
20。awk程序
akw和gawk是一样的,在Linux中awk链接指向gawk,awk程序让流编辑器上了一个新台阶,它提供了一种编程语言而不是编辑器命令。awk的强大之处在于脚本,可以写脚本来读取文本行的数据,然后处理并显示数据,创建任何类型的输出报告。
默认情况下,awk会从输入中读取一行文本,然后针对该行的数据执行程序脚本。
命令的基本格式:awkoptionsprogramfile
从命令行读取脚本
awk{print123}awk脚本用{}来定义,若脚本是单个文本字符串,需要加单引号
使用数据字段变量
data2。txtOnelineoftesttext。Twolinesoftesttext。Threelinesoftesttext。0代表整个文本行,1代表文本行的第一个数据字段,以此类推。默认字段分隔符为空格awk{print1}data2。txtOneTwoThree
指定字段分隔符
awkF:{print1}etcpasswd:作为分隔符
在程序脚本中使用多个命令
echoMynameisRichawk{4Christine;print0}命令之间使用分号分割outMynameisChristine
从文件中读取awk程序
script。awk{print1shomedirectoryis6}useawkF:fscript。awketcpasswd
关键字BEGIN和END
1。数据处理前执行脚本awkBEGIN{printHelloWorld!}在显示了文本后,它会快速退出,不等待任何数据2。在执行了BEGIN脚本后,第二段脚本用来处理数据awkBEGIN{printHelloWorld!}{print123}3。数据处理后运行脚本(分别定义了三个脚本)awkBEGIN{printHelloWorld!}{print123}END{printend}
21。xargs命令
xargs命令的作用是将标准输入或者管道数据转为命令行参数。它能够捕获一个命令的输出,然后传递给另外一个命令。
管道传参
echoonetwothreexargsmkdir等价于mkdironetwothreexargs将换行符和空格作为分隔符echoeabcxargsdechoabcxargs将换行符和空格作为分隔符,d参数可以更改分隔符
单独使用
xargs等价于xargsecho
grep命令筛选数据,并去重
uniq检查重复出现的列,sort进行排序grepTracerpcserver59。logawkFinput{print2}awk{print1}sortuniqcsortn
22。Vim技巧
批量注释和取消注释
多行注释:起始行号,结束行号s注释符g:121,129sg取消注释:起始行号,结束行号s注释符g
光标快速移动到最后一行
G
光标移动n行
nG
光标移动到第一行
gg
删除光标所在行
ddndd删除向下n行
复原前一个动作
u
参考
Linux命令行与shell脚本编程大全(3rd)shell教程runoob高级Bash脚本编程指南