文件与目录管理
文件
文件操作
# -a = -d -p -r
# -p 表示保留原文件的属性
# -d 如果源文件为软连接(对硬链接无效),则赋值出的目标文件也为软连接
# -r 递归赋值,用于赋值目录
# 拷贝当前目录下
cp -a ./ /projs/fabricTradingXdf/
# 查看文件时过滤掉注释行,将有效文字另存为文件 nginx.conf.bak
grep -vE "^\s*(#|$)" nginx.conf > nginx.conf.bak
# 查看文件最后100行
tail -n 100 文件名称
# 下面的命令表示在当前目录下同时创建两个文件
touch log1.log log2.log
# 检测文件是否存在,不存在则会报错
ls -l /usr/local/redis-5.0.14/src/redis-server
# 删除文件
rm -f 文件名称
# 执行文件,主要先给文件赋予可执行的权限:chmod +x 文件名称
./文件名称
# 复制文件
# cp 表示赋值文件, -p 表示保留原文件的属性
# -d 如果源文件为软连接(对硬链接无效),则赋值出的目标文件也为软连接
# -r 递归赋值,用于赋值目录
# -a 相当于 -d -p -r 选项的集合
cp -p frps.sh frps.sh.backup
# 查看文件状态
stat dump.rdb # 显示的内容如下:
File: ‘dump.rdb’
Size: 132 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 405713 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-12-13 19:48:00.931000000 +0800
Modify: 2022-12-07 16:08:36.619000000 +0800
Change: 2022-12-07 16:08:36.621000000 +0800
Birth: -
# 查找文件
# 下面的.表示在当前目录下查找(包括子目录)
# -name 表示按照文件名查找 - 不会查找文件的内容
# -iname 表示忽略大小写
# activation.jar 表示要查找的文件名
find . -iname activation.jar
# 表示模糊查找所有后缀是 dbf 的文件
find . -iname "*.dbf"
# 指定目录下递归查找文件
sudo find /etc -name \*.cnf
# 列出文件时显示可阅读的文件大小
ll -hl
# 查找大于指定容量的文件
# 第一种方法
ls -lh $(find / -type f -size +100M)
# 第二种方法
find / -type f -size +800M
# 查找最近修改的文件
find . -amin -10 # 查找在系统中最后10分钟访问的文件
find . -atime -2 # 查找在系统中最后48小时访问的文件
find . -empty # 查找在系统中为空的文件或者文件夹
find . -group cat # 查找在系统中属于 groupcat的文件
find . -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find . -mtime -1 #查找在1天以内修改过的文件
find . -mtime +7 #查找在7天以外修改过的文件
find . -nouser #查找在系统中属于作废用户的文件
find . -user fred #查找在系统中属于FRED这个用户的文件
find . -type -f # 查找文件类型为普通文件的文件
# 查看当前目录下文件详情
ls -lh
# 删除历史文件,在(./)当前目录下执行
# -mtime +5 表示最后一次修改时间在5天之前
# 查找后缀名是 .tmp 的最后修改时间在5天之前的所有文件,删除掉
find ./ -mtime +5 -name "*.tmp" -exec rm -rf {} \;
# windows与linux文件格式转换
# windows/dos 转换为 linux/unix
$ sed -e 's/.$//' mydos.txt > myunix.txt
# linux/unix 转换为 windows/dos
$ sed -e 's/$/\r/' myunix.txt > mydos.txt
文件内容
在文件内容中查找字符,通过 vi 打开文件处于命令状态(而非编辑状态)时候输入 / 然后输入要查找的字符再回车 按 N 键表示移动到下一个该关键字
# 清空文件内容
cat /dev/null > /projs/wxpadLogs/push.log
权限相关
# 设置指定目录下的所有文件为可读可写可执行
chmod -R 777 /var/www
# 取消文件可执行权限
chmod -R a-x /usr/lib/systemd/system/openvpn.service
vim
Vim 的常用快捷键可以概括为:移动光标、编辑文本、查找替换、保存退出等。以下是一些常用的快捷键:
光标移动:
h,j,k,l: 分别对应左、下、上、右四个方向的移动。w: 移动到下一个单词的开头。b: 移动到上一个单词的开头。0: 移动到行首。$: 移动到行尾。gg: 移动到文件开头。G: 移动到文件末尾。:+ 行号+G: 移动到指定行。H,M,L: 移动到屏幕顶部、中间和底部。
文本编辑:
i: 在当前光标位置前插入文本。a: 在当前光标位置后插入文本。o: 在当前行下方插入新行并进入插入模式。O: 在当前行上方插入新行并进入插入模式。x: 删除光标处的字符。dd: 删除当前行。yy: 复制当前行。p: 粘贴。u: 撤销。Ctrl + r: 重做。- 清除所有内容:通过
esc>:切换到命令状态后输入%d回车清除文件的所有内容
查找替换:
/+ 字符串: 向后搜索指定字符串。?+ 字符串: 向前搜索指定字符串。n: 查找下一个匹配项。N: 查找上一个匹配项。:%s/旧字符串/新字符串/g: 替换文件中所有匹配的旧字符串为新字符串。
保存退出:
:w: 保存文件。:wq或:x: 保存文件并退出。:q: 退出(如果文件有改动,需要先保存或使用!强制退出)。:q!: 强制退出,不保存修改。
其他常用操作:
Ctrl + v: 进入块选择模式,用于多行操作。:+set nu或set number: 显示行号。>>: 缩进当前行。<<: 取消当前行的缩进。J: 将下一行连接到当前行。:+!+ 命令: 执行shell命令(例如:! ls)。:tabnew 文件名: 在新标签页中打开文件。gt或:tabnext: 切换到下一个标签页。gT或:tabprevious: 切换到上一个标签页。:tabclose: 关闭当前标签页。
总结:
Vim 的快捷键繁多,但掌握了常用的这些,就能大大提高编辑效率。可以根据自己的需要,查阅相关资料,学习更多高级技巧
压缩与解压
rar
下载安装包
下载32位安装包 :wget http://www.rarsoft.com/rar/rarlinux-4.0.1.tar.gz
下载64位安装包 :wget http://www.rarlab.com/rar/rarlinux-x64-5.3.0.tar.gz
如果报错提示 ERROR: cannot verify www.rarlab.com's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:Issued certificate has expired.
则执行:wget http://www.rarlab.com/rar/rarlinux-x64-5.3.0.tar.gz --no-check-certificate
进行安装。
编译
# 1. 解压
# 解压32位
tar -zxvf rarlinux-4.0.1.tar.gz
# 解压64位
tar -zxvf rarlinux-x64-5.3.0.tar.gz
# 2. 编译
cd rar
make
指令
# 下面的 x 表示解压,后面的 ./abc 表示将压缩包的内容解压到该目录下。否则会将压缩包的内容释放到当前目录
# 注意要先创建好目录 abc
rar x abc.rar ./abc
zip
# 解压,o 表示不要提示,-d表示如果有重名则覆盖原文件
unzip -o reportlets.zip -d reportlets
# 解压中文乱码的话要添加参数,注意下面中间的参数 -O CP936 都要使用大写英文字母
# 不带 -d 参数以及后面的目录名称则表示将解压的文件释放到当前目录下
unzip -O CP936 reportlets.zip -d reportlets
# 把当前目录下面的 abc12.zip、abc23.zip、abc34.zip同时解压到当前目录下
unzip abc\*.zip
# /home 下有目录 mydata,使用下面命令压缩目录为zip文件
zip -r mydata.zip mydata
# 把当前目录下面的abc文件夹和123.txt压缩成为abc123.zip
zip -r abc123.zip abc 123.txt
# 把当前目录下的 wwwroot.zip 里面的所有文件解压到第一级目录
unzip -j wwwroot.zip
# 下面是主要参数
-c:将解压缩的结果
-l:显示压缩文件内所包含的文件
-p:与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换
-t:检查压缩文件是否正确
-u:与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其它文件解压缩到目录中
-v:执行是时显示详细的信息
-z:仅显示压缩文件的备注文字
-a:对文本文件进行必要的字符转换
-b:不要对文本文件进行字符转换
-C:压缩文件中的文件名称区分大小写
-j:不处理压缩文件中原有的目录路径
-L:将压缩文件中的全部文件名改为小写
-M:将输出结果送到more程序处理
-n:解压缩时不要覆盖原有的文件
-o:不必先询问用户,unzip执行后覆盖原有文件
-P<密码>:使用zip的密码选项
-q:执行时不显示任何信息
-s:将文件名中的空白字符转换为底线字符
-V:保留VMS的文件版本信息
-X:解压缩时同时回存文件原来的UID/GID
gzip
# 解压文件
gzip ./文件名称
tar
参数介绍
-c: 建立压缩档案 -x:解压 -t:查看内容 -z:用gzip压缩或者解压 -j:用bzip2 压缩或者解压 -v:显示压缩或者解压的过程 -f:目标文件名在 f 之后要立即接文件名 -p:保留原始的权限与属性 -P:使用绝对路径来压缩 - 这里是大写的P -C:指定解压到的目录 - 这里是大写的C
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
-z:有gzip属性的 -j:有bz2属性的 -Z:有compress属性的 -v:显示所有过程 -O:将文件解开到标准输出
下面的参数-f是必须的 -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
tar -cf all.tar *.jpg 这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
tar -rf all.tar *.gif 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
tar -uf all.tar logo.gif 这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
tar -tf all.tar 这条命令是列出all.tar包中所有文件,-t是列出文件的意思
tar -xf all.tar 这条命令是解出all.tar包中所有文件,-x是解开的意思
压缩相关指令
// 打包当前目录中的所有 jpg 文件并压缩为 gz 格式文件
tar –czf jpg.tar.gz *.jpg
// 压缩当前目录下的名称为 test 的目录(或者名称为 test 的文件)
// 为:test.tar.gz 文件
tar -zcvf test.tar.gz test
// 解压缩文件 file.tar.gz
tar -zxvf file.tar.gz
解压相关指令
tar –xvf file.tar //解压 tar包
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2 //解压 tar.bz2
tar –xZvf file.tar.Z //解压tar.Z
unrar e file.rar //解压rar
unzip file.zip //解压zip
bz2
# 安装
yum -y install bzip2.x86_64
# .bz2 文件的操作
bzip2 -d 文件名称.bz2
bunzip2 文件名.bz2
bzip2 -z 文件名
# .tar.bz2 文件操作
# 解压
tar jxvf 文件名.bz2
tar --bzip xvf 文件名.tar.bz2
# 压缩
tar jcvf 文件名.tar.bz2 目录名称
# .bz 文件操作
# 解压
bzip2 -d 文件名.bz
bunzip2 文件名.bz
# .tar.gz 文件操作
# 解压
tar jxvf 文件名.tar.bz
.tar 用 tar –xvf 解压 2、.gz 用 gzip -d或者gunzip 解压 3、.tar.gz和.tgz 用 tar –xzf 解压 4、.bz2 用 bzip2 -d或者用bunzip2 解压 5、.tar.bz2用tar –xjf 解压 6、.Z 用 uncompress 解压 7、.tar.Z 用tar –xZf 解压 8、.rar 用 unrar e解压 9、.zip 用 unzip 解压
目录
统计目录和文件数量
# 统计当前目录下文件的个数,包含子文件夹
ls -lR|grep "^-"|wc -l
# 统计当前目录下的文件夹的个数,包含子文件夹
ls -lR|grep "^d"|wc -l
# 统计当前目录下的文件个数,不包含子文件夹
ls -l |grep "^-"|wc -l
# 统计当前目录下的文件夹个数,不包含子文件夹
ls -l |grep "^d"|wc -l
查看目录和文件大小
# 查看当前目录大小
du -sh
# 查看指定目录大小
du -h --max-depth=1 /usr/local/tomcat8.5
# 或者使用下面命令
ls -lh
查看所有目录大小
要查看所有目录大小,可以先移动到系统的根目录:cd / 然后使用下面命令查看所有目录的大小,这样容易找到哪里占用空间最多
du -sh ./*
查找指定名称的所有目录
名称左右的型号表示模糊查找,如果不带则表示精确查找
find / -name *目录名称*
删除目录及文件
# 删除指定名称的目录以及其下的所有文件
rm -rf 目录名称
# 一次删除过多目录和文件时会提示参数过长,使用下面方法进行删
find . -name "*" | xargs rm -rf '*'
修改目录名称
mv 原始目录名称 新名称
创建目录
路径中任何一个文件夹不存在则会新建
mkdir -p /data/ftp
设置读取权限
设置当前目录以及其子目录对所有人均可读取
chmod -R a+r *
赋予当前用户指定目录所有权限
sudo chmod -R 777 /tomcat9
拷贝目录
# 拷贝目录 /projs/jingzhiyan/ 下的所有子目录和文件到 /projs/wanyu/ 下,保留文件原属性,注意前面路径的最后有个点
cp -a /projs/jingzhiyan/. /projs/wanyu/
# 拷贝当前目录下的文件夹 lib 到 当前目录下的文件夹 【私有maven仓库nexus之前版本】 下
# 执行后在目标目录下会创建一个 lib 目录
cp -r ./lib ./私有maven仓库nexus之前版本/
# 表示将当前目录下的文件夹 html 拷贝为名称为 html20200922backup 的文件夹
# 其中的 -r 表示递归拷贝,文件夹中有多少子目录都会被拷贝
cp -r html html20200922backup
# 下面的命令是将目录 WebReport 下的所有目录和文件拷贝到 yc 下
# 注意要保证 yc 之前的目录都要存在,yc本身可以不用存在,命令会自动创建
cp -r /usr/local/finereport/WebReport /usr/local/whiterpt/yc
# 复制目录 frontend 到 frontend01,执行之前可以不存在 frontend01目录
cp frontend/ -a frontend01/
# 拷贝目录 /projs/vuepress/source/src/.vuepress/dist 下的所有文件到目录 /projs/vuepress/knowledgebase/ 下
# 如果没有 /projs/vuepress/knowledgebase/ 目录则会新建
# 参数解析:
# a:保留文件原来的属性,例如原文件的所有者,例如数据库文件属于用户 oracle,如果不适用该属性会导致拷贝后变更为属于用户 root
# p:把原文件的修改时间,访问权限等等一起复制
# r:递归目录拷贝
cp /projs/vuepress/source/src/.vuepress/dist /projs/vuepress/knowledgebase/ -apr
