find $dir -maxdepth 1 -type d -mtime 365
硬连接和软连接的区别
硬连接
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
rsync -aR /data/att/dir1 data1/att/dir1
mian()
{
代码
}
main &> /tmp/move_log_`data +%F`.log
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 {} \;
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
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`
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
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"
}
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
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
linux中错误输出
echo "ERROR 请带上用户名字,例如sh $0 username" >&2
ls labac 2> /dev/null
echo -e参数可以在输出的内容中换行,如果不加-e,那么\n则会正常输出。
echo -e "$name\n$password" >> /etc/login.txt