Linux命令总结

  • A+
所属分类:linux技术
摘要

用途:基于文件属性查找
用法:这两种-exec中的tar命令的使用等效这种使用方式效果和上述两种方式一致


简单常用命令

  1. 清屏 clear, ctrl + l
  2. 创建文件夹 mkdir abc
  3. 创建文件 touch abc
  4. 设置权限 chmod 755 abc, chmod -x abc, chmod a+x abc, chmod a+w abc
    注意
    r 代表读权限,用数值4表示
    w 代表写权限,用数字2表示
    x 代表执行权限,用数字1表示
    + 代表增加权限
    - 代表减少权限
    因此755代表 rwxr-xr-x,7代表文件拥有者权限,5代表文件所属组权限,5代表文件组外权限

find

用途:基于文件属性查找
用法:

find [查找路径] 寻找条件 操作 

常用参数:

-name -type f/d(文件/目录) -size +/-30M(大于/小于) -perm  -exec -ok (比exec多一个询问) -maxdepth 指定搜索的目录层级 

-exec参数详解

find [目录] -[参数] -exec [命令] {} ; find [目录] -[参数] -exec [命令] {} + 分号和加号都是-exec参数的终结符 ;  每找到一个,就执行一次[命令] +   找到多个,一次性执行[命令] 

-exec特点

这两种-exec中的tar命令的使用等效

find . -type f -exec tar -czvf n.tar.gz {} + find . -type f -exec tar -uvf n.tar.gz {} ; 

xargs

这种使用方式效果和上述两种方式一致

find . -type f | xargs tar -czvf n.tar.gz 

tar

tar -xzvf [压缩文件名] -C [指定卸压目录](卸压) tar -czvf [压缩文件名] [要进行压缩的文件] (压缩) tar -uvf [压缩文件名] [要进行压缩的文件] (更新式压缩) tar -tvf [压缩文件名] (不卸压查看内容) --remove-files (在压缩完文件后删除源文件) 

sed

s:字符替换

sed 's///' file sed 's/abc.net/efg.com/' text.txt  

c:整行替换

sed '//c/' file sed '/^SELINUX=/cSELINUX=disabled/' file ^代表开头 

g:全局替换

sed 's///g' file sed 's/abc.net/efg.com/g' test.txt 

-n:定位到某一行

sed -n '2p' file (定位到第二行) sed -n '/broadcast/p' file (定位到/broadcast这一行) 

-e:允许在同一行命令中执行多个命令

sed -e '///' -e '///' file sed -e 's/11/aa/' -e 's/bb/gg/' file 

-i:生效到文本;不加只是屏显测试结果

sed可以同时对多个文件执行同一个'///'

sed 's/aa/11/' file1 file2 ... 

awk

功能:报告生成器(不修改文本)

  • 行:record
  • 列:field
  • NR:number of record
  • NF:number of field
    例:

基本操作:

awk '{print $0}' access.log (打印所有列) awk '{print $1}' access.log (打印第一列) awk '{print $NF}' access.log (打印最后一列) awk '{print $NF-1}' access.log (最后一列-1) awk '{print $(NF-1)}' access.log (打印倒数第二列) 

列对齐:

awk '{print $1" t "$2" t "$3}' access.log (列对齐) awk '{print $1,$2,$3}' access.log (输出默认分隔符为逗号,代表一个空格,若把逗号改成空格,输出效果表现为空) echo 1:2 3*4|awk -F":" '{print $1}' (-F表示指定输入分隔符,输入默认分隔符为空格) 

显示行数/列数:

awk '{print NR "t" $0}' awk.txt (打印行号) awk '{print NF "t" $0}' awk.txt (打印每行的列数) awk '$2=="2012"{print $0}' staff.txt (当第二列的值==2012时,打印这一行) awk '{print NF}' staff.txt (只打印每行的列数) awk '{print NR}' staff.txt (只打印每行的行号) awk 'NR=="3"{print NR,$0}' staff.txt (只打印第3行) awk 'NF=="5"{print $0}' staff.txt (只打印列数为5的行) 注意:如果不指定文件名,awk会等待输入 

自定义分隔符

