Linux Shell 学习笔记(二) 命令
来源:互联网 发布:双向数据绑定 编辑:程序博客网 时间:2024/06/05 06:15
Linux Shell 学习笔记(二) 命令
环境: Centos 7 bash
本博文介绍Linux中经常使用的命令
1. cat命令
cat file1 file2 .. file3#将多个文件的内容输出到stdout
cat命令不仅可以将文件内容输出到stdout,还可以将stdin中获得输入进行输出
echo "this is form stdin" | cat - fileName# - 用来指代stdin
cat 压缩空白行 cat -s fileName
cat 标记行号 cat -n fileName
2. 录制与回放终端会话
2.1 script命令
# 开始录制命令script -t 2>timing.log -a output.session-t 将时序信息输出到stderr2>timming.log 将stderr重定向到timming.log-a output.session 将命令输出存储到output.session#接下来所有的终端输入输出都会被记录在上述两个文件中,直至用户输入exit结束录制
2.2 scriptreplay
scriptreplay timming.log ouput.session # 输出录制的终端活动
3. 文件查找与文件列表 find命令
# 列出目录及子目录中的所有文件和文件夹find pathVar 默认使用参数 -printfind pathVar -print 多行输出find pathVar -print0 单行输出# 根据文件名/正则查找文件find pathVar -name "*.txt" -printfind pathVar -iname "*.txt" -print # 在查找试忽略文件名参数的大小写# 使用多个查找条件find pathVar \( -name "*.txt" -o -name "*.sh" \) -print# 匹配路径find pathVar -path "*mn" -print#将匹配pathVar目录下路径或文件命中含有mn的所有文件# 正则表达式find pathVar -regex ".*" # 匹配所有无内件和文件夹find pathVar -regex ".*\.sh" # 匹配shell脚本# 否定find pathVar ! -name "*.txt" # 匹配目录下所有非txt的文件# 搜索目录深度-maxdepth #搜索结束目录层数-mindepth #搜索起始目录层数# 指定搜索文件类型-type typeVar参数: d 目录 f 普通文件 c 字符设备文件 b 块设备文件 l 符号链接 s 套接字 p FIFO# 根据文件时间进行搜索linux文件有三个时间戳-访问时间(-atime) 文件最近一次被访问的时间戳-修改时间(-mtime) 文件最近一次被修改的时间戳-变化时间(-ctime) 文件元数据(权限所有权等)改变的时间 find . -type f -atime 7 -print # 恰好在7天前被访问过的文件find . -type f -atime -7 -print # 在7天内被访问过的文件find . -tyoe f -atime +7 -print # 超过7天被访问过的文件'-7' 代表小于7'+7' 代表大于7上面的三个参数都是以天为单位,还有一分钟为单位的,-amin(访问时间),-mmin(修改时间), -cmin(变化时间)# 基于文件大小的搜索-size sizeNumfind . -type f -size -2k # 查找小于2kb的普通文件find . -type f -size +2k # 查找大于2kb的普通文件除了以k为单位,还有(b--块512字节),(c--字节),(w--字),(k--千字节)# 基于文件权限的搜索find . -type f -perm 644 -ptint# 基于文件所有用户搜索find . -type -user root -print# 基于查找结果执行命令或动作-exec command {} \;{} 对应每一个匹配的文件名,或者说是执行command命令的文件集其他为固定格式command只能是一条命令,但是我们可以把命令集写入到sheell脚本中,然后执行这个脚本文件,打到可以执行多条命令的目的# 跳过搜索# 对于不想搜索的目录,如.git,可以跳过 find /home -path /home/sep -prune -o -name "tmp.txt" -print
4. xargs
管道只能提供简单的输入输出流重定向,对于命令参数的调用,就无能为力。xargs可以将输入数据装化为命令行参数
example.txt文件内容:1 2 3 4 5 611 12 13 # 将文本单行输出 cat example.txt | xargs # 将'\n' 替换为 ” “# 将文本格式化输出cat example.txt | xargs -n 3 # 默认定界符 空格# 指定定界符 分割参数echo "ShellXShellXShell" | xargs -d X####输出 Shell Shell Shell
xargs重复执行命令
args.txt文件内容
arg1
arg2
arg3
myEecho.sh内容#!/bin/bashecho $*# 输出脚本接收到的参数# 将args.txt中的三个参数,依次传递给myEcho.sh脚本cat args.txt | xargs -n 1 ./myEcho.sh# 应对 ./myEcho.sh -p arg1 1 的命令格式,参数只有arg1是可变的# xargs有参数-I提供对上面命令格式的支持cat args.txt | xargs -I {} ./myEcho.sh -p {} 1-I {} 定义替换符:用args.txt里的内容替换./myEcho.sh -p {} 1中的{}
5. tr
tr(reanslate)可以将标准输入进行替换、删除以及压缩
# 替换# tr srcCharSet dstCharSetecho "THIS IS MY WORDS" | tr 'A-Z' 'a-z'# 简单加密echo "24354673" | tr '0-9' '8967452301'###输出 64754237# 删除echo "AAAAAAAAbbAAAbbbAAAAb" | tr -d 'b' ###输出 AAAAAAAAAAAAAAA# 补集-C set将得到set集合的补集echo hello 123 world | tr -d -C '0-9'###输出 123# 压缩字符通常情况下,删除多余的空行空格echo "AA BB CC " | tr -s " "输出 AA BB CC
6. 小综合
6.1 xargs+find
# 删除文件find . -type f -name "*.txt" -print | xargs rm -f#上文未指定定界符,可能会造成误删#正确的做法find . -type -f -name "*.txt" -print0 | xargs -0 rm -f-0 参数指定定界符为"\0"
6.2 while+(子shell)
cat args.txt | (while read arg;do statements; done)将args.txt中的行内容分配到子进程中;子进程可以对参数执行多条命令
7. 校验和与核实
校验和一般用于网络数据传输
校验和技术:md5sum sha1sum
# md5sum使用md5sum fileName## 输出: 96cf433c1d760bb1d59e486b4207e22f fileName# 输出重定向md5sum fileName > md5Result.md5# md5sum验证md5sum -c md5Result.md5# sha1sum用法与md5sum相同#只是注意 sha1sum的结果保存在.sha1为后缀的文件中# 对于目录的检验和计算可以使用sha1deep和md5deep实现
8. 排序、单一与重复
sort命令可以帮助我们对文本文件和stdin进行排序操作
uniq命令可以从文本文件或stdin中提取一行
8.1 sort命令
# sort命令使用sort file1 ... file2 > sortResult.txt## 将多个文件中的每一行进行排序,结果是有序的包含所有文件内容的文件# 找出已排序文件中不重复的行cat sortResult.txt | uniq > uniqResult.txt# 按照数字顺序进行排序sort -n fileName# 逆序排序sort -r fileName# 按照月份进行排序sort -M fileName# 判断文件是否被排序过sort -C fileNameecho $? # 输出 0,则文件被排序过# 依据键或者列进行排序文件example.txt内容1 mac 10002 linux 40003 winxp 3000# 以第一列逆序排序sort -rk 1 example.txt# 指定键的起始和终结位置(应对键与键之间没有空格分隔的情况)sort -k 2,4 example.txt# 2,4指定键的起始位置和终结位置# 使sort的输出的结束符为‘\0’ 与xargs命令兼容sort -z example.txt | xargs -0# 其他参数-b # 忽略空格等不必要的字符-d # 以字典序排序
8.2 uniq命令
uniq只能以排序过的数据为输入
# 对重复行只做一次输出sort fileName | uniq uniq sortedFile# 输出只出现过一次的行sort fileName | uniq -uuniq -u sortedFile# 统计各行出现的次数sort fileName | uniq -cuniq -c sortedFile# 输出出现多次的行uniq -d sortedFileuniq -s 2 -w 5 sortedFile## -s 指定 跳过每行多个字符## -w 指定 最大的比较字符数### 上面的命令说明 从每行的第三个字符开始比较,最多比较5个字符到第8个字符# 输出以‘\0’为行终结符的数据 兼容xargs命令uniq -z sortedFile
9. 临时文件命名与随机数
在编写脚本时,我们需要储存许多临时变量,最好将临时数据储存在/tmp下,该目录下的内容将在下次系统启动时被删除
temp_file = "/tmp/var.$$"$$会被理解为当前运行脚本的进程ID
9.1 文件分割
# 生成测试文件dd if=/dev/zero bs=100k count=1 of=data.file### 创建大小为100kb,内容全部是0填充的文件# 分割split -b 10K file.data### 分割后的文件名会有一个字母作为后缀,如果想使用数字作为后缀,使用参数-d指定参数 -a length指定后缀长度split命令的最后一个参数可以指定文件的前缀# 根据文件的行数分割split -l 10 file.data### 分割后的每个文件中只有原文件的10行内容
9.1.1 csplit
csplit可以依据指定的条件和字符串匹配对log文件进行分割csplit server.log /SERVER/ -n 2 -s {*} -f server -b "%02d.log"/SERVER/用来匹配某一行,分割从此行开始{*} 根据匹配循环执行分割,直至文件末-s 静默模式,不打印其他信息-f server 指定文件名前缀-b "%02d.log" 指定文件后缀名格式
9.2 根据扩展名切分文件名
借助操作符 % 可以轻松的将名称部分从”名称.扩展名”中提取出来
#脚本实现file_name="sample.jpg"name=${file_name%.*}echo $name
借助操作符 # 可将扩展名从”名称.扩展名”中提取出来
#脚本实现file_name="sample.jpg"name=${file_name#*。}echo $name
实现原理
name=${file_name%.*}
${file_name%.}的语义是删除占位符%右侧的通配符(.)所匹配的字符串,通配符自右向左匹配
% 非贪婪匹配,匹配到字符串即结束,自右向左进行匹配
%% 贪婪匹配,匹配最长的字符串,自右向左进行匹配
# ##与% %%相似,匹配自左向右进行
10. 批量重命名和移动
find rename mv三个命令灵活使用
#示例脚本count=1for img in *.jpg *.pngdonew=image-$count.${img##*.}mv "$img" "$new" 2 > /dev/nullif [$? -eq 0];then echo "renaming $img to $new"let count++fidone
11. 交互式输入自动化
# 命令脚本#! /bin/bash#fileName script.shread -p "input a number" numb;read -p "input a word" myword;echo $numb " " $myword
执行上述脚步,我们要依次输入一个数字和一个单词。bash以一个换行符为输入结束标志。那么我们可以通过echo实现自动化输入
echo -e "1\nmyWord\n" | ./script.sh## -e参数 指定生成输入序列
如果需要输出的参数过多或者过长,可以将参数写入文件,再将数据从文件传递到命令
echo -e "1\nmyWord\n" > arg.data./script.sh < arg.data
11.1 expect命令
该命令需要安装
#!/usr/bin/expect# fileName "s.sh"spawn ./script.shexpect "number"send "1\n"expect "word"send "ssss\n"expect eof# 注意 #!/usr/bin/expect# spawn 指定要自动化执行的脚本# expect "number" send参数以前,要等待的消息# send "1\n" 要发送的消息,注意换行符# expect eof 交互命令结束
- 【Linux学习笔记二】Shell基本命令
- Linux Shell 学习笔记(二) 命令
- linux shell脚本学习笔记二 使用结构化命令
- Linux Shell学习笔记二
- Linux Shell学习笔记(二)
- Linux Shell 学习笔记(二)
- Linux Shell 学习笔记(二)
- linux命令学习笔记二
- Linux学习笔记-shell命令[转帖]
- Linux学习笔记-shell命令[转帖]
- linux的shell命令学习笔记
- Linux shell命令脚本学习笔记
- Linux命令学习笔记(更新:shell调试)
- Linux学习笔记3 常用shell命令
- linux shell 脚本命令学习笔记
- linux shell学习笔记(二)
- Linux系统命令及Shell脚本学习笔记二:用户管理
- 【Linux】Linux命令学习(笔记二)
- 断点续传更新版
- 内核编程:驱动之学习笔记
- maven中pow项目找到jar项目中的配置文件
- H5下上传图片预览
- 实验7、矩阵的2种转置运算 (4学时)
- Linux Shell 学习笔记(二) 命令
- Maven私服Nexus搭建&应用
- 4.C语言(1)
- 使用OKhttp的封装类 进行本地相册或拍照的图片上传显示
- 前端笔记
- 理解Java Spring核心功能之一:控制反转容器(IOC Container)
- 用Java提供的工具类对一个字符串进行加密
- HDU 3853 LOOPS【期望DP】
- 99乘法表