zoukankan      html  css  js  c++  java
  • 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 #返回浮点型数字并换行
     
  • 相关阅读:
    嵌入式驱动视频2019.03.24
    wps如何输入连续的长破折号
    python绘图问题
    2.13
    2.12
    2.10
    2.9
    2.8
    2.7
    2.5
  • 原文地址:https://www.cnblogs.com/rxbook/p/10912916.html
Copyright © 2011-2022 走看看