awk 'BEGIN{FS=","}{print $1}' BEGIN表示全局变量,FS表示输入分隔符,OFS表示输出分隔符 awk默认的输入分隔符和输出分隔符是分别定义的 awk 'BEGIN{FS=",";OFS=","}{print $1,$2}'  awk '{print NR,FILENAME,$0}' staff.txt data.txt (会把data的内容追加打印在staff的下方显示) 

隐藏某列内容

awk '{$3="xxxx";print $0}' staff.txt 

awk做计算

awk '{a=1;b=3;print a+b}' (回车给出结果,但不结束) awk遇到字符: awk '{a=2;b="56ass";c=3;print b+c}' (56+3=59) awk '{a=2;b="ass56";c=3;print b+c}' (3) 

grep/egrep

功能:基于文本内容的查找

grep -E等效于egrep 

排除#号行(注释)和空行

egrep -v "^$|#" file (-v取反,^以什么开头,$以什么结尾,|或者) egrep -v '(#|^$)' file 或者 grep -Ev "#|^$" file 

查找目录下的所有文件中是否包含指定字符串

find . | xargs grep -ri "IBM" 

查找目录下的所有文件中是否包含指定字符串,并只打印文件名

find . | xargs grep -ril "IBM" 

cut

功能

文本/屏显的切割命令;能接收管道,也能直接操作文本,按行处理

  • 默认以制表符为分隔符
  • -b 按字节切割(1byte=8bit)
  • -c 按字符切割(character,全角是2个byte,半角是1个byte)
  • -f 按字段切割(field列)
  • -d 指定分隔符(输入、输出一样)
who | cut -b 3 (切割who的输出,并只显示每行的第3个字符) 

范围的表示方法

表示 备注
N 只有第N项
N- 从第N项一直到行尾
N-M 从第N项到第M项(包括M)
-M 从一行的开始到第M项(包括M)
cut -d: -f 1,3-5,8- file.txt (-d指定分隔符:,-f指定输出第1列、3-5列、第8列及以后) 

cut和awk的一些区别

  • cut默认不会忽略空格和制表符(全是field字段)
  • awk默认把空格、制表符看作分隔符(非field字段)
    Linux命令总结

cut如何输入制表符

先按ctrl+v,再按tab健,"t"这种分隔符都是无效的

重定向

  • 标准输入0 standardinput STDIN
  • 标准输出1 standardoutput STDOUT
  • 标准错误2 standarderror STDERR

标准输出重定向

符号命令 用途
> 或 1> 标准输出重定向到新文件(会覆盖),标准错误不适用
&> 或 2> 标准错误输出
>> 追加,不覆盖原有文件
&>> 标准错误追加
2>&1 将标准错误重定向到标准输出
命令 >> 文件 2>&1 或 命令 &>> 文件 将标准输出与错误输出共同(追加)写入文件(不管命令执行结果如何)
命令 > 文件 2>&1 或 命令 &> 文件 同上(不追加)
systemctl status httpd > httpd (无屏显,内容存到httpd) systemctl status abc > abc (屏显错误,abc存在并空白) 

tee : 类似于大于号,但只从管道(或输入重定向)接收数据
tee -a : 类似于追加符(-a append)
tee和tee -a都会屏显,>>和>不屏显
tee可以同时重定向到多个文件(而>和>>没有这个功能,123 > file1 file2 结果file1里面是123 file2)
命令1|tee file.txt|命令2: 将命令1的结果既保存到file.txt中,也传给命令2,并屏显命令2的结果(若有第三个管道,就正常传值)

标准输入重定向

符号命令 用途
< 指定输入文件
<< 等待用户输入,指定输入结束符
tr 只处理字符,而非单行单列,只显示处理结果,不修改源文件只从管道(或输入重定向)接收数据(同tee)
cat > file <<end (一直等待输入,直到输入end) echo 1234 | tr 123 AB (结果为ABB4) echo 1::2::3 | tr -s : (-s压缩重复字符,结果为1:2:3) tr -d "^$" < file (不能删除空行,因为tr只对字符操作) tr -d " " < file (删除空格) tr 1-9 a-z < file (数字变字母) 

sort

默认ASCII码排列,从左往右读取字符abcdefg

参数 用途
-r 倒排序
-n 按数字排列
-t 指定分隔符,如-t:指定分隔符为冒号
-k 指定列,如-k3n代表第3列按数字排序

