CAT
cat本身表示concatenate(拼接)
cat file1 file2 file3 ...
将标准输入与另外一个文件数据结合在一起
echo 'Text through stdin' | cat - file.txt
摆脱多余的空白行
cat -s file.txt
将制表符显示为^|
cat -t file.txt
显示行号,如果要跳过空白行使用-b
cat -n file.txt
cat -nb file.txt 跳过空白行
FIND
打印文件和目录的列表
find . -print
find -name
find -iname 忽略大小写
如果匹配多个条件,使用OR
find . \(-name "*.txt" -o -name "*.pdf" \) -print ???????????????
匹配多个文件类型
find . -regex ".*\(\.pdf\|\.txt\)$"
排除某些类型
find . ! -name "*.txt" -print
基于目录深度的搜索
find . -maxdepth 1 -name "f*" -print 指定深度以内的
find . -mindepth 2 -name "f*“ -print 指定目的深度,排除一些
-maxdepth - mindeptch 作为第三个参数出现,如果作为第四个参数,效率会降低
根据文件类型进行搜索
find . -type d -print 目录
find . -type f -print 普通文件
find . -type l -print 符号链接
c 字符设备
b 块设备
s 套接字
p FIFO
根据文件时间进行搜索
UNIX/Linux文件系统中的每一个文件都有三种时间戳
访问时间(-atime): 用户最近一次访问的时间
修改时间(-mtime): 文件内容最后一次呗修改的时间
变化时间(-ctime): 文件元数据(例如权限或所有权)最后一次改变的时间
单位是天,这些整数通常还带有-或+:-表示小于,+表示大于。
打印最近7天内被访问的所有文件
find . -type f -atime -7 -print
打印出恰好在7天前被访问过的所有文件
find . -type f -atime 7 -print
打印出访问时间超过7天的所有文件
find . -type f -atime +7 -print
单位时间为分钟的
-amin (访问时间)
-mmin (修改时间)
-cmin (变化时间)
find 另一个漂亮的特性是-newer参数,使用它可以比较时间戳比参考文件更新的所有文件
find . -type f -newer file.txt -print
基于文件大小的搜索
大于2k
find . -type f -size +2k
小于2k
find . -type f -size -2k
大小等于2k的文件
find . -type f -size 2k
除k之外,还有其他文件大小单元
b -块 512字节
c 字节
w 字 2字节
k 1024字节
M 1024k
G 1024M
删除所有匹配文件
find . -type f -name "*.swp" -delete
基于文件权限和所有权的匹配
find . -type f -perm 644 -print
打印没有设置好知执行权限的文件
find . -type f -name "*.php" ! -perm 644 -print
打印用户拥有的文件
find . -type f -user slynux -print
find借助-exec,执行其他命令
修改权限
find . -type f -user root -exec chown slynux {} \;all_files.txt
将10天前的.txt文件复制到OLD目录中
find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;
-exec 结合多个命令
-exec是单个命令的,不过可以使用一个shell脚本
-exec ./commands.sh {] \;
让find跳过特定的目录
find . \(-type -print \(-name ".git" -prune \) -o \( -type f -print\)
ARGS
一行显示参数
cat *.txt | xargs
每行3个参数
cat *.txt | xargs -n 3
使用定界符分割
echo "splixXsplixXsplixXsplix" | xargs -d X
echo "splixXsplixXsplixXsplix" | xargs -d X -n 2
TR
用tr进行转换
tr可以对来自标准输入的内容进行字符替换,字符删除,重复字符压缩,因而通常称为转换命令。
将输入字符由大写转换为小写
echo "HELLO WHO IS THIS" | tr 'A-Z' 'a-z'
tr替换
加密
echo 12345 | tr '0-9' '9876543210'
解密
echo 87654 | tr '9876543210' '0-9'
tr删除字符
echo "Hello 123 world 456" | tr -d '0-9'
字符集补集
echo hello 1 char 2 next 4 | tr -d -c '0-9 \n'
用tr压缩字符
echo "GNU is not UNIX. Recursive right ?" | tr -s ' '
字符类
alnum : 字母和数字
alpha : 字母
cntrl : 控制字符
digit : 数字
graph : 图形字符
lower : 小写字母
print : 可打印字符
punct : 标号符号
space : 空白字符
upper : 大写字母
xdigit : 十六进制字符
可以按照下面的方式选择并使用所需的字符类。
tr [:class:] [:class:]
例如
tr '[:lower:]' '[:upper:]'
校验和与核实
md5sum filename
多个
md5sum file1 file2 file3 ...
验证
md5sum filename > file_sum.md5
md5sum -c file_sum.md5
md5sum -c *.md5
对目录进行校验和
md5deep -rl directory_path > directory.md5
-r使用递归的方式
-l使用相对路径。默认情况下,md5deep会输出文件的绝对路径。
用下面的命令进行核实
md5sum -c directory.md5
加密工具与散列
crypt,gpg,base64,md5sum,sha1sum以及openssl的用法。
gpg -c filename 读取口令加密文件
gpg filename.gpg 读取口令,然后对文件进行解密
将文件编码为Base64格式
base64 filename > outputfile
或者
cat file | base64 > outputfile
解码Base64数据
base64 -d file > outputfile
或者
cat base64_file | base64 -d > outputfile
临时文件命令与随机数
创建临时文件
filename=`mktemp`
echo $filename
创建临时目录
dirname=`mktemp -d`
echo $dirname
只生成目录或文件名,不产生文件
tempfile=`mktemp -u`
echo $tempfile
根据模板创建临时文件名
mktemp test.XXX
分割文件和数据
split -b 10k data.file 按块10k分割文件
split -b 10k data.file -d -a 4 以后缀为4位数字,-d 数字后缀 -a 表示长度
split -b 10k data.file -d -a 4 split_file split_file前缀
用行数来分割
split -l 10 data.file 分割多个文件,每个文件包含10行
csplit工具
是split工具的一个变体,split只能根据数据大小或行数来分割文件,而csplit可以根据
文本自身的特点进行分割。
SERVER-1
XXXXXXXXXX
SERVER-2
XXXXXXXXXX
SERVER-3
XXXXXXXXXX
csplit 1.txt /SERVER/ -n 2 -s {*} -f server -b "%02d.log" ; rm server00.log
/SERVER/ 用来匹配某一行,分割过程即从此处开始
{*} 表示根据匹配重复执行分割,直到文件末尾为止。可以用{整数}的形式来指定分割执行的次数。
-s 使命令进入静默模式,不打印其他信息
-n指定分割后的文件名后缀的数字个数,例如01,02,03等。
-f 指定分割后的文件前缀(在上面的例子中,server就是前缀)
-b 指定后缀格式。例如%02d.log,类似于C语言中的printf的参数格式。在这里
文件名=前缀+后缀=server + %02d.log
因为分割后的第一个文件没有任何内容(匹配的单词就位于文件的第一行中),所以我们删除了server00.log