linux shell 随笔
diff,rsync
diff会对每个文件中的每一行都做比较,所以文件较多或者文件较大的时候会非常慢。
sort进行排序
rsync数据同步
run:
#my shell
ls -la n1|sort
ls -la n2|sort
find n1 -printf "%P\n" | sort > file1
find n2 -printf "%P\n" | sort | diff file1 -
result:
>
./a.sh
drwxrwxr-x 2 zz zz 4096 Jun 7 18:16 .
drwxrwxr-x 4 zz zz 4096 Jun 7 21:27 ..
-rw-rw-r– 1 zz zz 1069645 Jun 7 18:16 Python.docx
-rw-rw-r– 1 zz zz 1563846 Jun 7 18:16 xxLinux server.docx
-rwxrw-r– 1 zz zz 14168 Jun 7 18:16 Linux shell总结.docx
-rwxrw-r– 1 zz zz 18588 Jun 7 18:16 鸟哥的Linux私房菜.docx
-rwxrw-r– 1 zz zz 246381 Jun 7 18:16 鸟哥的Linux私房菜.pdf
-rwxrw-r– 1 zz zz 2482257 Jun 7 18:16 Linux server.docx
-rwxrw-r– 1 zz zz 3191299 Jun 7 18:16 linux_server.zip
-rwxrw-r– 1 zz zz 3355734 Jun 7 18:16 qt5_summary.zip
-rwxrw-r– 1 zz zz 3879281 Jun 7 18:16 qt blog.zip
-rwxrw-r– 1 zz zz 452501 Jun 7 18:16 Qt 模块讲解.zip
-rwxrw-r– 1 zz zz 609470 Jun 7 18:16 c++ primer.pdf
-rwxrw-r– 1 zz zz 767165 Jun 7 18:16 Linux server.pdf
-rwxrw-r– 1 zz zz 78653 Jun 7 18:16 c++ primer.docx
total 17356
drwxrwxr-x 2 zz zz 4096 Jun 7 18:21 .
drwxrwxr-x 4 zz zz 4096 Jun 7 21:27 ..
-rw-rw-r– 1 zz zz 1069645 Jun 7 18:16 Python.docx
-rw-rw-r– 1 zz zz 1563846 Jun 7 18:16 xxLinux server.docx
-rwxrw-r– 1 zz zz 14168 Jun 7 18:16 Linux shell总结.docx
-rwxrw-r– 1 zz zz 2482257 Jun 7 18:16 Linux server.docx
-rwxrw-r– 1 zz zz 3191299 Jun 7 18:16 linux_server.zip
-rwxrw-r– 1 zz zz 3355734 Jun 7 18:16 qt5_summary.zip
-rwxrw-r– 1 zz zz 3879281 Jun 7 18:16 qt blog.zip
-rwxrw-r– 1 zz zz 452501 Jun 7 18:16 Qt 模块讲解.zip
-rwxrw-r– 1 zz zz 609470 Jun 7 18:16 c++ primer.pdf
-rwxrw-r– 1 zz zz 767165 Jun 7 18:16 Linux server.pdf
-rwxrw-r– 1 zz zz 78653 Jun 7 18:16 c++ primer.docx
total 17092
13,14d12
< 鸟哥的Linux私房菜.docx
< 鸟哥的Linux私房菜.pdf
*如果不想使用-printf,那么先进入各目录再find也行。
*将命令放进括号中执行是为了在子shell中切换目录,不用影响当前所在目录。(cd /home/zz) 下一句shell目录不变
sed
-e 可以执行多个正则
-p 打印出来
-n 显示script处理后的结果
-V 版本
sed命令
a\ 在当前行下面插入文本。
i\ 在当前行上面插入文本。
c\ 把选定的行改为新的文本。
d 删除,删除选择的行。
D 删除模板块的第一行。
s 替换指定字符
g 获得内存缓冲区的内容,并替代当前模板块中的文本。
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
p 打印模板块的行。
r file 从file中读行。
w file 写并追加模板块到file末尾。
W file 写并追加模板块的第一行到file末尾。
= 打印当前行号码。
\1 子串匹配标记
& 已匹配字符串标记
sed元字符集
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\< 匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行。
\> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。
x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。
x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。
cat file1
c++ primer.docx
c++ primer.pdf
Linux server.docx
Linux server.pdf
linux_server.zip
Linux shell总结.docx
Python.docx
qt5_summary.zip
qt blog.zip
Qt 模块讲解.zip
xxLinux server.docx
鸟哥的Linux私房菜.docx
鸟哥的Linux私房菜.pdf
sed -n 's/c++/c/p' file1#将file1中c++替换成c,-n,p只是输出变换的行
sed 's/c++/c/g' file1 #行所有的c++变成c
sed 's/c++/c/2g' file1 #行从第二个开始的c++变成c
sed '/^$/d' file1 #删除所有的空行
sed '2d' file1 #删除文件第二行
sed '2,$d' file1
sed '/^c++/' d file1 #删除c++开头的行
sed 's/c++/[&]/g' file1 #将成c++变成[c++]
sed 's/\(c++\) \([a-Z]*.\)\(docx\)/\3 \2 \1/' file1#将c++和docx的位置对换
sed "s/$var/nihao" file
sed -n '/c++/,/Linux/p' file1#打印c++和Linux之间的行
sed -n '1,/^Linux/p' file1#打印1到Linux的行
sed -n '/c++/,/Linux/s/$/nihao/p' file1
sed -e '1,5d' -e 's/test/check/' file
sed '/test/r file' file1
sed -n '/test/w file' example
sed '/^test/a\this is a test line' file#行下追加
sed '/^test/i\this is a test line' file#行上追加
sed -n 'p;n' test.txt #奇数行
日期
check_leap()
{
Y=`expr substr $1 1 4`
r1=`expr $Y % 4`
r2=`expr $Y % 100`:
r3=`expr $Y % 400`
if [ $r1 -eq 0 -a $r2 -ne 0 -o $r3 -eq 0 ]
then
FRUN="true"
else
FRUN="false"
fi
echo $FRUN
}
#-----------------------------------------------------------------
# 获取月份最大日期
#方法1
get_mon_days()
{
Y=`expr substr $1 1 4`
M=`expr substr $1 5 2`
case "$M" in
01|03|05|07|08|10|12) days=31;;
04|06|09|11) days=30;;
02)
_tmpStr=`check_leap "$Y"` #判断是否闰年
if [ "$_tmpStr" = "true" ] ; then
#闰年
days=29
else
days=28
fi
;;
*)
days=0
;;
esac
echo $days
}
#--
定时器crontab
文件/etc/crontab
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称。
minute hour day month week command 顺序:分 时 日 月 周
3,15 * * * * command//第三和15分钟执行一次
3,15 8-11 * * * command//8到11小时的第3和15分钟执行
3,15 8-11 */2 * * command//隔两天