环回文件
环回文件系统是指那些在文件中而非物理设备中创建的文件系统.
- 在大小为1G的文件上创建ext4文件系统
- 用dd命令创建1G大小的文件
dd if=/dev/zero of=loopbackfile.img bs=1G count=1
:
- 用mkfs命令将loopbackfile.img文件格式化为ext4文件系统
mkfs.ext4 loopbackfile.img
:
- 用file命令来检查文件系统
file loopbackfile.img
:
- 用mount -o loop 命令来挂载环回文件
mount -o loop loopbackfile.img /mnt/loopback
:
- 用umount目录来卸载挂载
umount /mnt/loopback
:
- 用dd命令创建1G大小的文件
- 在大小为1G的文件上创建ext4文件系统
文件差异 diff
- 非一体化生成差异文件
diff file1 file2
:
- 一体化生成差异文件, 一体化输出可读性好
diff -u file1 file2
:
- 生成补丁文件,
diff -u file1 file2 > file.patch
:
- 修补文件patch
patch -p1 file1 < file.patch
:
- 撤销修补文件patch
patch -p1 file1 < file.patch
:
- 对目录生成差异文件
diff -Naur dir1 dir2 > dir.patch
,其中选项含义如下:
- N: 将所有缺失的文件视为空文件
- a: 将所有文件视为文本文件
- u: 生成一体化输出
- r: 遍历目录下的所有文件
- 非一体化生成差异文件
打印文件头部head
- 打印文件前num行:
head -n num file
- 打印文件除了最后M行:
head -n -M file
- 打印文件前num行:
打印文件尾部tail
- 打印文件最后num行:
tail -n num file
- 打印文件除前M行:
tail -n +(M+1) file
- 监视文件:
tail -f file
- 监视文件,直到某进程结束:
tail -f file --pid PID
- 打印文件最后num行:
pushd和popd进行快速定位
- pushd压入路径
pushd path
- dirs显示当前栈上路径
dirs
- pushd切换栈上路径,从0开始
pushd +0
- 删除栈上路径popd,删除最后添加的路径
popd
,删除栈上列表索引popd +num
- 如果只有2个路径来回切换可以使用cd
cd -
- pushd压入路径
统计文件的行数,单词数和字符树
- 统计行数:
wc -l file
cat file | wc -l
- 统计单词数:
wc -w file
cat file | wc -l
- 统计字符数:
wc-c file
cat file | wc -c
wc file
:分别打印文件的行数,单词数和字符数- -L选项打印最长一行的长度
- 统计行数:
打印目录树
- 打印目录树
tree path
:
- -P选项匹配符合文件
tree path -P "*.java"
:
- -I选项除符合匹配之外的文件
tree path -I "*.java"
:
- -h打印文件和目录大小
tree path -h
:
- -H以HTML形式输出目录树
tree path -H http:127.0.0.1 -o localhost.html
:
- 打印目录树
九.文本
正则表达式
正则表达式 描述 示例 ^ 行起始标记 ^java 匹配以java起始的行 |行尾标记|java 匹配以java结尾的行 . 匹配任意字符 java. 匹配java1和java2.但是不能匹配java12和java23,它只能匹配单个字符 [] 匹配包含在[字符]之中的任意一个字符 jav[a,e] 匹配java和jave [^] 匹配除[^字符]之外的任意一个字符 jav[^a,e] 匹配javc,但不能匹配java和jave [-] 匹配[]中指定范围内的任意一个字符 jav[1-5] 匹配jav1,但不能匹配jav6 ? 匹配之前的项1次或0次 jav?a 匹配java和jaa 但不能匹配javva + 匹配之前项1次或多次 java+ 匹配javaa, 但不能匹配java * 匹配之前项0次或多次 java* 匹配jav, java, javaa () 创建一个用于匹配的子串 j(av)?a 匹配ja或java {n} 匹配之前的项n次 [0-9]{3} 匹配任意一个3位数,[0-9]{3}可以扩展为[0-9][0-9][0-9] {n,} 匹配之前的项至少n次 [0-9]{2,} 匹配任意一个2位数或更多位数 {n,m} 指定之前的项所必须匹配的最小次数和最大次数 [0-9]{2,5} 匹配从2位数到5位数之间的任意一个数 交替,匹配 |转义符可以将上面介绍的特殊字符进行转义 a.b 匹配a.b而不是a1b, 忽略字符特殊含义 grep 在文件中搜索文本
- 搜索包含特定模式的文本行:
grep pattern file
- 在多个文件中搜索:
grep pattern file1 file2 ...
- -color 选项可以在输出行中着重标记出匹配到的单词:
grep pattern file --color=auto
- 使用正则表达式匹配:
grep -E "[a-z]+" falie
egrep "[a-z]+" file
- 只输出文件中匹配到的文本部分,使用选项-o:
grep -o "a" file
- 要打印除包含pattern行之外的所有行,使用选项-v:
grep -v "a" file
- 统计包含匹配的字符串的行数,使用选项-c:
grep -c "a" file
- 打印包含匹配串的行号,使用选项-n:
grep -n "a" file
- 递归搜索文件,使用选项-R:
grep "a" . -R -n
- 忽略大小写,使用选项-i:
grep -i "a" file
- 匹配多个模式:
grep -e "pattern1" -e "pattern2" file
- 搜索中指定文件,使用选项–include:
grep "a" . -r --include *.{c,cpp,h}
- 搜索中排除指定文件,使用选项–exclude:
grep "a" . -r -exculde "README"
- 搜索中排除指定目录,使用选项-exclude-dir:
grep "a" . -r -exculde-dir "log"
- 搜索中痞子蔡指定文件列表,使用选项-exclude-from:
grep "a" . -r -exclude-from "file1 file2"
- 搜索包含特定模式的文本行:
按列切分文件cut
- 提取特定的字段或列:
cut -f field_list file
- 按列号提取:
cut -f 1,2 file
将提取第1和第2行内容 - 补集运算,使用选项–complement:
cut -f 1 --complement file
将提取出第一行外的所有行 - 要指定字段的分界符,使用选项-d:
cut -f 1 -d";" file
- 提取特定的字段或列:
文本替换sed
- 替换给定文本中的字符串:
sed 's/pattern/replace_string/' file
- 默认情况下,sed只会打印替换后的文本.如果需要替换后需要同时保存更改,使用选项-i:
sed -i 's/pattern/replace_string/' file
- 全部替换参数g:
sed 's/pattern/replace_string/g' file
- 移除空白行:
sed '/^$/d' file
- 替换给定文本中的字符串:
高级文本处理awk
awk脚本的基本结构:
awk 'BEGIN{print "start"} pattern {commands} END{print "end"}' file
- 首先执行BEGIN{commands}语句块
- 从文件或stdin中读取一行,然后执行pattern{commands},重复这个过程直到文件全部读取完毕
- 当读直输入流末尾时,执行END{commands}语句块