Linux笔记整理

    技术2022-07-10  156

    #!/bin/sh 指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后表示解释此脚本程序路径。可用各种各样的解释器来写对应的脚本,例如:/bin/bash,/bin/perl

    local本地变量 shell脚本中定义的变量默认是global的,其作用域从被定义的地方开始,到shell结束。 函数内定义的变量可被显式地定义为local的,其作用域局限于函数内。

    set指令 set的+和-选项用于关闭或者打开某些特性,有多种特性,例如-x特性, set -x与set +x指令用于脚本调试:set -x 开启调试   set +x 关闭调试   set -o 查看调试 想知道脚本内部执行的变量值或执行结果,这时可在脚本内部指定set -x  set的--选项表示将参数值传给位置参数($1,$2...),例如: set -- p1 p2 -host -4 echo $@   p1 p2 -host -4 echo $1,$2,$3,$4   p1 p2 -host -4

    chmod指令 chmod +x variable

    shift指令    位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。    不带参数的shift命令相当于shift 1,shift 1命令每执行一次,变量的个数($#)减一,而变量值提前一位

    cut/awk/sed/grep ---cut用于对数据进行“列”的提取操作(语法:cut [选项] [file]),例如:cut -d ':' -f 1,3 ./package.json表示以:为分隔符,截取package.json第一列和第三列内容    cut命令缺点是不能以空格作为分隔符,解决办法是使用awk命令 ---awk用于对数据进行“列”的提取操作(语法:awk '条件1 {执行动作} 条件2 {执行动作} ' 文件名),提示:条件是可以省略的    比cut功能更强大,支持条件判断,数组,循环等功能。它先一行一行的按行读取数据,然后再按列提取数据。    awk '{print $1}' /etc/passwd表示打印/etc/passwd文件第一列,{print $1}表示执行动作,根据awk的语法,我们并没有添加条件,awk默认把一整行当成一列    awk -F ':' '{print $1}' /etc/passwd或cat /etc/passwd | awk -F ':' '{print $1}',表示根据“:”进行分隔,若不指定-F ':',默认以空格分隔    df -h | awk 'NR==1 {print $1}' 表示打印df -h命令输出内容的第一行第一列(未指定-F参数,默认以空格进行列分隔)    df -h | awk '(NR>=2 && NR <=5) {print $1}' 表示打印第二行到第五行的第一列,df -h | awk '{print $NF}'表示打印最后一列 ---sed命令主要对数据进行处理(选取,新增,替换,删除,搜索,语法:sed [选项] [动作] 文件名)    df -h | sed -n '2p' 表示打印第二行内容;df -h | sed '2d' 表示将打印内容的第二行删除;    df -h | sed '2a 123456表示在第2行下面插入123456;df -h | sed '2i 123456表示在第2行上面插入123456    df -h | sed '2c 1234567890' 表示将第2行内容替换为1234567890;sed -n '/zh/p' 123.txt 表示搜索123.txt中包含‘zh’的行,并打印出来    df -h | sed 's/容量/size/g' 表示将打印内容的容量替换为size;sed -i 's/cong/科技/g' 123.txt 表示将文件中的'cong'替换为'科技'     ---grep家族总共有三个:grep,egrep,fgrep,用于查找过滤内容。常用选项:-i忽略大小写,--color将匹配到的内容以高亮显示,-o只显示被模式匹配到的字符串

    $0/$1/$2/...位置变量 $0表示当前shell脚本名,$1传给当前脚本的第1个参数,$2传给当前脚本的第2个参数,... $#表示传给脚本的参数个数。 $*或$@表示所有参数列表,两者区别在于返回数据格式不一样。 $$表示当前脚本运行的进程ID号。 $!表示后台运行的最后一个进程的进程ID号。 $?表示上一个命令的返回值(显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)

    通过$?变量可获取exit的数值,一般用来判断程序是否正常结束,用于进行shell脚本业务流程控制: exit 0:正常运行程序并退出程序,为0即表示程序运行正常 exit 1:非正常运行导致退出程序,也可以约定为其他数字,表示不同异常情况,不为0即表示程序运行出错

    整数比较 -eq     等于,如:if ["$a" -eq "$b" ] -ne     不等于,如:if ["$a" -ne "$b" ] -gt     大于,如:if ["$a" -gt "$b" ] -ge    大于等于,如:if ["$a" -ge "$b" ] -lt      小于,如:if ["$a" -lt "$b" ] -le      小于等于,如:if ["$a" -le "$b" ] <  小于(需要双括号),如:(("$a" < "$b")) <=  小于等于(需要双括号),如:(("$a" <= "$b")) >  大于(需要双括号),如:(("$a" > "$b")) >=  大于等于(需要双括号),如:(("$a" >= "$b")) 例如:while [ "$#" -ne 0 ]中-ne表示不等于,表示传给脚本参数个数不为0

    while循环 利用while循环计算1到100的和: #!/bin/bash i=1 sum=0 while [ $i -le 100 ] do   let sum=sum+$i   let i++ done echo $sum

    使用read结合while循环读取文本文件: #!/bin/bash file = $1 if [ $# -lt 1 ];then   #判断用户是否输入了位置参数   echo "Usage:$0 filepath"   exit fi while read -r line  #从文件中读取文件内容赋值给line(选项-r会屏蔽文本中的特殊符号,只做输出不做转译) do    echo $line done < $file

    case条件 以run.sh脚本第一个参数为例,当第一个参数为start时,调用startup方法,当第一个参数为stop时,调用shutdown方法... case $1 in     start)        startup      ;;     stop)        shutdown      ;;     restart)        shutdown        startup     ;; esac          =================================================================

    当执行shell命令时,会默认打开3个文件,每个文件有对应的文件描述符来方便我们 类型      文件描述符    默认情况                对应文件句柄位置 标准输入  0                从键盘获得输入            /proc/slef/fd/0 标准输出  1                输出到屏幕(即控制台)    /proc/slef/fd/1 错误输出  2                输出到屏幕(即控制台)    /proc/slef/fd/2

    执行shell命令都默认是从键盘获得输入,将结果输出到控制台上。但可通过更改文件描述符默认指向,将输入输出的重定向。 使用>或者>>对输出进行重定向。符号的左边表示文件描述符,如果没有的话表示1,也就是标准输出,例如: 将原本在屏幕打印的内容重定向写入到test.txt文件 echo "hello" >test.txt 等价于 echo "hello" 1>test.txt echo "hello" >>test.txt 等价于 echo "hello" 1>>test.txt

    >或>>右边可以是一个文件,也可以是一个输出设备。 当使用>时,直接创建新文件(若存在则先删除)。 当使用>>时,表示追加内容到文件,则不会删除原来已存在的文件。

    echo 'aaa' >/dev/null 2>&1。这条命令实际分为两命令,1>/dev/null 和 2>&1 1>/dev/null 该命令作用是将标准输出1重定向到linux空设备文件/dev/null文件中(所有往/dev/null文件写入的内容都会丢失,俗称“黑洞”)。 执行了>/dev/null后,标准输出就不再存在,没有任何地方能够找到输出的内容。 2>&1 &表示将错误输出2和标准输出1输出到相同的地方,相当于echo 'aaa' 1>/dev/null 2>/dev/null,这样该命令不会输出任何信息到屏幕和文件。

    对换位置会产生不同结果 命令             标准输出    错误输出 >/dev/null 2>&1     丢弃        丢弃 2>&1 >/dev/null     丢弃        屏幕

    注意: 不应echo 'aaa' 1>/dev/null 2>/dev/null,因为这样写会导致标准输出和错误输出打开两次/dev/null文件,会抢占向文件写入的管道,导致输出 内容出现缺失和覆盖等,或出现乱码,或只有错误内容或标准内容。而>/dev/null 2>&1只会打开一次/dev/null文件,IO效率较高。

    nohup结合 经常会用nohup command &命令形式来启动一些后台程序,例如:nohup java -jar xxxx.jar & 为了不让一些执行信息输出到前台(控制台),我们还可加上>/dev/null 2>&1丢弃所有输出:nohup java -jar xxxx.jar >/dev/null 2>&1 &

    ===========================================================================

    SSH保活 SSH连接Linux时,若几分钟没操作,连接就会断开,解决办法: vi /etc/ssh/sshd_config ClientAliveInterval 60     #每60秒发送一次保活请求 ClientAliveCountMax 3   #保活请求没响应的情况下最多重试3次,超过该数次数后则断开ssh连接

    lsof -i:8080    #查看使用8080端口的进程

    kill -9 23719            --强制杀死id等于23719的resin进程

    设置用户可以使用的资源限制 [root@yussion psinfo]# ulimit -a            --显示用户可以使用的资源限制 [root@yussion psinfo]# ulimit -n 4096    --设置用户可同时打开的最大文件数,防止too many open files错误 [root@yussion psinfo]# ulimit -u 77824   --设置用户可以同时运行的最大进程数(max user processes) [root@yussion psinfo]# ulimit -n            --查看单个用户能打开的最大文件数(socket连接也算在里面),系统默认值1024

    服务器上信息相关统计 [root@yussion html]# du -h stuff                                         --察看stuff文件夹文件所占空间 [root@yussion html]# find ./stuff -type f | wc -l                      --察看stuff文件夹文件个数 [root@yussion html]# find ./stuff/ -name 'view*'-type f | wc -l   --在stuff目录下找出以“view”开头的文件,-name按文件名筛选

    显示各分区的信息 [oracle@yussion ~]$ df -k  --以千字节KB为单位显示各分区的信息; df -a显示所有分区 Filesystem           1K-blocks      Used      Available     Use%  Mounted on /dev/sda1             49696084      30402920  16727988     65%   / /dev/sda3             39775804      1226256   36496444     4%    /home [root@yussion bin]# vmstat    --显示当前的内存使用情况 [root@yussion bin]# top         --动态统计当前用户所有进程占用内存和cpu情况,按1显示每个cpu使用情况,按ctrl+c退出统计

    网络连接、端口监控和统计 [root@yussion biserver]# netstat -tlnp|grep port                -- Linux下查看占用端口的进程 [root@yussion biserver]# netstat -nat|grep -i "80"|wc -l      --统计80端口连接数 [root@yussion biserver]# ps -ef|grep httpd|wc -l                --统计httpd协议连接数 [root@yussion biserver]# netstat -na|grep ESTABLISHED|wc -l   --统计已连接上的,状态为“established'  [root@yussion bin]# netstat -p                                             --显示网络状况,使用参数p可以查看对应的进程号及程序名 [root@yussion bin]# netstat -an | grep ESTABLISHED           --查看服务器已建立的连接 [root@yussion bin]# netstat -an | grep LISTEN                      --查看服务器侦听情况

    设置系统linux最大打开文件(网络连接)数(针对Too many open files问题) [root@yussion psinfo]# lsof                                       --显示系统当前打开的文件列表,包括建立的socket连接等 [root@yussion psinfo]# lsof -p 390 | wc -l                   --通过lsof -p [进程的pid]来查看指定进程打开的文件资源数 [root@yussion psinfo]# sysctl -w fs.file-max=372158  --设置系统允许同时打开的最大文件数

     

    Processed: 0.015, SQL: 9