uniq

去除重复行
-c:去除重复行并统计重复行的数量

wc

wc -l:统计行数

锚定符

与正则的区别:锚定符前后不能有其他字符,正则可以有

<字符串> b字符串b 

head/tail

head -5 前5行
tail -5 最后5行
tail -f 表示一直刷新最后的

shell脚本编写

#!/bin/bash if [ $# -ge 1 ];then         systemctl status $1 &> /dev/null         if [ $? -eq 0 ];then                 echo "$1 is `systemctl status $1|sed -n 3p|awk '{print $2,$3}'`"         else                 echo "$1 服务不存在或未正常运行"         fi else         echo "请按如下格式执行命令:bash $0 服务名称" fi  
#!/bin/bash if [ $# -ge 1 ];then         for i in $@         do                 systemctl status $i &> /dev/null                 if [ $? -eq 0 ];then                         echo "$i is `systemctl status $i|sed -n 3p|awk '{print $2,$3}'`"                 else                         echo "$i 服务不存在或状态错误"                 fi         done else         echo "请按如下格式执行命令:bash $0 服务名称" fi  
#!/bin/bash read -p "Please input your record: " cj if [ $cj -ge 0 ] && [ $cj -le 59 ];then 	echo "补考" elif [ $cj -ge 60 ] && [ $cj -le 70 ];then 	echo "一般" elif [ $cj -ge 71 ] && [ $cj -le 85 ];then         echo "良好" elif [ $cj -ge 86 ] && [ $cj -le 100 ];then         echo "优秀" else 	echo "Please input a valid record(0-100)" fi 
#!/bin/bash case $1 in 1)         echo "god bless me" ;; 2)         echo "cat is cute" ;; *)         echo "bye" ;; esac 
#!/bin/bash set -xv read -p "Please input your number: " NU [ $NU = "1" ] && echo "You are the best" || ([ $NU = "2" ] && echo "Oh my god!")  

zabbix

[zabbix-server]服务端:监控端,就是监控者 rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm #上述操作还会在/etc/yum.repos.d/下面生成一个新的仓库文件zabbix.repo #但这个文件还是指向zabbix官网,往往因为网络问题还是会导致下面的安装错误 #所以,可以修改一下: sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo yum clean all yum makecache yum install deltarpm vim wget -y   yum install -y zabbix-server-mysql zabbix-web-mysql mariadb-server systemctl enable mariadb --now mysql_secure_installation mysql -uroot -proot mysql> create database zabbix character set utf8 collate utf8_bin; mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'root'; mysql> quit; zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -proot zabbix mysql -uzabbix -proot -D zabbix -se "show tables;"  sed -i.ori '116a DBPassword=root' /etc/zabbix/zabbix_server.conf sed -i.ori '18a php_value date.timezone  Asia/Shanghai' /etc/httpd/conf.d/zabbix.conf systemctl disable firewalld --now setenforce 0;sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config systemctl enable zabbix-server --now systemctl enable httpd --now  #解决web中文乱码: yum -y install wqy-microhei-fonts cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf  #浏览器打开:http://server的ip/zabbix #账户:Admin/zabbix   [zabbix-agent]客户端:被监控端,就是被监控者,或者叫代理端 #若agent和server同主机,下面步骤就不用重复操作了: rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo yum clean all yum makecache yum install deltarpm vim wget -y  #下面这一步是安装agent包,是必备操作,无论agent和server是否同主机: yum install -y zabbix-agent   #下面这5步是在agent的配置文件上配置服务端的IP,若agent和server同主机,可做可不做: #请根据自己的实际情况,修改“zabbix服务端的IP”: sed -i.ori 's#Server=127.0.0.1#Server=zabbix服务端的IP#' /etc/zabbix/zabbix_agentd.conf sed -i.ori 's#ServerActive=127.0.0.1#ServerActive=zabbix服务端的IP#' /etc/zabbix/zabbix_agentd.conf sed -i '/^Hostname=/cHostname=zabbix-agent1' /etc/zabbix/zabbix_agentd.conf systemctl disable firewalld --now setenforce 0;sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config   #这一步是要做的: systemctl enable zabbix-agent --now