普通文件¶
命令汇总
普通文件的基本操作有
0x00 文件创建¶
创建文件有以下方式
- 使用
touch
命令 - 使用文本编辑器
touch
本来是用来修改已存在文件的时间戳,当文件不存在时可以用来创建空文件
# 不使用任何选项且文件不存在时,创建空文件
# 文件的atime/ctime/mtime都为当前时间
# 文件的权限模型为默认权限模型,属主和属组分别是当前用户和当前用户的基本组
$touch 1.txt
# 不使用任何选项但是文件存在时,将指定文件的atime/ctime/mtime都改为当前时间
$touch 1.txt
# 将atime/mtime改为指定时间,ctime自动会改为当前时间
$touch -t 201803150949.22 /u # 时间戳格式为YYMMDDhhmm.ss
# 仅修改文件的atime,同时ctime会自动修改为当前时间
$touch -at 201803150953.55 /u # 时间戳格式为YYMMDDhhmm.ss
# 仅修改文件的mtime,同时ctime会自动修改为当前时间
$touch -mt 201803150953.22 /u # 时间戳格式为YYMMDDhhmm.ss
# 当vim、nano后面的文件名指定的文件不存在时就为创建新文件,否则为编辑该文件
$vim 1.txt
$nano 1.txt
0x01 文件删除¶
我们可以使用rm
命令来实现文件的删除
$rm 1.txt # 删除指定文件
$rm -f 1.txt # 强制删除指定文件
$rm *.c # 使用文件名通配机制,删除所有以.c结尾的文件
注意:指定文件名时可以使用文件名通配机制
0x02 文件移动¶
我们可以使用mv
命令来实现文件的移动,也可以理解为文件剪切粘贴
$mv SRC DEST
$mv 1.txt /tmp # 将1.txt剪切到/tmp目录下
# 假如SRC是一个文件
# 如果目标是一个文件且目标存在:覆盖
# 如果目标文件不存在:创建新文件,也可以理解为修改文件名
# 如果目标存在,且是个目录:剪切源至目标目录中,并保持原名
$mv SRC... DEST
$mv ./*.c /tmp # 将当前目录下的所有.c文件剪切到/tmp目录下
# 假如SRC有多个文件:
# 如果目标存在,且是一个文件:移动无法进行
# 如果目标存在,且是一个目录:剪切各文件至目标目录中,并保持原名
# 如果目标不存在:剪切无法进行
# 如果SRC只有一个且是目录:对目录实现剪切时不需要使用-r选项
# 如果目标是一个文件且目标存在:移动失败
# 如果目标文件不存在:创建新目录,实现整个目录的剪切
# 如果目标存在,且是个目录:剪切源目录到目标目录中,并保持原名
# mv命令的常用选项:
# -i:提示,交互
# -f:强制覆盖
注意:指定文件名时可以使用文件名通配机制
0x03 文件复制¶
我们可以使用cp
命令来实现文件的复制
$cp SRC DEST
$cp 1.txt /tmp # 将1.txt复制到/tmp目录下
# 假如SRC是一个文件
# 如果目标是一个文件且目标存在:覆盖
# 如果目标文件不存在:创建新文件
# 如果目标存在,且是个目录:复制源至目标目录中,并保持原名
$cp SRC... DEST
$cp ./*.c /tmp # 将当前目录下的所有.c文件复制到/tmp目录下
# 假如SRC有多个文件:
# 如果目标存在,且是一个文件:复制无法进行
# 如果目标存在,且是一个目录:复制各文件至目标目录中,并保持原名
# 如果目标不存在:复制无法进行
# 如果SRC只有一个且是目录:通常带上-r选项--递归复制,实现cp命令对目录的复制
# 如果目标是一个文件且目标存在:失败
# 如果目标文件不存在:创建新目录
# 如果目标存在,且是个目录:复制源目录到目标目录中,并保持原名
# cp命令的常用选项:
# -r:递归复制
# -i:提示,交互
# -f:强制覆盖
# -a: -dr 保留所有的文件信息
# -d:当源为链接文件时,复制链接文件本身,而非指向的源文件
# -p: 保持原有属性
注意:指定文件名时可以使用文件名通配机制
0x04 文件查找¶
参考文档
文件查找的方法有:
- 使用find实时查找:进行实时查找、查找速度慢、进行精确匹配
- 使用locate快速查找:依赖于由自动任务计划每天定时生成的数据库自动进行非实时查找;查找结果精确度较低,但查找速度快,可进行模糊查找;可以通过updatedb命令手动生成数据库
find
命令查找文件的语法是:find [options] [查找路径] [查找条件] [处理动作exec]
options:
-maxdepth 1
:查找深度为1
查找路径:默认为当前目录
查找条件:
根据文件名和属主、属组查找
- 默认查找指定目录下的所有文件
-name "filename"
:查找指定文件名的文件,该文件名格式支持文件名通配机制,严格区分大小写-iname "filename"
:查找方法同上,但不区分大小写-user UserName
:根据属主查找,查找属主为UserName的文件-group GroupName
:根据属组查找,查找属组为GroupName的文件-uid UID
:根据属主的UID查找-gid GID
:根据属组的GID查找-nouser
:查找没有属主的文件-nogroup
:查找没有属组的文件
根据文件类型查找
-type f
:普通文件-type d
:目录-type b
:块设备-type c
:字符设备-type l
:符号链接文件-type p
:命令管道-type s
:套接字
根据文件大小查找:
-size [+|-]Number[k|M|G]
+
表示大于-
表示小于
根据文件时间戳查找
-atime [+|-]Number
:根据访问时间来查找,单位为天-ctime [+|-]Number
:根据改变时间来查找,单位为天-mtime [+|-]Number
:根据修改时间来查找,单位为天-amin [+|-]Number
:根据访问时间来查找,单位为分钟-cmin [+|-]Number
:根据改变时间来查找,单位为分钟-mmin [+|-]Number
:根据修改时间来查找,单位为分钟- 以当前时刻为参照点的过去时间段,
2
表示[2,3)时间段内的操作
;+2
表示[3,+oo)时间段内的操作
;-2
表示[0,2)时间段内的操作
根据文件权限查找:
-perm [+|-]MOD
MODE
:精确匹配权限+MODE
:包含或关系,任何一类用户的任何一位权限匹配即可,常用于查找某类用用户的某特定权限是否存在。+444表示至少有一类用户有读权限-MODE
:包含且关系,每类用户的指定权限位都必须匹配。-444表示每类用户都有读权限
组合条件查找:组合上述查找条件
-a
:与条件,表示同时满足,默认值可省略;格式为条件1 [-a] 条件2
-o
:或条件,表示只一个满足,格式为条件1 -o 条件2
{-not | !}
:非条件,表示条件取反,格式为-not 条件
- 非的优先级大于与,与的优先级大于或
处理动作exec
- 默认操作是显示查找结果
find [查找条件路径] | cpio
:将查找结果进行归档find [查找条件路径] | xargs COMMAND
:xargs会将管道传递过来的字符串转换为后面命令的传入参数做文件处理;如果没有xargs转换,则通过管道传递过来的字符串只能做文本处理,不能进行文件处理等操作find [查找条件路径] [-print]
:默认值,可省略,表示打印到标准输出上。find [查找条件路径] -ls
:表示以长格式输出各种文件信息。find [查找条件路径] -exec COMMAND {} \;
:把查找到的所有文件一次性地传递给-exec执行指定的命令;{}是用来接收传递值的,同时还可以被后向引用接收到的传递值find [查找条件路径] -ok COMMAND {} \;
:把查找到的所有文件一次性地传递给-ok执行指定的命令;{}是用来接收传递值的,同时还可以被后向引用接收到的传递值
find
命令的使用用例如下
$find ./ -name "*.o" -exec rm {} \; # 递归当前目录及子目录删除所有.o文件
$find ./ -name '*.o' # 查找目标文件夹中是否有obj文件
$find /var/ -user root -a -group mail # 查找/var目录属主为root且属组为mail的所有文件
$find /usr/ -not \(-user root -o -user bin -o -user hadoop\) # 查找/usr目录下不属于root、bin或hadoop的所有文件
$find /etc/ -mtime -7 -a -not \(-user root -o -user hadoop\) # 查找/etc/目录下最近一周内其内容修改过的,且不属于root或hadoop的文件
$find /etc/ -size +1M -a -type f # 查找/etc/目录下大于1M且类型为普通文件的所有文件
$find /etc/ -not -perm +222 # 查找/etc/目录所有用户都没有写权限的文件
locate
命令使用方法如下
$updatedb # 更新数据索引库,以获得最新的文件索引信息
$locate STRING # 根据上述数据索引库查找文件
0x05 文件链接¶
我们可以通过ln
命令为文件建立硬链接和软链接
$ln /etc/fstab ~/fstab # 为/etc/fstab文件创建一个硬链接文件
$ln -s /usr/local/docker ~/docker # 为/usr/local/docker目录创建一个软链接文件
# 不能对目录创建硬链接,但是可以创建软链接
# -v选项可以显示链接文件的创建过程
0x06 文件压缩¶
注意:下面压缩工具中``gzip``、bzip2
、xz
只能压缩文件,不能压缩目录;zip
工具既可以用来压缩文件又可以用来压缩目录
gzip
压缩工具
# gzip工具的压缩文件后缀为.gz
# gzip工具压缩完成后会把原文件给删除,保留压缩文件
$gzip -6 1.txt # 指定压缩比1-9,默认的为6,压缩比越大,压缩文件越小
$gzip -c 1.txt >> foo.gz # -c选项将压缩内容重定向至指定的压缩文件,这样可以实现压缩后保留源文件
$gzip -c 1.txt 2.txt > foo.gz # 同时压缩多个文件输出到指定压缩文件
$cat 1.txt 2.txt | gzip > foo.gz # 实现功能和上面一样,但是压缩效果要好
$zcat foo.gz #查看.gz压缩文件中的内容,它会创建一个临时目录将压缩文件解压并提供访问查看,类似于cat查看普通文件内容一样
bzip2
压缩工具
# bzip2工具的压缩文件后缀为.bz2
# 对于大文件的压缩,bzip2的压缩效果比gzip要好
# bzip2工具压缩完成后会把原文件给删除,保留压缩文件
$bzip2 -k 1.txt # 压缩后保留原文件,不会删除
$bzip2 -6 1.txt # 指定压缩比1-9,默认的为6,压缩比越大,压缩文件越小
$bzip2 -c 1.txt >> foo.bz2 # -c选项将压缩内容重定向至指定的压缩文件,这样可以实现压缩后保留源文件
$bzip2 -c 1.txt 2.txt > foo.bz2 # 同时压缩多个文件输出到指定压缩文件
$cat 1.txt 2.txt | bzip2 > foo.bz2 # 实现功能和上面一样,但是压缩效果要好
$bzcat foo.bz2 #查看.bz2压缩文件中的内容,它会创建一个临时目录将压缩文件解压并提供访问查看,类似于cat查看普通文件内容一样
xz
压缩工具
# xz工具的压缩文件后缀为.xz
# 该工具的压缩效果是最好的
# xz工具压缩完成后会把原文件给删除,保留压缩文件
$xz -k 1.txt # 压缩后保留原文件,不会删除
$xz -6 1.txt # 指定压缩比1-9,默认的为6,压缩比越大,压缩文件越小
$xz -c 1.txt >> foo.xz # -c选项将压缩内容重定向至指定的压缩文件,这样可以实现压缩后保留源文件
$xz -c 1.txt 2.txt > foo.xz # 同时压缩多个文件输出到指定压缩文件
$cat 1.txt 2.txt | xz > foo.xz # 实现功能和上面一样,但是压缩效果要好
$xzcat foo.xz #查看.xz压缩文件中的内容,它会创建一个临时目录将压缩文件解压并提供访问查看,类似于cat查看普通文件内容一样
zip
压缩工具:在这里只介绍如何压缩文件
# 该工具的压缩文件后缀为.zip
# 该工具属于归档压缩工具(先对文件进行归档然后进行压缩),所有不会在压缩或者解压时删除原文件
$zip message.zip message # 将message文件压缩成message.zip文件。需要指定压缩文件名
$zip -6 message.zip message # 指定压缩比1-9,默认的为6,压缩比越大,压缩文件越小
$find . -name "*.[ch]" -print | zip source -@ # 将当前目录下所有.c和.h源文件归档压缩;-@选项使zip不再从命令行中获取待压缩文件路径,而是从标准输入或管道中获取
0x07 文件解压¶
此处的文件解压工具与上述的压缩工具一一对应
gunzip
是gzip压缩工具
的解压工具,只解压.gz
压缩文件
# 解压缩后会把压缩文件删除,保留原文件
$gunzip 1.txt.gz
$gunzip -c 1.txt.gz > 2.txt # -c选项将解压内容重定向至指定文件,这样可以实现解压后保留源压缩文件
$gzip -d 1.txt.gz # 类似于gunzip
$gzip -cd old.gz | gzip > new.gz # 解压压缩文件然后压缩到另一压缩文件中,源压缩文件不变
$gzip -d old.gz | gzip > new.gz # 解压压缩文件然后压缩到另一压缩文件中,源压缩文件会删除,保留解压后原文件
bunzip2
是bzip2压缩工具
的解压工具,只解压.bz2
压缩文件
# 解压缩后会把压缩文件删除,保留原文件
$bunzip2 1.txt.bz2
$bunzip2 -k 1.txt.bz2 # 解压后不会删除压缩文件
$bunzip2 -c 1.txt.bz2 > 2.txt # -c选项将解压内容重定向至指定文件,这样可以实现解压后保留源压缩文件
$bzip2 -d 1.txt.bz2 # 类似于bunzip2
$bzip2 -cd old.bz2 | gzip > new.bz2 # 解压压缩文件然后压缩到另一压缩文件中,源压缩文件不变
$bzip2 -d old.bz2 | gzip > new.bz2 # 解压压缩文件然后压缩到另一压缩文件中,源压缩文件会删除,保留解压后原文件
unxz
是xz压缩工具
的解压工具,只解压.xz
压缩文件
# 解压缩后会把压缩文件删除,保留原文件
$unxz 1.txt.xz
$unxz -k 1.txt.xz # 解压后不会删除压缩文件
$unxz -c 1.txt.xz > 2.txt # -c选项将解压内容重定向至指定文件,这样可以实现解压后保留源压缩文件
$xz -d 1.txt.xz # 类似于unxz
$xz -cd old.xz | gzip > new.xz # 解压压缩文件然后压缩到另一压缩文件中,源压缩文件不变
$xz -d old.xz | gzip > new.xz # 解压压缩文件然后压缩到另一压缩文件中,源压缩文件会删除,保留解压后原文件
unzip
是zip压缩工具
的解压工具,只解压.zip压缩文件
# 该工具属于归档压缩工具(先对文件进行归档然后进行压缩),所有不会在压缩或者解压时删除原文件
$unzip message.zip # 解压缩到当前目录下
$unzip message.zip -d test/ # 解压缩到test目录下