第六章 文件的其他操作命令
6.1 文本内容统计wc
wc命令用于统计指定文本文件的行数、字数或字节数,语法为: wc [选项] 文件名称
计算aa与filter文件行数
6.2 复制、移动文件
1、复制文件或目录
语法: cp [选项] 源文件 目标文件
2、移动文件或目录
mv命令用于剪切或重命名文件,语法为: mv [选项] 源文件名称 目标文件名称
剪切操作不同于复制操作,因为它会把源文件删除掉,只保留剪切后的文件。如果在同一个目录中将某
个文件剪切后还粘贴到当前目录下,其实本质就是对文件进行了重命名操作。
[root@kongd ~]# mv x.log linux.log
[root@kongd ~]# ls
install.log linux.log
6.3 查找文件的路径
搜索可执行文件:whereis/which
find详解:
(1)查找以"a"开头的文件名
[root@localhost ~]# find 路径 [选项] 搜索内容
选项:
-name: 按照文件名搜索
-iname: 按照文件名搜索,不区分文件名大小写
-inum: 按照 inode 号搜索
[root@yang test]# find /test -name 'a*'
也可以使用“./*”或“.”
查找文件类型为“.txt” "*"表示任意
[root@yang test]# find ./* -name *.txt 也可以不带引号‘’
(2)根据文件大小查找
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-size [+|-]大小: 按照指定大小搜索文件,这里的“+”的意思是搜索比指定大小还要大的文件,
“-”的意思是搜索比指定大小还要小的文件
[root@yang test]# find ./* -size +1k 必须带单位‘k/KB/Mb’
(3)按照修改时间搜索
Linux 中的文件有访问时间(atime)、数据修改时间(mtime)、状态修改时间(ctime)这三个时
间,我们可以按照时间来搜索文件。
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-atime [+|-]时间: 按照文件访问时间搜索
-mtime [+|-]时间: 按照文件数据修改时间搜索
-ctime [+|-]时间: 按照文件状态修改时间搜索
-newer file: 把比file修改时间更新的文件列出来
-5:代表 5 天内修改的文件。
5:代表前 5~6 天那一天修改的文件。
+5:代表 6 天前修改的文件。
[root@yang test]# find . -atime -5
(4)按照权限搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-perm 权限模式: 查找文件权限刚好等于“权限模式”的文件
-perm -权限模式: 查找文件权限全部包含“权限模式”的文件
-perm +权限模式: 查找文件权限包含“权限模式”的任意一个权限的文件
如果要在整个系统中搜索权限中包括SUID权限的所有文件,只需使用-4000即可:
[root@kongd ~]# find / -perm -4000 -print
/usr/bin/fusermount
/usr/bin/chage
………………省略部分输出信息………………
(5)按照所有者和所属组搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-uid 用户 ID: 按照用户 ID 查找所有者是指定 ID 的文件
-gid 组 ID: 按照用户组 ID 查找所属组是指定 ID 的文件
-user 用户名: 按照用户名查找所有者是指定用户的文件
-group 组名: 按照组名查找所属组是指定用户组的文件
-nouser: 查找没有所有者的文件
(6)按照文件类型搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-type d: 查找目录
-type f: 查找普通文件
-type l: 查找软链接文件
(7)逻辑运算符
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-a: and 逻辑与
-o: or 逻辑或
-not: not 逻辑非
(8)其它选项
-exec参数重要的作用。这个参数用于把find命令搜索到的结果交由紧随其后的命令作进一步处理,它十分类似于管道符技术,并且由于find命令对参数的特殊要求,因此虽然exec是长格式形式,但依然只需要一个减号(-)
示例:在整个文件系统中找出所有归属于kongd用户的文件并复制到 /root/findresults 目录。
该实验的重点是 -exec {} \; 参数,其中的{}表示find命令搜索出的每一个文件,并且命令的结尾必须是 \;
[root@kongd ~]# find / -user kongd -exec cp -a {} /root/findresults/ \;
6.4 压缩和解压缩
6.4.1 zip和unzip命令
zip: 可以压缩文件和目录。
语法: zip FILE
语法: unzip FILE
素材准备:
[root@localhost ~]# mkdir /test
[root@localhost ~]# cd /test
[root@localhost test]# for i in {1..5};do echo "test$i" > test$i.txt;done
[root@localhost test]# ls
test1.txt test2.txt test3.txt test4.txt test5.txt
[root@localhost test]# mkdir dir1
[root@localhost test]# cp /etc/fstab dir1/
实例1: 使用zip压缩文件test1.txt
[root@localhost test]# zip test1.zip test1.txt
adding: test1.txt (stored 0%)
[root@localhost test]# ls test1*
test1.txt test1.zip
压缩率为最高压缩test2.txt
[root@localhost test]# zip -9 test2.zip test2.txt
adding: test2.txt (stored 0%)
[root@localhost test]# ls test2*
test2.txt test2.zip
实例2: 将当前目录dir1连同目录下文件一起压缩
[root@localhost test]# zip -r dir1.zip dir1/
adding: dir1/ (stored 0%)
adding: dir1/fstab (deflated 44%)
[root@localhost tes
Archive: test.zip
extracting: dir1/test3.txt
extracting: dir1/test4.txt
extracting: dir1/test5.txt
实例3: 向压缩文件中test1.zip中添加test2. txt文件
[root@localhost test]# zip -m test1.zip test2.txt
adding: test2.txt (stored 0%)
实例4: 删除压缩文件中的文件
[root@localhost test]# zip -d test1.zip test2.txt
实例5: 压缩文件时排除某个文件
[root@localhost test]# zip test.zip *.txt -x test1.txt
adding: test3.txt (stored 0%)
adding: test4.txt (stored 0%)
adding: test5.txt (stored 0%)
实例6: 解压文件test2.zip
[root@localhost test]# unzip test2.zip
Archive: test2.zip
extracting: test2.txt
实例7:将压缩文件text.zip在指定目录dir1下解压缩
[root@localhost test]# unzip test.zip -d dir1
实例8: 查看压缩文件目录,但不解压
[root@localhost test]# unzip -v test.zip
Archive: test.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
6 Stored 6 0% 06-17-2017 17:53 4e6f5599 test3.txt
6 Stored 6 0% 06-17-2017 17:53 012ec35e test4.txt
6 Stored 6 0% 06-17-2017 17:53 1835f21f test5.txt
-------- ------- --- -------
18 18 0% 3 files
t]# ls dir1*
dir1.zip
dir1:
fstab
gzip和gunzip命令
bzip2、bunzip2命令
xz、unxz命令
注:查看压缩过的文件内容: xzcat、xzless 。 xzcat 文件名.xz
6.5 tar归档命令
格式: tar [选项] [args]……
选项:任选其一
必选项:
辅助选项:
额外的选项:
#打包时排除某个文件
tar cf 文件名.tar --exclude=路径/文件 路径
注:此处的路径前后需要保持保持一致,统一使用绝对路径或者相对路径
1. 创建(非压缩的)打包文件,将指定的一个或多个文件或目录备份生成为一个指定的包文件
tar cvf/cfv/-cvf 文件名.tar 要打包的目录或文件名列表……
2. 列出包文件中的文件列表
tar t[v]f 包文件名
3. 创建带压缩的包文件,为节省存储空间,通常需要生成压缩格式的tar包文件,tar命令支持三种不
同的压缩方式
tar czf/-czf 文件名.tar.gz 要打包压缩的目录或文件名……
tar cjf/-cjf 文件名.tar.bz2 要打包压缩的目录或文件名……
tar cJf/-cJf 文件名.tar.xz 要打包压缩的目录或文件名……
4. 提取包文件到指定目录
tar xf/-xf/-xzf 文件名.tar.gz [-C 目标路径]
tar xf/-xf/-xjf 文件名.tar.bz2 [-C 目标路径]
tar xf/-xf/-xJf 文件名.tar.xz [-C 目标路径]
例:创建passwd.tar打包文件,将文件e放入包文件,压缩
[root@yang test]# tar rvf passwd.tar e
e
[root@yang test]# tar tf passwd.tar
passwd
e
[root@yang test]# tar czf passwd.tar.gz passwd
压缩结束不能再存放文件
解包:解压缩到dir目录
6.6 文件上传下载
1、sftp是一个交互式文件传输命令
它类似于ftp传输协议,属于ssh, 但它进行加密传输,相对FTP来讲有更高的安全性。
如果有服务器的端口不是默认的22,请在sftp后面加-P 端口号。
2、scp具有和ssh一样的验证机制,从而可以实现2台机器安全的远程拷贝文件
scp可以概括为: scp -P 端口 文件路径 用户名@主机地址:远程目录
如果想拷贝本地文件到另外一台ssh终端,可以使用以下命令;
3、rz命令与sz命令
(1)rz命令
rz命令(Receive ZMODEM),使用ZMODEM协议,将本地文件批量上传到远程Linux/Unix服务器,注
意不能上传文件夹。
当我们使用虚拟终端软件,如Xshell、SecureCRT或PuTTY来连接远程服务器后,使用rz命令可以上传本
地文件到远程服务器。输入rz回车后,会出现文件选择对话框,选择需要上传文件,一次可以指定多个
文件,上传到服务器的路径为当前执行rz命令的目录。
命令格式: rz [选项] [filelist]
# sftp root@223.6.6.6
The authenticity of host ‘223.6.6.6 (223.6.6.6)’ can’t be established.
ECDSA key fingerprint is SHA256:Hl/dKTFzL4lOlF8DIG5itaV4OAsZunC2AWlFGLjLfsg.
Are you sure you want to continue connecting (yes/no)? yes【输入yes回车】
Warning: Permanently added ‘223.6.6.6’ (ECDSA) to the list of known hosts.
root@223.6.6.6’s password:【输入223.6.6.6的root密码并回车】
Connected to 223.6.6.6.
sftp>
将223.6.6.6服务器文件下载到223.5.5.5的home目录;
sftp> get /var/www/renwole.txt /home/
将223.5.5.5服务器文件上传到223.6.6.6服务器的mnt目录;
sftp> put /home/renwole.txt /mnt/
你如果不知道远程主机的目录是什么样, ls命令可以列出223.6.6.6服务器的当前目录列表。例如:
sftp> ls //和查看本地操作命令一样
sftp> pwd //查询223.6.6.6的当前工作目录
如果想知道本地主机(223.5.5.5)的目录是什么样,可以使用下面的命令,例如:
sftp> lls
sftp> lpwd
如果想退出,例如:
# exit //退出机器,返回你原始机器界面。
(2)sz命令
sz命令(Send ZMODEM)通过ZMODEM协议,可将多个文件从远程服务器下载到本地。注意不能下载
文件夹,如果下载文件夹,请先打包再下载。
下载多个文件: sz file1 file2 file3
注意:有的机器可能不能使用 rz/sz 命令,这个时候我们就需要安装 lrzsz 软件包
执行以下命令:
#yum install lrzsz -y