linux命令积累

2023-12-09

1.查找指定目录下第二层目录,一年前的文件

find $dir -maxdepth 1 -type d -mtime 365

 2./data/att/dir1软连接到/data1/att/dir1

硬连接和软连接的区别

硬连接

ln file1 file2

1.硬连接不能对目录进行链接。

2.硬连接修改一个文件(不论修改哪方文件),另一个文件也会被修改。

3.不能对不同文件系统做硬连接。

4.所有的的硬连接具备相同的iNode节点号

软连接:

ln -s file1 file2

1.软连接相当于win的快捷方式,删除了源文件,链接文件就无法使用。

2.创建链接一定要用绝对路径,相对路径会找不到文件。

file1是源文件,file2是软连接名(可以随意定义)

3.给目录创建软连接

ln -s /tmp/kafka-log ~/zwh-log

pwd命令看到软连接目录路径

pwd -P命令看到软连接源文件路径

删除软连接

文件:

rm  -rf file1

目录:

注意:rm dir1,一定不要加-rf,这样不会把软连接删掉,而且会把实际目录的所有文件删掉!!!

ls -n /data/att/dir1 data1/att/dir1

3.rsync同步文件并同步创建目录

rsync -aR /data/att/dir1 data1/att/dir1

 4.shell脚本定义main函数,调用时输出到日志文件

mian()

{

        代码

}

main &> /tmp/move_log_`data +%F`.log

2023-12-10

1.查看文件权限命令

stat -c %a file1

2.查看文件所属用户权限

stat -c %U file1

3.查看文件所属组权限

stat -c %G file1

3.shell脚本中可以不用if直接进行的判断

例如:

判断如果dir1不是文件,则权限赋值成755
[ ! -f dir1 ] && chmod 755

4.shell脚本中&&接在判断后面,代表前面前面命令执行成功再执行后面命令,||代表前面命令执行失败则执行后面命令。

5.find .代表查找当前目录下所有目录和文件,可用于查找后做判断。

6.find查找文件并做判断

#find查找判断如果目录权限不是755,那么修改成755
find /data/wwwroot/app/ -type d ! -perm 755 -exec chmod 755 {} \;

#find查找判断如果不是目录,并且权限不是644,那么权限改成644
find /data/wwwroot/app/ ! -type d ! -perm 644 -exec chmod 644 {} \;

#find查找所有文件和目录,如果属主不是root,那么属主改成root
find /data/wwwroot/app/ ! -user -exec chown root {} \;

#find查找所有文件和目录,如果属组部署www,那么属主改成www
find /data/wwwroot/app/ ! -group www -exec chgrp www {} \;

2023-12-11

uptime                        #查看系统负载(1分钟,5分钟,15分钟)

cut -d',' -f1                #以逗号为分隔符取第一个

sed 's/ //g'                 #去掉空格

load=`uptime |awk -F "average" '{print $2}' |cut -d',' -f1 |sed 's/ //g' |cut -d'.' -f1`

top -bn1 > /data/log/top-`date +%s`.log                                        #top -bn1更新一批次立刻退出

vmstat 1 10 > /data/log/vmstat-`date +%s`.log                               #vmstat每间隔1s更新一次,更新十次

ss -an > /data/log/ss-`date +%s`.log                                              #ss查看所有套接字,不解析服务名

awk '{print $NF}'                                                                                #awk取最后一列字段

#删除35天前创建的以top,vmstat,ss开头的文件。

find /data/log \(-name "top*" -o -name "vmstat*" -o -name "ss*"\) -mtime +35 -exec rm -rf {} \;

查看端口的三个命令

netstat -tunlp |grep 3306

ss -tnlp |grep 3306

lsof -i :3306

2023-12-12

1.查找指定目录下5分钟内产生的文件

find /data/web/attachment -mmin -5 -type f > /tmp/newf.txt

2.判断文件内是否存在内容

if [ -s /tmp/newf.txt ];then

        cat /tmp/newf.txt > `date +%Y%m%d%H%M%S`.log

fi

3.shell脚本让用户输入,并赋值给a变量

