Linux笔记整理

【随时更新】

ps aux | grep mysql 检测MySQL服务是否在运行
Linux查看某个进程的线程:ps -T -p <pid> 列出了由进程号为<pid>的进程创建的所有线程。
top -H 在top输出中开启线程查看,"-H” 选项会列出所有Linux线程。
要让top输出某个特定进程<pid>并检查该进程内运行的线程状况:top -H -p <pid>
vmstat 命令的含义为显示虚拟内存状态("Viryual Memor Statics"),但是它可以报告关于进程、内存、I/O等系统整体运行状态。
执行 top -c 命令,可以找到cpu最高的进程的id。
 
linux中怎么查看系统资源占用情况
top、htop、free、uptime
 
【Linux进程管理】
w / top / ps / kill / pkill / pstree / killall
 
【lsof命令】
lsof -i 显示所有连接
lsof -i 6 仅获取IPv6流量
lsof -i TCP 仅显示TCP连接
lsof -i:port 显示与指定端口相关的网络信息
lsof -i@host 显示指定到指定主机的连接
lsof -i@host:port 显示基于主机与端口的连接
lsof -i -sTCP:LISTEN 找出TCP的监听端口
 
【常用的命令汇总】
1.-文件,d目录,l软链接(-rw-r--r--);
2.ps aux | grep mysql:检测MySQL服务是否在运行;
3.date:查看当前系统的时间;
4.echo a > file.txt:覆盖写入,>> 追加写入。
5.which cp; whereis cp; man ls(查看帮助);ls --help(查看选项)。
6.改变权限:chmod u+x test.txt;chmod -R 777 myname (-R 递归,r=4,w=2,x=1)
7.改变所有者:chown rx image;改变所属组:chgrp renxing image;缺省权限:umask。
8.本台服务器运行信息:uptime
9.关机重启:shutdown [-h关机/-r重启/-c取消] [now现在/20:32指定时间];
10.退出登录:logout;重启:reboot; 运行级别:runlevel
11.init运行级别:0关机,1单用户,5图形界面,6重启;
 
【定时任务crontab】
service crond restart;chkconfig crond;
crontab [-e编辑|-l查询|-r删除]:
关于5个*号:
第一个*:一小时中的第几分钟(0-59);
第二个*:一天中的第几个小时(0-23);
第三个*:一个月中的第几天(1-31);
第四个*:一年中的第几月(1-12);
第五个*:一周中的星期几(0-7);
20 3 * * * /bin/sh /script/a.sh #每天3:20 执行a.sh
*/10 * * * * /bin/sh /script/b.sh #每隔10分钟 执行b.sh
50 0,7,8,9,10 * * * /bin/sh /script/ #x:50 执行 d.sh
 
【目录处理命令】
创建目录:mkdir [-p] [目录名]
切换目录:cd [目录]
显示路径:pwd
删除空目录:rmdir [目录名]
删除文件:rm -rf [文件或目录] (-r 删除目录,-f 强制执行)
复制:cp -rp [原文件或目录] [目标目录] (-r 复制目录,-p 保留文件属性)
剪切、改名:mv [原文件或目录] [目标目录]
显示目录:ls 选项[-alhd] [文件或目录] (-d 查看目录属性)
 
【文件处理命令】
创建空文件:touch [文件名]
显示文件内容:cat -n [文件名] (-n 显示行号);tac:反向显示。
分页显示内容(只能向下看):more [文件名];空格翻页,回车换行,q退出。
分页显示内容(可以向上看):less [文件名];同more,且可上下左右箭头,输入"/ [关键词]"查找关键词,按n继续。
显示前面几行:head -n [文件名];(-n 指定行数,默认10行)
显示后面几行(可动态观察):tail -n [文件名];(-f动态显示,用来监控日志)
生成链接文件:ln -s [原文件] [目标文件](-s 创建软链接,类似于win下的快捷方式)
 
【文件搜索命令】
文件名:find /etc -name init; (*init*、init*、init???)
文件大小:find /etc -size +204800;
所有者:find /home -user renxing;
文件类型:find /home/ -type d; (d文件/f目录/l软链接)
i节点:find /tmp/ -inum 262172;
多条件[-a]:find /etc -name init -a -type d;
查找并执行操作[-exec]: find /etc -name inittab -exec rm {} ; (-ok需要确认)
资料库中查找:locate [-i] 文件名; (-i 忽略大小写)
文件中搜索:grep hello /root/a.txt; (a.txt中查找hello;-v排除指定字符)
 
