linux 文件管理
1.文件的命名规则
- 除了字符
/
之外,所有的字符都可以使用,尽量都用小写字母,对文件名进行分割,建议使用_
- 目录名或文件名的长度不能超过 255 个字符
- 建议文件名一律使用小写字母
- 文件扩展名的用途为了使运维人员更好的区分不同的文件类型
2.文件管理命令
2.1 目录管理
2.1.1目录创建/删除
mkdir
创建目录
soup@soup-Inspiron-3558:~/下载$ mkdir test #
soup@soup-Inspiron-3558:~/下载$ ls -al | grep "t"
drwxrwxr-x 2 soup soup 4096 11月 6 16:25 test
soup@soup-Inspiron-3558:~/下载$ mkdir -p test1/test2/test3 #递归生成文件夹
soup@soup-Inspiron-3558:~/下载$ ls -al | grep "test"
drwxrwxr-x 2 soup soup 4096 11月 6 16:25 test
drwxrwxr-x 3 soup soup 4096 11月 6 16:26 test1
soup@soup-Inspiron-3558:~/下载$ mkdir test3 test4 #可一次性生成多个文件夹
2.1.2删除目录
rmdir
删除目录
rmdir /itcast #删除根目录下的itcast目录
rmdir /itcast /jinyanlong /shunyi #删除根目录下的itcast目录
rmdir -p /itcast/heima #一次性删除heima和他的上级目录itcast
2.2文件创建/删除
2.2.1 创建文件
touch
创建文件
-a | 改变档案的修改时间记录 |
---|---|
-m | 改变档案的修改时间记录 |
-r | 使用参考档的时间记录,与 –file 的效果一样 |
-c | 不创建新文件 |
-d | 设定时间与日期,可以使用各种不同的格式 |
-t | 设定档案的时间记录,格式与 date 命令相同 |
–no-create | 不创建新文件 |
–help | 显示帮助信息 |
–version | 列出版本讯息 |
touch readme.txt #在当前目录下创建文件
touch /readme.txt #在根目录下创建文件
touch 1.txt 2.txt 3.txt #在 当前 同时创建 1.txt 2.txt 3.txt
touch /usr/local/1.txt /usr/local/2.txt#在/usr/local下创建1.txt 2.txt
touch {1..6}.log #在对当前目录下,创建 1到6.txt
2.2.2 删除文件
rm
删除文件
-f | 强制删除(不二次询问) |
---|---|
-i | 删除前会询问用户是否操作 |
-r/R | 递归删除 |
-v | 显示指令的详细执行过程 |
rm readme.txt #带确认的删除文件
rm -r shop #带确认的删除目录
rm -rf shop #不带确认删除目录及其所有子目录和文件
2.2.3 复制文件
cp
复制文件
cp readme.txt /usr/local/ #当前目录下的readme.txt 拷贝到/usr/local下
cp readme.txt /usr/local/readme.txt
cp readme.txt /usr/local/readhis.txt
cp readme.txt readme.aaa
cp -r /root/chuanzhiboke /usr/local/
soup@soup-Inspiron-3558:~/test$ vi 1.txt
soup@soup-Inspiron-3558:~/test$ ls
1.txt
soup@soup-Inspiron-3558:~/test$ cp 1.txt 2.txt #2.txt没有就新增一个
soup@soup-Inspiron-3558:~/test$ ls
1.txt 2.txt
2.2.4 移动文件
mv
移动文件
-i | 若存在同名文件,则向用户询问是否覆盖 |
---|---|
-f | 覆盖已有文件时,不进行任何提示 |
-b | 当文件存在时,覆盖前为其创建一个备份 |
-u | 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作 |
mv readme.txt /tmp/ #移动root目录下的 shop目录 到 /tmp目录下
mv /root/shop /tmp #移动shop文件夹到/tmp目录下
mv hello.txt readme.txt #把hello.txt内容都复制到readme.txt,并且hello.txt会消失
mv /root/shop1 /usr/local/shop2
soup@soup-Inspiron-3558:~/test$ mkdir test1
soup@soup-Inspiron-3558:~/test$ ls
1.txt test1
soup@soup-Inspiron-3558:~/test$ cd test1
soup@soup-Inspiron-3558:~/test/test1$ touch 1.txt
soup@soup-Inspiron-3558:~/test/test1$ cd ..
soup@soup-Inspiron-3558:~/test$ mv 1.txt test1/1.txt #移进去之后当前文件夹1.txt消失了
soup@soup-Inspiron-3558:~/test$ ls
test1
soup@soup-Inspiron-3558:~/test$ cd test1
soup@soup-Inspiron-3558:~/test/test1$ vi 1.txt
2.3 tar打包压缩与解压缩
2.3.1 tar压缩
打包指的是一个文件或目录的集合,而这个集合被存储在一个文件中。归档文件没有经过压缩,
tar
压缩与解压缩tar 参数 文件或目录
打包常见参数: -c,create 创建的意思 -v,显示打包文件过程 -f,指定打包的文件名,此参数是必须加的。 -u,update缩写,更新原打包文件中的文件(了解) -t,查看打包的文件内容(了解)
-A | 新增文件到以存在的备份文件 |
---|---|
-B | 设置区块大小 |
-c | 建立新的备份文件 |
-C <目录>目录> | 仅压缩指定目录里的内容或解压缩到指定目录 |
-d | 记录文件的差别 |
-x | 从归档文件中提取文件 |
-t | 列出备份文件的内容 |
-z | 通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz |
-Z | 通过compress指令处理备份文件 |
-f<备份文件>备份文件> | 指定备份文件 |
-v | 显示指令执行过程 |
-r | 添加文件到已经压缩的文件 |
-u | 添加改变了和现有的文件到已经存在的压缩文件 |
-v | 显示操作过程 |
-l | 文件系统边界设置 |
-k | 保留原有文件不覆盖 |
-m | 保留文件不被覆盖 |
-w | 确认压缩文件的正确性 |
-p | 保留原来的文件权限与属性 |
-P | 使用文件名的绝对路径,不移除文件名称前的“/”号 |
-N <日期格式>日期格式> | 只将较指定日期更新的文件保存到备份文件里 |
– -remove-files | 归档/压缩之后删除源文件 |
soup@soup-Inspiron-3558:~/test$ ls
1.txt 2.txt 3.txt 4.txt 5.txt test1
soup@soup-Inspiron-3558:~/test$ tar -cvf t1.tar 1.txt 2.txt 3.txt 4.txt 5.txt
1.txt
2.txt
3.txt
4.txt
5.txt
soup@soup-Inspiron-3558:~/test$ ls
1.txt 2.txt 3.txt 4.txt 5.txt t1.tar test1
soup@soup-Inspiron-3558:~/test$ touch 6.txt
soup@soup-Inspiron-3558:~/test$ tar -uf t1.tar 6.txt #追加文件打包
soup@soup-Inspiron-3558:~/test$ tar -tf t1.tar #查看打包的文件内容
2.3.2 打包并压缩
常见参数:-z,压缩为.gz格式 -j,压缩为.bz2格式 -J,压缩为.xz格式 -c,create 创建的意思 -x,解压缩 -v,显示打包文件过程 -f,file指定打包的文件名,此参数是必须加的。
tar -zcvf abc.tar.ga a.txt b.txt c.txt
tar -jcvf abc.tar.bz2 a.txt b.txt c.txt #含义:将当前目录下的a.txt b.txt c.txt 使用bz2压缩打包成abc.tar.bz2文件,是压缩后的大小
tar -Jcvf abc.tar.xz a.txt b.txt c.txt #将当前目录下的a.txt b.txt c.txt 使用xz压缩
2.2.4 解压
解压的时候,把压缩命令中的 c 换成 x 即可
3.文本处理
3.1查看文件内容
3.1.1 cat查看及合并
cat
查看文件内容
-n | 显示行数(空行也编号) |
---|---|
-s | 显示行数(多个空行算一个编号) |
-b | 显示行数(空行不编号) |
-E | 每行结束处显示$符号 |
-T | 将TAB字符显示为 ^I符号 |
-v | 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外 |
-e | 等价于”-vE”组合 |
-t | 等价于”-vT”组合 |
-A | 等价于 -vET组合 |
–help | 显示帮助信息 |
–version | 显示版本信息 |
#搭配空设备文件和输出重定向操作符,将某个文件内容清空
soup@soup-Inspiron-3558:~/文档/test$ cat 1.txt
soup
man
soup@soup-Inspiron-3558:~/文档/test$ cat /dev/null > 1.txt
soup@soup-Inspiron-3558:~/文档/test$ cat 1.txt
#持续写入文件内容,直到碰到EOF符后才会结束并保存
soup@soup-Inspiron-3558:~/文档/test$ cat > 1.txt <<EOF
> soup
> man
> EOF
soup@soup-Inspiron-3558:~/文档/test$ cat 1.txt
soup
man
3.1.2 分页显示
more
more在读取文件时,默认已经加载文件的全部内容
-num | 指定每屏显示的行数 |
---|---|
-l | more在通常情况下把 ^L 当作特殊字符, 遇到这个字符就会暂停,-l选项可以阻止这种特性 |
-f | 计算实际的行数,而非自动换行的行数 |
-p | 先清除屏幕再显示文本文件的剩余内容 |
-c | 与-p相似,不滚屏,先显示内容再清除旧内容 |
-s | 多个空行压缩成一行显示 |
-u | 禁止下划线 |
+/pattern | 在每个文档显示前搜寻该字(pattern),然后从该字串之后开始显示 |
+num | 从第 num 行开始显示 |
more
执行命令之后使用
回车键 | 向下移动一行 |
---|---|
d | 向下移动半页 |
空格 | 向下移动一页 |
b | 向上移动一页 |
/字符串 | 搜索指定的字符串 |
:f | 显示当前文件的文件名和行号 |
q | 退出 more |
3.1.3 less分页
less
适合处理大文件,加载的时候出来一部分,基本与more差不多命令
3.1.4 head和tail
head
查看一个文件的前n 行,如果不指定n,则默认显示前10 行
tail
查看一个文件的最后n 行,如果n 不指定默认显示最后10 行
3.2 统计文件信息
3.2.1 wc
统计文件内容数量
wc
用于统计文件内容信息(包含行数、单词数、字节数)wc [参数选项] 文件名
常见参数: -l:表示lines,行数(以回车/换行符为标准) -w:表示words,单词数 依照空格来判断单词数量 -c:表示bytes, 字节数(空格,回车,换行)
soup@soup-Inspiron-3558:~/文档/test$ cat 1.txt
soup
man
hi
hah
lala
jiji
soup@soup-Inspiron-3558:~/文档/test$ wc -lwc 1.txt
6 6 26 1.txt # 6行6个单词 26个字节
3.2.2 du
统计文件大小
du
查看文件或目录(会递归显示子目录)占用磁盘空间大小
-a | 显示目录中所有文件大小 |
---|---|
-k | 以KB为单位显示文件大小 |
-m | 以MB为单位显示文件大小 |
-g | 以GB为单位显示文件大小 |
-h | 以易读方式显示文件大小 |
-s | 仅显示总计 |
soup@soup-Inspiron-3558:~/下载$ du -sh #查看当前文件夹大小
87G .
soup@soup-Inspiron-3558:~/下载$ du -h 56.mybatis.zip #查看单文件大小
18M 56.mybatis.zip
soup@soup-Inspiron-3558:~/下载$ du -ah apache-maven-3.8.1/ #查询该文件夹下所有的
52K apache-maven-3.8.1/boot/plexus-classworlds-2.6.0.jar
12K apache-maven-3.8.1/boot/plexus-classworlds.license
68K apache-maven-3.8.1/boot
512K apache-maven-3.8.1/lib/guice-4.2.1-no_aop.jar
36K apache-maven-3.8.1/lib/maven-resolver-transport-wagon-1.6.2.jar
48K apache-maven-3.8.1/lib/maven-plugin-api-3.8.1.jar
3.3 文本处理
3.3.1 find
文件查找
用于查找文档(其选项有55 个之多)
find 路径范围 选项1 选项1的值 [选项2 选项2 的值…]
-name | 匹配名称 |
---|---|
-perm | 匹配权限(mode为完全匹配,-mode为包含即可) |
-user | 匹配所有者 |
-group | 匹配所有组 |
-mtime -n +n | 匹配修改内容的时间(-n指n天以内,+n指n天以前) |
-atime -n +n | 匹配访问文件的时间(-n指n天以内,+n指n天以前) |
-ctime -n +n | 匹配修改文件权限的时间(-n指n天以内,+n指n天以前) |
-nouser | 匹配无所有者的文件 |
-nogroup | 匹配无所有组的文件 |
-newer f1 !f2 | 匹配比文件f1新但比f2旧的文件 |
-type b/d/c/p/l/f | 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件) |
-size | 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件) |
-prune | 忽略某个目录 |
-exec …… {}\; | 后面可跟用于进一步处理搜索结果的命令 |
#找到根目录下所有以conf结尾的文件
soup@soup-Inspiron-3558:/$ sudo find / -name *.conf
#在/home目录中搜索所有属于指定用户的文件
soup@soup-Inspiron-3558:/$ find /home -user soup
#find 路径范围 选项1 选项1的值 选项2 选项2的值 在home目录下找到soup用户所有文件夹
soup@soup-Inspiron-3558:/$ find /home -user soup -type d
#列出当前工作目录中的所有文件、目录以及子文件信息
soup@soup-Inspiron-3558:/$ find .
#全盘搜索系统中所有类型为目录,且权限为1777的目录文件
soup@soup-Inspiron-3558:/$ sudo find / -type d -perm 1777
3.3.2 grep搜索文件内容
grep
-i | 忽略大小写 |
---|---|
-c | 只输出匹配行的数量 |
-l | 只列出符合匹配的文件名,不列出具体的匹配行 |
-n | 列出所有的匹配行,显示行号 |
-h | 查询多文件时不显示文件名 |
-s | 不显示不存在、没有匹配文本的错误信息 |
-v | 显示不包含匹配文本的所有行 |
-w | 匹配整词 |
-x | 匹配整行 |
-r | 递归搜索 |
-q | 禁止输出任何结果,已退出状态表示搜索是否成功 |
-b | 打印匹配行距文件头部的偏移量,以字节为单位 |
-o | 与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位 |
-F | 匹配固定字符串的内容 |
-E | 支持扩展的正则表达式 |
#搜索某个文件中,包含某个关键词的内容
soup@soup-Inspiron-3558:/$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
nm-openvpn:x:118:124:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin
#搜索某个文件中,以某个关键词开头的内容
soup@soup-Inspiron-3558:/$ grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
#输出在某个文件中,包含某个关键词行的数量:
soup@soup-Inspiron-3558:/$ grep -c root /etc/passwd
#搜索当前工作目录中,包含某个关键词内容的文件,未找到则提示