文件管理
1 创建
1.1 创建两个空文件
touch file1 file2
1.2 递归式创建一些嵌套目录
mkdir -pv /tmp/xxs/dsd/efd
1.3 复制文件或者目录
cp -av 原文件或原目录 新文件或新目录
2 查看
2.1 一屏查看文件内容
cat 文件名
2.2 不显示以#开头的行
cat /etc/vsftpd.conf |grep -v ^#
2.3 分页查看文件内容
more 文件名
2.4 可控分页查看文件内容
less 文件名
2.5 带行号显示文件的内容
nl 文件名 cat -n 文件名
2.6 根据字符串匹配来查看文件部分内容
grep 字符串 文件名
2.7 回当前用户的宿主目录
cd ~ # 或者更简单的 cd
2.8 回到上一次的目录
cd -
2.9 查看当前所在目录的绝对路经
pwd
2.10 列出当前目录下的所有文件,包括以.开头的隐含文件
ls -a
2.11 查看文件类型
file filename
2.12 显示xxx文件倒数6行的内容
tail -6 xxx
2.13 查看文件中间的第五行(含)到第10行(含)的内容
sed -n '5,10p' /var/log/apache2/access.log
2.14 查看当前目录的子目录
ls -d */ 或 echo */
2.15 将当前目录下最近2小时到8小时之内的文件显示出来
find . -mmin +120 -mmin -480 -exec more {} \;
3 修改
3.1 去除文件中的行号
cut -c 5- a.py
3.2 删除文件中的重复行
cat file.txt |sort -u
3.3 显示包含或者不包含字符串的文件名
grep -l -r 字符串 路径 #显示内容包含字符串的文件名 grep -L -r 字符串 路径 #显示内容不包含字符串的文件名 find . -path './cache' -prune -o -name "*.php" -exec grep -l "date_cache[$format]['lang']" {} \; #显示当前目录下不包含cache目录的所有含有“date_cache[$format]['lang']”字符串的php文件。 find . -type f -name \*.php -exec grep -l "info" {} \;
3.4 获得文件的后缀名
echo xxx.xxx.rmvb |sed 's/.*\(\..*$\)/\1/'
3.5 去除文件的后缀名
echo xxx.xxx.rmvb |sed 's/\(.*\)\..*$/\1/'
3.6 移动路径下的文件并改名
mv 路径/文件 /新路径/新文件名
3.7 把所有文件的後辍由rm改为rmvb
rename 's/.rm$/.rmvb/' *
3.8 把所有文件名中的大写改为小写
rename 'tr/A-Z/a-z/' *
3.9 去掉文件中的^M
#注意不要使用同样的文件名,会清空掉原文件 cat filename | tr -d "^M" > newfile; 或者 sed -e "s/^M//g" filename > newfile; 或者 ex "+:%s/[Ctrl+V][Enter]//g" "+:wq" filename #直接修改文件
3.10 合并多个pdf文件到一个pdf文件
#apt-get install gs pdftk gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=output.pdf -dBATCH input1.pdf input2.pdf
3.11 批量修改文件和目录的权限
批量修改src目录下所有文件的权限为644:
find src -type f -exec chmod 644 {} \;
批量修改src目录下的所有子目录的权限为755:
find src -type d -exec chmod 755 {} \;
4 删除
4.1 递归式删除嵌套目录
rm -fr /tmp/xxs
4.2 删除特殊文件名的文件,如文件名:–help.txt
rm -- --help.txt 或者 rm ./--help.txt
4.3 删除当前目录里面所有的 .svn 目录
find . -name .svn -type d -exec rm -fr {} \;
4.4 删除当前目录所有以“~”结尾的临时文件
find . -name "*~" -exec rm {} \;
5 查找
5.1 快速查找某个文件
whereis filename find 目录 -name 文件名 locate 文件名 # 注意,为了得到更好的效果,运行前可以更新下数据库,运行 sudo updatedb 即可,但这个命令每隔一段时间会自动运行,所以不用太在意
5.2 查找不以java和xml结尾,并7天没有使用的文件删除掉
find . ! -name *.java ! -name ‘*.xml’ -atime +7 -exec rm {} \;
5.3 查找目录下所有有包含abcd文字的文本文件,并替换为xyz
grep -rIl "abcd" ./* --color=never | xargs sed -i "s/abcd/xyz/g" #注意grep的一个参数是大写的i,一个参数是小写的L
6 比较
6.1 对比两个文件之间的差异
diff file1 file2
6.2 比较两个目录里面的文件是否有相同
diff -r dir1 dir2
7 统计
7.1 统计当前文件个数
ls /usr/bin|wc -w
7.2 统计最常用的10条命令
history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10
7.3 统计每个单词的出现频率,并排序
awk '{arr[$1]+=1 }END{for(i in arr){print arr[i]"\t"i}}' FILE_NAME | sort -rn
7.4 统计80端口的连接个数并按照从大到小排列
netstat -na|grep :80|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n
8 校验
8.1 MD5校验
md5 filetohashA.txt
8.2 将MD5的值写入文件
md5sum filetohashA.txt > hash.md5 % 创建hash.md5文件并添加filetohashA.txt的md5值 md5sum filetohashB.txt >> hash.md5 % 往hash.md5文件里添加filetohashB.txt的md5值