【压缩解压】
[.gz] gzip a.txt | gunzip a.gz
[.zip] zip [-r] a.zip a.txt | unzip a.zip (-r压缩目录)
[.tar.gz] tar -zcf b.tar.gz b | tar -zxf b.tar.gz (-z压缩,-v详细信息)
[.tar.bz2] tar -jcfb.tar.bz2 b | tar -jxf b.tar.bz2
 
【网络命令】
发信息:write [用户名];给所有人发广播:wall [信息内容];
测试网络:ping -c 3 192.168.1.1 (-c 3 表示ping 3次就退出);
网卡信息:ifconfig eth0 192.168.1.2
发送邮件:mail [用户名];接收邮件:mail;
查看都有谁登录了:last 和 lastlog;
查看数据包到主机的信息:traceroute www.sina.com;
本机监听的端口:netstat -tlun
挂载命令:mount -t iso9660 /dev/sr0 /mnt/cdrom
 
【vim命令】
[插入]a光标后,i光标前,o光标下新行;A光标行尾,I光标行首,O光标上新行。
[定位]:set nu设置行号,:set nonu 取消行号,gg到第一行,G到最后一行,nG到第n行,:n到第n行,$ 移至行尾,0移至行首。
[删除]x删除字符,nx删除后面n个,dd删除一行,ndd删除n行,dG删除到末尾,:n1,n2d删除指定范围。
[复制]yy复制行,nyy复制n行,dd剪切行,ndd剪切n行,p粘贴行下,P粘贴行上。
[替换]r替换一个字符,R替换n个按Esc结束,u撤销。
[搜索]/string搜索,:set ic忽略大小写,:set noic区分大小写,n下一个,:%s/old/new/g 全文替换指定字符串,:n1,n2s/old/new/g 在一定范围内替换指定字符串。
[保存] :w 保存,:w newfile另存为,:q!不保存退出,:wq 保存退出,:wq!强制保存退出。
[导入命令] :r+文档名:编辑中导入文件到当前文档(:r /etc/issue);:!+命令:编辑中执行系统的某个命令(:!which ls);:r+!命令:编辑中导入系统的某个命令的执行结果(:r !date 导入当前时间)。
[快捷键] :map ^P I#<ESC> (行首加#符号);:n1,n2s/^/#/g (多行注释)
[替换] :ab str1 str2
[永久写入配置] /home/rx/.vimrc
 
【用户管理】
添加用户:useradd renxing
设置密码:passwd renxing
修改用户:usermod [选项] renxing
修改密码状态:chage -d 0 renxing (一登陆就要改密码)
删除用户:userdel -r renxing
查看用户ID:id renxing
切换用户:su - root
查看用户的环境变量:env
查看谁登录:who ,登录用户的详细信息:w
添加组:groupadd rx
修改组:groupmod rx
删除组:groupdel rx
把用户加入到组:gpasswd -a renxing rx
把用户从组删除:gpasswd -d renxing rx
一些目录:/etc/passwd(登录信息),shadow(密码),group(组),gshadow(组密码),/var/spool/mail/用户名 (用户的邮箱)。
 
【软件包安装】
[RPM安装] rpm -ivh 包全名(安装),rpm -Uvh 包全名(升级),rpm -e 包名(卸载),rpm -qa | grep httpd (查询);
[yum安装] yum list (软件包列表),yum search 关键字(查询软件),yum -y install/update/remove 包名(在线安装/升级/卸载),yum grouplist(软件组列表)。
[源码安装].tar.gz --> ./configure --prefix=/usr/local/apache --> make | make install | make clean.
 
【权限管理】
查看分区ACL权限是否开启:dumpe2fs -h /dev/sda3
临时开启ACL:mount -o remount,acl /
永久开启ACL:vi /etc/fstab,写入相关内容。
设定ACL权限:setfacl 选项 文件名
查看ACL命令:getfacl 文件名
给用户组设定ACL权限:setfacl -m g:tgroup2:rwx project/
最大有效权限:mask
修改最大有效权限:setfacl -m m:renxing 文件名
删除ACL权限:setfacl -x g:组名 文件名
递归ACL权限:setfacl -m u:用户名:权限 -R 文件名
默认ACL权限:setfacl -m d:u:用户名:权限 文件名
设定SetUID:chmod 4755 文件名;取消SetUID:chmod 755 文件名。
设定SetGID:chmod 2755 文件名;取消SetGID:chmod 755 文件名。
设置SBIT粘着位:chmod 1755 目录名;取消SBIT:chmod 777 目录名。
增加权限:chatr +i abc.txt (+/-/=)
查看文件系统属性:lsattr [选项-a/-d] abc.txt
sudo权限:给普通用户赋予root权限。
 
