Linux脚本常用操作总结

    科技2023-11-01  82

    常用设置文件路径:

    /etc/sysconfig/network-scripts/ifcfg-ens33 #ip配置 /etc/hosts #映射配置 /etc/sudoers #提权配置 /etc/hostname #主机名 hostnamectl set-hostname name

    查看ip ifconfig / ip addr

    软件安装-RPM 本地

    rpm -qa 查询 rpm -e 卸载 rpm -e --nodeps 软件包** (不检查依赖) rpm -ivh /var/cache/yum/x86_64/7/updates/packages/firefox-68.11.0-1.el7.centos.x86_64.rpm 安装指定安装包

    软件安装-yum 到云端下载

    选项: -y 对所有提问"yes"

    参数:

    install安装rpm软件包update更新rpm软件包check-update检查是否有可用的更新rpm软件包remove删除指定的rpm软件包list显示软件包信息clean清理yum过期的缓存deplist显示yum软件包的所有依赖关系 sudo yum install -y nc

    常用快捷键

    | 常用快捷键 | 功能 | ctrl + c | 停止进程 | ctrl+l | 清屏;彻底清屏是:reset | ctrl + q | 退出 | **善于用****tab****键** | 提示(更重要的是可以防止敲错) | | **上下键** | 查找执行过的命令 | ctrl +alt | linux和Windows之间切换

    帮助指令:

    man [命令或配置文件] (功能描述:获得帮助信息 help 命令 (功能描述:获得shell内置命令的帮助信息)

    查看log常用指令 cat/tail/head

    操作more功能说明空白键 (space)代表向下翻一页;Enter代表向下翻『一行』;q代表立刻离开 more ,不再显示该文件内容。Ctrl+F向下滚动一屏Ctrl+B返回上一屏=输出当前行的行号:f输出文件名和当前行的行号 操作less功能说明空白键向下翻动一页;[pagedown]向下翻动一页[pageup]向上翻动一页;/字串向下搜寻『字串』的功能;n:向下查找;N:向上查找;?字串向上搜寻『字串』的功能;n:向上查找;N:向下查找;q离开 less 这个程序; head/tail 文件前后十行 head/tail -n x 文件 :文件的前后x行 tail -f 监视文件尾部变化

    Ch家族指令,改变脚本的需求

    改变权限:chmod

    ①逐个修改 chmod o+r,g-w lover.txt

    o:其他用户 u:所有者 g:所有组 a:所有的

    [root@0722Linux sanguo]# chmod u-r,o+wx,g+x lvbu.txt [root@0722Linux sanguo]# ll -rw-r--r--. 1 liqili liqili 40 8月 31 09:48 diaocan.girl drwxr-xr-x. 2 root root 23 8月 31 19:07 hahaha -rw-rw-rw-. 1 liqili liqili 0 8月 31 15:11 lover.txt --w-r-xrwx. 1 liqili liqili 10 8月 31 19:45 lvbu.txt -rw-r--r--. 1 root liqili 373 8月 31 19:51 panfeng -rw-r--r--. 1 liqili liqili 6634 8月 31 14:24 smartd.conf lrwxrwxrwx. 1 root root 7 8月 31 19:26 sp -> panfeng

    ②使用二进制整体修改 chmod 444 lover.txt

    rwx对应三个二进制位

    [root@0722Linux sanguo]# chmod 444 lover.txt [root@0722Linux sanguo]# ll 总用量 20 -rw-r--r--. 1 liqili liqili 40 8月 31 09:48 diaocan.girl drwxr-xr-x. 2 root root 23 8月 31 19:07 hahaha -r--r--r--. 1 liqili liqili 0 8月 31 15:11 lover.txt --w-r-xrwx. 1 liqili liqili 10 8月 31 19:45 lvbu.txt -rw-r--r--. 1 root liqili 373 8月 31 19:51 panfeng -rw-r--r--. 1 liqili liqili 6634 8月 31 14:24 smartd.conf lrwxrwxrwx. 1 root root 7 8月 31 19:26 sp -> panfeng
    改变拥有者 chown

    chown -R 最终用户 目标文件夹:递归修改文件夹及内部文件属主;

    [root@0722Linux 图片]# chown jiang sanguo/ [root@0722Linux 图片]# ll 总用量 0 lrwxrwxrwx. 1 root root 7 8月 31 19:24 h -> hahaha/ drwxrwxrwx. 3 jiang liqili 117 8月 31 19:26 sanguo drwxr-xr-x. 2 root root 108 8月 31 15:47 xiyouji
    改变所属组 chgrp

    chrgp 最终用户组 文件或者文件夹

    [root@0722Linux 图片]# chgrp jiang sanguo/ [root@0722Linux 图片]# ll 总用量 0 lrwxrwxrwx. 1 root root 7 8月 31 19:24 h -> hahaha/ drwxrwxrwx. 3 jiang jiang 117 8月 31 19:26 sanguo drwxr-xr-x. 2 root root 108 8月 31 15:47 xiyouji

    过滤查找:| grep

    grep 选项 查找内容 源文件

    -n:匹配行号

    -v:从前面结果中过滤掉当前的grep的结果

    grep 选项 查找内容 源文件

    tar打包 文件/目录 多个

    tar [选项] XXX.tar.gz 将要打包进去的内容

    选项功能-z打包同时压缩-c产生**.tar****打包文件**-v显示详细信息-f指定压缩后的文件名-x解包**.tar****文件**

    压缩 zcvf 解压 zxvf(-C 指定解压路径)

    [root@0722Linux sanguo]# tar zcvf sang.tar.gz lvbu.txt h.zip smartd.conf lvbu.txt h.zip smartd.conf [root@0722Linux sanguo]# tar zxvf sang.tar.gz lvbu.txt h.zip smartd.conf [root@0722Linux sanguo]# ll 总用量 28 -rw-r--r--. 1 liqili liqili 40 8月 31 09:48 diaocan.girl drwxr-xr-x. 2 root root 38 8月 31 20:51 hahaha -rw-r--r--. 1 root root 653 8月 31 20:49 h.zip -r--r--r--. 1 liqili liqili 0 8月 31 15:11 lover.txt --w-r-xrwx. 1 liqili liqili 10 8月 31 19:45 lvbu.txt -rw-r--r--. 1 root liqili 373 8月 31 19:51 panfeng -rw-r--r--. 1 root root 3430 8月 31 20:55 sang.tar.gz -rw-r--r--. 1 liqili liqili 6634 8月 31 14:24 smartd.conf lrwxrwxrwx. 1 root root 7 8月 31 19:26 sp -> panfeng

    线程指令 -PS

    显示进程(ps)

    ps -a 所有BSD0进程 ps -u 所有用户的所有BSD进程 ps -x 显示没有终端的BSD进程 ps -aux | grep sshd | grep -v grep ps -ef 所有的标准进程(bash启动的进程)

    kill(根据线程id终止进程)

    kill -9 33066

    killall(根据进程名称杀死进程,支持通配符)

    大小命令 du

    du命令用于显示目录或文件的大小 参数说明: h:以K,M,G为单位,提高信息的可读性。 c:或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。 s:或--summarize 仅显示总计。 例题 du -h bin/ 32K

    动态监控进程 top

    top top -d 10 设置更新频率s

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m40yCPmU-1601994828519)(C:\Users\Vae\AppData\Roaming\Typora\typora-user-images\image-20200903161350069.png)]

    监控特定用户

    输入 top 命令 在top命令输入 `u` 输入要查看的用户 , 以`root`为例

    终止指定进程

    top 命令, 回车查看执行的进程 输入 'k' 回车 , 输入要结束的进程id, 回车

    操作指令

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qqetvhQg-1601994828520)(C:\Users\Vae\AppData\Roaming\Typora\typora-user-images\image-20200903161441177.png)]

    网络统计信息和端口占用情况 netstat

    netstat -anp |grep 进程号 (功能描述:查看该进程网络信息) netstat -nlp | grep 端口号 (功能描述:查看网络端口号占用情况) 选项功能-n拒绝显示别名,能显示数字的全部转化成数字-l仅列出有在listen(监听)的服务状态-p表示显示哪个进程在调用

    文件系统间分发

    ①scp 安全拷贝——服务器文件发送

    scp -r p d i r / pdir/ pdir/fname u s e r @ h a d o o p user@hadoop user@hadoophost: p d i r / pdir/ pdir/fname

    scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)

    操作另外两个服务器的文件夹文件内容传输 [atguigu@hadoop103 profile.d]$ scp -r atguigu@hadoop102:/opt/software/* atguigu@hadoop104:/opt/software/ hadoop-3.1.3.tar.gz 100% 322MB 89.0MB/s 00:03 jdk-8u212-linux-x64.tar.gz 100% 186MB 62.6MB/s 00:02 Connection to hadoop102 closed.

    ②rsync 远程同步工具

    rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点

    rsync -av p d i r / pdir/ pdir/fname u s e r @ h a d o o p user@hadoop user@hadoophost: p d i r / pdir/ pdir/fname

    [atguigu@hadoop103 profile.d]$ rsync -av atguigu@hadoop102:/opt/software/* /opt/software/ receiving incremental file list hadoop-3.1.3.tar.gz jdk-8u212-linux-x64.tar.gz sent 62 bytes received 533,219,361 bytes 71,095,923.07 bytes/sec total size is 533,089,012 speedup is 1.00 [atguigu@hadoop103 profile.d]$ rsync -av atguigu@hadoop102:/opt/software/* /opt/software/ #第二次没有传输文件 receiving incremental file list sent 20 bytes received 119 bytes 92.67 bytes/sec total size is 533,089,012 speedup is 3,835,172.75

    文件处理三剑客-cut 切割

    cut -d "分割符" -f 列数 filename:提取分隔配符分割后的第几列 cut -c int filename :取第几位的character [root@0722Linux sanguo]# cut -c 3 panfeng 量 w w w 吃 l [root@0722Linux sanguo]# ifconfig ens33|grep netmask |cut -d 'n' -f 2 | cut -d " " -f 2 192.168.108.100

    文件处理三剑客-sed 替换

    sed -e/-i a/d/s

    sed 选项 'command' filename -e 不编辑原文件-默认 -i 编辑源文件 a新增,a的后面可以接字串,在下一行出现d删除s查找并替换 [root@0722Linux sanguo]# sed -i '/mei/d' panfeng 删除指定字符的行 [root@0722Linux sanguo]# sed -e 's/rw/哈/g' panfeng 替换指定字符,g表示全局global [root@0722Linux sanguo]# sed -e '2a meinv' panfeng 第2行后增加meilv一行 [root@0722Linux sanguo]# sed -e '2d' panfeng 删除第二行

    三剑客之 awk 切片分析

    -F/-v ‘Begin{action-1}pattern{action},pattern{action1}…END{actionEND}’ filename

    一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。-f设置分隔符

    [root@0722Linux sanguo]# awk -F : '/^root/{print $7}' passwd 输出root开头的行的第七列;以:分割 [root@0722Linux sanguo]# awk -F : '/^root/{print $1 "," $7}' passwd 输出1和7列 [root@0722Linux sanguo]# awk -F : '{print $1 "," $7}' passwd 输出所有:分割的第1+7列 [root@0722Linux sanguo]# awk -F : 'BEGIN{print "user , shell"} {print $1 "," $7} END{print"xiaolistu,hohokan"}' passwd 第一行加入XXX 最后加入xxx [root@0722Linux sanguo]# awk -F : -v i=4 '{print $3 + i}' passwd -v进行变量赋值 [root@0722Linux sanguo]# awk -F : '{print FILENAME NR NF}' 输出行数和列数 变量说明FILENAME文件名NR已读的记录数 ——行数NF浏览记录的域的个数(切割后,列的个数)

    sort -n/-r/-t/-k 排序

    选项说明-n依照数值的大小排序-r以相反的顺序来排序-t设置排序时所用的分隔字符-k指定需要排序的列 [root@0722Linux sanguo]# sort -t : -nrk 2 sort.sh xz:50:2.3 bb:40:5.4 ss:30:1.6 bd:20:4.2 cls:10:3.5 [root@0722Linux sanguo]# sort -t : -nk 2 sort.sh cls:10:3.5 bd:20:4.2 ss:30:1.6 bb:40:5.4 xz:50:2.3

    变量的定义

    n=20 赋值字符串20给n “=”两边不能有空格 unset n 撤销变量n readonly n=50 设定静态变量,不可撤销,不可更改 export n:把n设为全局变量;可供其他脚本调用

    特殊变量$n $# $* $@ $?

    $n:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10} $#:获取所有输入参数个数,常用于循环 $*:把所有输入参数当作一个整体输出 $@:把输入参数分别输出 $?:最后一次执行的命令的返回状态;未定义且执行成功返回0 ${运行指令}:读取运行指令的结果,非字符串形式;#把某命令执行结果当作匿名变量提取: dname=$(cd $(dirname $param);pwd) fname=$(basename $param)

    休眠的用法 sleep

    sleep 4 #休眠4s;单位为s,中间加空格

    运算符 $[] $(())

    ( ( 算 式 ) ) / ((算式)) / (())/[算式]

    [root@0722Linux sanguo]# echo $[(3+2)*3] 15

    条件判断 test condition / [ condition ] 有空格

    判断变量为空与否? [ “$s” ]——>判断s是否为空,即变量内容转成字符串判断一个字符串是否为空

    [root@0722Linux sanguo]# test 5 -lt 7 && echo ture || echo false ture [root@0722Linux sanguo]# test -d hahaha && echo ture || echo false ture [root@0722Linux sanguo]# test -r hahaha && echo ture || echo false ture [root@0722Linux sanguo]# [ -r hahaha ]&& echo ture || echo false ture

    ❤❤2.3 流程控制

    if语句 if []
    #!/bin/bash if [ $1 -lt $2 ] then echo $1 echo "大" elif [ $1 -gt $2 ] then echo $2 echo "小" else echo "傻逼" fi

    注意:if后面加空格

    case 语句
    #!/bin/bash case $1 in#判断第一个输入参数的值 "1" ) echo 1 ;; "2") echo 2 ;; *) echo "h" ;; esac

    (1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。

    (2)双分号“;;”表示命令序列结束,相当于java中的break。

    (3)最后的“*)”表示默认模式,相当于java中的default。

    for (()) 普通与for in
    #!/bin/bash sum=0 for ((i=0;i<=100;i=i+2))#普通for do sum=$[$sum+$i] done echo $sum #!/bin/bash sum=0 for i in $* #增强for do sum=$[$sum+$i] done echo $sum

    ∗ 和 *和 @都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 2 … 2 … 2n的形式输出所有参数。

    while循环 while do done
    #!/bin/bash sum=0 i=0 while [ $i -le 100 ] #小于等于 do sum=$[$sum +$i] i=$[$i+2] done echo $sum

    控制台录入read 与函数

    read 选项 参数 变量名 -t 等待时间 -p 指定读取值时的提示意: [root@0722Linux sanguo]# read -t 10 -p "please enter a num:" num 等待10s把输入的值传入num please enter a num:10

    获取路径/文件名 basename 与 dirname

    basename + 路径字符串 只保留文件名 dirname + 留路径名 [root@0722Linux sanguo]# basename /etc/sysconfig/network-scripts/ifcfg-ens33 ifcfg-ens33 [root@0722Linux sanguo]# dirname /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts

    自定义函数 function

    [ function ] funname[()]

    {

    ​ Action;

    ​ [return int;]

    }

    funname

    #!/bin/bash function sum() { s=0 s=$[ $1 + $2 ] echo "$s" return 200 } read -p "Please input the number1: " n1; read -p "Please input the number2: " n2; sum $n1 $n2;

    (1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。

    (2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)

    正则基础数字子母匹配 ^ $ . * [] 使用单引号包裹

    ^a:以a为开头的 a$:以a为结尾的 ^$:空行 r..t:中间任意字符 ro*t:匹配*前的字符任意个数 [a-z]/[a,z]/[a-j,k-m]:匹配某个范围的所有字符 \$ :转义字符,把 $ 转为普通字符 \d: 代表数字 [root@0722Linux sanguo]# cat panfeng | grep 's\$' ddss$aroat [root@0722Linux sanguo]# cat panfeng | grep 'ro*t' rooot rot rt-lw-l--l--. 1 liqili liqili 6634 8月 31 14:24 smaltd.conf [root@0722Linux sanguo]# cat panfeng | grep 'r..t' ddss$aroat romt [root@0722Linux sanguo]# cat panfeng | grep '^r' rooot romt rot rt-lw-l--l--. 1 liqili liqili 6634 8月 31 14:24 smaltd.conf [root@0722Linux sanguo]# cat panfeng | grep 'r$'
    Processed: 0.028, SQL: 8