read -p "请输入:" a

4.shell脚本中case语句的使用

while :
do
    case $a in
        1)
            date
            break
            ;;
        2)
            ls
            break
            ;;
        3)
            pwd
            break
            ;;
        *)
            echo "输入有误,请重新输入"
            continue
            ;;
    esac
done

5.wc -c用于统计输入字符串长度,sed -r用于结合正则表达式。

num=`echo $a |sed -r 's/[1-9]//g' |wc -c`

2023-12-14

curl --connect-time 3                #curl3秒没有相应就退出

curl -I                                        #只返回请求信息

2>/dev/null                                #返回的信息不打印

curl --connect-time 3 -I $1 2>/dev/null| grep 'HTTP' |awk '{print $2}'

if判断语句后面可以直接跟命令。

grep -E         #后面可以跟正则表达式

grep -q          #过滤的内容不输出 

if判断语句后面可以直接跟命令。

例如:

if echo $code |grep -Eq '2[0-9][0-9]|3[0-9][0-9]'
then
        echo "响应成功"
else
        echo "响应失败"
fi
if !which curl &> /dev/null
then
        yum install curl -y
        if [ $? neq 0 ];then
                echo "安装curl失败"
                exit 1
        fi
fi

2023-12-19

linux计算

$#代表shell脚本的参数个数。

if [ $# -ne 2 ];then
        echo "参数少于计算要求"
        exit 1
fi

grep -q过滤不打印 

if echo $# |grep -q '[^0-9]'
then
    exit 1
fi

linux中计算加减乘除可以用变量的形式

echo "$1 + $2 = $[$1+$2]"
echo "$1 - $2 = $[$1-$2]"
echo "$1 * $2 = $[$1*$2]"

bc计算器命令的应用

d = `echo "scale=2; $big/$small" |bc`

scale代表保留几位小数。

is_div()
{
        big=`is_max $1 $2`
        small=`is_min $1 $2`
        d=`echo "scale=2; $big/$small "|bc`
        echo "$big / $small = $d"
}

2023-12-21

1.shell脚本生成随机数$RANDOM

echo $RANDOM
number=$[$RANDOM%99+1]

2.awk语句中引用外面的变量 "-v"

 number=$[$RANDOM%99+1]
 nu=`awk -F ':' -v NUMBER=$number '$2==NUMBER' /tmp/name.log |wc -l`

3.shell脚本中函数引用函数

number=`create_number`

#!/bin/bash

create_number()
{
        while :
        do
                number=$[$RANDOM%99+1]
                nu=`awk -F ':' -v NUMBER=$number '$2==NUMBER' /tmp/name.log |wc -l`
                if [ $nu -gt 0 ];then
                        #echo "number already exits"
                        continue
                else
                        echo $number
                        break
                fi
        done
}

create_name()
{
        while :
        do
                read -p "please input your name: " name
                if [ ! -f '/tmp/name.log' ];then
                        number=$[$RANDOM%99+1]
                        echo "$name:$number" >> /tmp/name.log
                        break
                else
                        nu=`awk -F ':' -v NAME=$name '$1==NAME' /tmp/name.log |wc -l`
                        if [ $nu -gt 0 ];then
                                echo "name has already exits"
                                continue
                        else
                                number=`create_number`
                                echo "$name:$number" >> /tmp/name.log
                        fi
                fi
        done

}
create_name

2023-12-27

for + seq用法

#!/bin/bash

if [ -f 1.log.5];then
        rm -rf 1.log.5
fi

#从5到2倒顺遍历
for i in `seq 5 -1 2`
do
        if [ -f 1.log.$[$i-1] ];then
                mv 1.log.$[$i-1] 1.log.$i
        fi
done

touch 1.log.1

2024-01-04

linux中错误输出

echo "ERROR 请带上用户名字,例如sh $0 username" >&2

ls labac 2> /dev/null

 echo -e参数可以在输出的内容中换行,如果不加-e,那么\n则会正常输出。

echo -e "$name\n$password" >> /etc/login.txt

你可能感兴趣的:(linux,运维,服务器)