【文件系统】
查看系统分区:df -ah
查看目录大小:du -sh /etc/
统计文件数:ls -lR|grep "^-"|wc -l
查看目录大小:du -ah --max-depth=1
文件系统修复:fsck [选项] sda1/sda2/...
显示磁盘状态:dumpe2fs /dev/sda1
查看已挂载设备:mount -l
卸载:umount /mnt/cdrom
查看U盘:fdisk -l
 
【系统管理】
查看自启动服务:chkconfig --list
启动服务:/etc/init.d/服务名 start|stop|status|restart
设置自启动服务:chkconfig 服务名 on|off (/etc/rc.d/rc.local)
查看进程:ps aux 或者 ps -le 或者 pstree
结束进程:kill -l (查看可用的进程);kill -1 12345(重启进程);kill -9 12345(强制杀死进程);killall 进程名;pkill 进程名;pkill -t -9 pts/1(按照终端号踢出用户);
放入后台(&符号):tar -zcf etc.tar.gz /etc &
查看后台的工作:jobs
后台的工作恢复到前台:fg %工作号,到后台:bg %工作号
查看系统资源:vmstat 1 3
开机时内核检测信息:dmesg | grep CPU
查看内存使用状态:free [-b|-k|-m|-g]
查看CPU信息:cat /proc/cpuinfo
显示系统启动时间:uptime
增量备份工具:dump [选项] 备份之后的文件名 原文件或目录
增量恢复工具:restore [模式选项] [选项]
 
【Shell】
第一个脚本:vi hello.sh
#!/bin/Bash
#The first program
# Author: renxing (E-mail: renxing@qq.com)
echo -e "Mr. RX is the most honest man"
--->执行:chmod 755 hello.sh; ./hello.sh.
 
1. 使用dos2unix 函数可以将win中的文本转化为Linux中的文本(反之unix2dos),例如:dos2unix hello.sh
2.历史命令:history [-c清空|-w写入] ./root/bash_history
3.命令别名:alias 别名='原命令' ;alias #查询命令别名;unalias 别名 #删除别名;让别名永久生效:vi /root/.bashrc
4.多命令:[分号]彼此没有关系,顺序执行;[&&]逻辑与;[||]逻辑或,前面的对了后面就不执行;[命令 && echo yes || echo no]判断命令是否正确。
5.管道符:命令1|命令2,ps aux | grep "php".
6.通配符:? 匹配一个任意字符;* 匹配任何内容;[] 匹配中括号中的任意一个字符;[-] 匹配中括号中任意一个范围的字符;[^]逻辑非。rm -rf *
7.引用系统命令$():echo $(date);
8.变量:aa=123;name="renxing";删除变量 unset name;
9.位置参数变量:[$n]n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}。[$*]代表命令行中所有的参数,$*把所有的参数看成一个整体 ;[$@]也代表命令行中所有的参数,不过$@ 把每个参数区分对待;[$#]代表命令行中所有参数的个数。
10. $? 在脚本中判断一个命令是否正确执行。$$ 当前进程的进程号(PID)。$! 后台运行的最后一个进程的进程号(PID)
11.接收键盘输入:read [-p提示信息|-t秒数|-n字符数] [变量名]
12.declare声明变量类型:declare [+/-][选项] 变量名
13.数值运算:"$((运算式))"或"$[运算式]":aa=11;bb=22;ff=$(($aa+$bb));echo $ff ====> 33
 
【Shell正则表达式】
1. "*" 前一个字符匹配0次,或任意多次:grep "aaaaa*" test_rule.txt #匹配最少包含四个个连续a的字符串
2."." 匹配除了换行符外任意一个字符:grep "s.*d" test_rule.txt #匹配在s和d字母之间有任意字符
3."^"匹配行首,"$"匹配行尾:grep "n$" test_rule.txt #匹配以小写"n"结尾的行
4."[]" 匹配中括号中指定的任意一个字符,只匹配一个字符:grep "^[a-z]" test_rule.txt #匹配用一个小写字母开头的行
5. "[^]" 匹配除中括号的字符以外的任意一个字符:grep "^[^a-z]" test_rule.txt #匹配不用小写字母开头的行
6. "" 转义符:grep ".$" test_rule.txt #匹配使用"."结尾的行
7. "{n}"表示其前面的字符恰好出现n次:grep "a{3}" test_rule.txt #匹配a字母连续出现三次的字符串
8."{n,}"表示其前面的字符出现不小于n次:grep "^[0-9]{3,}[a-z]" test_rule.txt #匹配最少用连续三个数字开头的行
9."{n,m}"匹配其前面的字符至少出现n次,最多出现m次:grep "sa{1,3}i" test_rule.txt #匹配在字母s和字母i之间有最少一个a,最多三个a
 
【字符处理命令】
1.文档提取(配合grep):cut [-f 列号|-d 分隔符] 文件名。cut -f 2,4 student.txt #提取文档第2和第4列.(不能提取空格分隔符,awk可以)
2.awk命令:awk '条件1{动作1} 条件2{动作2}⋯' 文件名。df -h | awk '{print $1 " " $5 " " $6 }' #使用awk打印df -h的第1、5、6列
3.printf '输出类型输出格式' 输出内容
4.sed命令:sed [选项-n/-e/-i] [动作] 文件名
5.排序命令: sort [选项] 文件名
6.统计命令:wc [-l|-w|-m] 文件名
 
【条件判断】[ 命令 ]
1.文件类型判断:-d是否为目录,-e文件是否存在,-f是否为普通文件。[ -d /root ] && echo "yes" || echo "no" #判断 /root 是否是一个目录,如果是,打印yes,如果不是,打印no
2.按照文件权限判断:-r是否拥有读权限,-w是否拥有写权限,-x是否拥有执行权限。
3.两个文件之间的比较:文件A-nt文件B,文件A-ot文件B,文件A-ef文件B。
4.两个整数比较:A-eqB,A-neB,A-gtB,A-ltB[A是否小于B],A-geB,A-leB。
5.字符串的判断:-z 字符串[是否为空],-n 字符串[是否为非空],串1==串2[两个串是否相等],串1!=串2[两个串是否不相等]。
6.多重条件判断:判断A-a判断B[逻辑与],判断A-o判断B[逻辑或],!判断[逻辑非]。
 
【if语句】
if [ 条件判断式 ]
then
条件成立时,执行的程序
else
条件不成立时,执行的另一个程序
fi
 
【case语句】
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
⋯省略其他分支⋯
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
 
【for循环】
[语法一] 不确定循环次数(在批量处理文件中非常实用)
for 变量 in 值1 值2 值3⋯
do
程序
done
 
[语法二] 确定循环次数
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
 
【while循环】
说明:只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。
while [ 条件判断式 ]
do
程序
done
 
【until循环】
说明:until循环和while循环相反,只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环。
until [ 条件判断式 ]
do
程序
done
 

【Linux Awk命令】
 
awk '条件1{动作1} 条件2{动作2}…' 文件名
[score.txt]
Aaron Physics 87
Abel Maths 98
Rahul Chinese 90
Buck Biology 87
Byron English 85
Dave History
Enoch Chemistry 89 test
[student.txt]
Aaron nan 25
Abel nv 18
Rahul nv 22
Buck nan 16
Byron nv 21
 
打印文件的所有列:awk '{print $0}' score.txt
打印第1列和第2列:awk '{print $1,$2}' score.txt
打印指定列并拼接字符串:awk '{print "Hello",$1,"world",$2}' score.txt
使用管道符:cat score.txt | awk '{print $1 "-" $2}'
打印最后一列:awk '{print $NF}' score.txt
打印第一行:awk 'NR==1{print $0}' score.txt
打印最后一行:awk 'END{print}' score.txt
打印指定行的指定列,比如 第4行 第2列:awk 'NR==4{print $2}' score.txt
通过匹配模式串输出列:awk '/b/{print $0}' score.txt
以任意顺序输出列,比如 第3列 和 第1列,以空格分隔:awk '{print $3 " " $1}' score.txt
行开头匹配,比如 以"A"开头:awk '/^A/' score.txt
行结束匹配,比如 以"89"结尾:awk '/89$/' score.txt
打印文件的所有列前面加行号:awk '{print NR,$0}' score.txt
打印两个文件并分别显示行号:awk '{print FNR,$0}' score.txt student.txt (如果使用NR会追加行号)
打印两个文件并分别显示文件名和行号:awk '{print FILENAME,FNR,$0}' score.txt student.txt
打印出第3列>=89的值:awk '$3>=89 {print $2}' score.txt
打印出包含3列的行:awk 'NF==3 {print $0}’ score.txt
 
使用printf输出:
输出一列:awk '{printf "%s ",$1}' score.txt
输出两列:awk '{printf "%s %s ",$1,$2}' score.txt
 
BEGIN 和 END:
在前面和后面拼接文本(类似于表头和表尾):
awk 'BEGIN{print "aaa","bbb"} {print $1,$2} END{print "ccc","ddd"}' score.txt
内置ARGC 和 ARGV,表示参数数量和参数值:
awk 'BEGIN{print "aaa",ARGV[0],ARGV[1],ARGV[2],ARGC}' x y z #输出 aaa awk x y 4
自定义多个变量:
awk 'BEGIN{m="111";n="222";print m,n}' #输出 111 222
 
默认的列分隔符是空格,指定列分隔符,使用-F或者FS,输出分隔符是OFS:
取出第1个字段和第7个字段,以|分隔输出:awk -F':' '{print $1 "|" $7}' /etc/passwd
或者如下:awk -v FS=':' -v OFS='|' '{print $1,$7}' /etc/passwd
默认的行分隔符是回车,指定行分隔符,使用 -v RS=" "
例如,awk -v RS='' '{print $1 "|" $7}' /etc/passwd
 
统计nginx日志里访问次数最多的前十个IP:
awk '{print $1}' access.log | sort | uniq -c | sort -nr -k1 | head -n 10
说明:
awk '{ print $1}':取数据的第1列
sort:对IP部分进行排序。
uniq -c:打印每一重复行出现的次数。(并去掉重复行)
sort -nr -k1:按照重复行出现的次序倒序排列,-k1以第一列为标准排序。
head -n 10:取排在前10个的IP
 
[分隔符总结]
FS:输入字段分隔符, 默认为空白字符
OFS:输出字段分隔符, 默认为空白字符
RS:输入记录分隔符(输入换行符), 指定输入时的换行符
ORS:输出记录分隔符(输出换行符),输出时用指定符号代替换行符
NF:number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量
NR:number of Row,行号,当前处理的文本行的行号。
FNR:各文件分别计数的行号
FILENAME:当前文件名
ARGC:命令行参数的个数
ARGV:数组,保存的是命令行所给定的各参数
 
假设要在 api.log文件中,(此文件的多个字段数据以不可见字符^A(键盘上按下Ctrl+V+A)分隔),
要输出第70个字段:
awk -F '^A' '{print $70}’ api.log
 
要判断第25个字段=9的数据,输出第70个字段:
awk -F '^A' '($25==9){print $70}’ api.log
 
如果是判断多个条件,用&&连接:
awk -F '^A' '($1=="a17cd" && $14==10026 && $13==8){print $1,$2,$5,$14,$13}’ api.log
 
用awk命令计算文件中某一列的总和:
awk 'BEGIN{sum=0}{sum+=$1}END{print sum}' test1.log
 
【shell脚本替换文件中某个字符串】
sed命令:sed [选项-n/-e/-i] [动作] 文件名
sed -i "s/jack/tom/g" `grep "jack" -rl ./ #将当前目录下包含jack串的文件中,jack字符串替换为tom
sed -i "s/jack/tom/g” test.txt #将某个文件中的jack字符串替换为tom
 
【cut命令】
cut [选项] 文本文件名
选项:-f 列号提取第几列;-d 分隔符:按照指定分隔符分割列
例如:cut -f 1,3 -d ":"
 
【printf命令】
printf [格式替换符] 文本内容
%s 字符串
%f 浮点格式(也就是我们概念中的float或者double)
%b 相对应的参数中包含转义字符时,可以使用此替换符进行替换,对应的转义字符会被转义。
%c ASCII字符。显示相对应参数的第一个字符
%d, %i 十进制整数
%o 不带正负号的八进制值
%u 不带正负号的十进制值
%x 不带正负号的十六进制值,使用a至f表示10至15
%X 不带正负号的十六进制值,使用A至F表示10至15
%% 表示"%"本身
例如:printf "%s " a b c d #将每个字母显示一行,然后换行
例如:printf "%f " 1 2 3 4 #返回浮点型数字并换行
 
原文地址:https://www.cnblogs.com/rxbook/p/10912916.html