Linux的文件操作
11.17.2文件操作
touch命令
用途:新建空文件,或更新文件时间标记
格式:touch 文件名…
创建名字带有空格的文件:touch ‘a1 2’
# stat a1
File: `a1'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 3276804 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-11-17 10:26:06.868999883 +0800 读取内容时间
Modify: 2018-11-17 10:26:06.868999883 +0800 修改内容时间
Change: 2018-11-17 10:26:06.868999883 +0800 属性改变时间
将123写入a1:echo 123 > a1
元数据-------属性数据(大小、权限、类型)
touch已有文件之后,已有文件的读取时间,修改时间都会被现在时间替换
touch -a:改变文件的读取时间记录
touch -m:改变文件的修改时间记录
touch -r:使用参考文件的时间记录
touch -d:设定日期与时间
忘掉touch的属性?man touch
指定时间:
touch -a -d "2018-11-11 10:10:10" a1
a1的时间替换到a2:touch -r a1 a2
[root@zzhCentos6 tmp]# stat a1 File: `a1' Size: 5 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 3276804 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-11-11 00:00:00.000000000 +0800 Modify: 2018-11-11 00:00:00.000000000 +0800 Change: 2018-11-17 10:47:35.923999769 +0800 [root@zzhCentos6 tmp]# stat a2 File: `a2' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 803h/2051d Inode: 3276805 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-11-17 10:26:06.868999883 +0800 Modify: 2018-11-17 10:26:06.868999883 +0800 Change: 2018-11-17 10:26:06.868999883 +0800 [root@zzhCentos6 tmp]# touch -r a1 a2 [root@zzhCentos6 tmp]# stat a2 File: `a2' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 803h/2051d Inode: 3276805 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-11-11 00:00:00.000000000 +0800 Modify: 2018-11-11 00:00:00.000000000 +0800 Change: 2018-11-17 10:48:58.722999857 +0800 [root@zzhCentos6 tmp]# stat a1 File: `a1' Size: 5 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 3276804 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-11-11 00:00:00.000000000 +0800 Modify: 2018-11-11 00:00:00.000000000 +0800 Change: 2018-11-17 10:47:35.923999769 +0800
Change时间不能修改
cp命令
用途:复制(Copy)文件或目录
格式:cp [选项]... 源文件或目录… 目标文件或目录(多个源的话目标必须是目录)
[root@zzhCentos6 tmp]# ls /etc/hosts
/etc/hosts
[root@zzhCentos6 tmp]# cp /etc/hosts .
[root@zzhCentos6 tmp]# ls
2018-11-11 00:00:00 a1 a1 2 a2 a3 a4 hosts yum.log
多个文件
[root@zzhCentos6 tmp]# ls /etc/hosts /etc/passwd
/etc/hosts /etc/passwd
[root@zzhCentos6 tmp]# cp /etc/hosts /etc/passwd .
[root@zzhCentos6 tmp]# ls
2018-11-11 00:00:00 a1 a1 2 a2 a3 a4 hosts passwd yum.log
复制并重命名:
[root@zzhCentos6 tmp]# cp /etc/hosts ./hosts.bank
[root@zzhCentos6 tmp]# ls
2018-11-11 00:00:00 a1 a1 2 a2 a3 a4 hosts.bank yum.log
别名存在内存中
/bin/cp------->在硬盘中
别名的优先级高于硬盘中
-r:递归复制整个目录树
-a: 复制时保留链接、文件属性,并递归地复制目录
mv命令
用途:移动(Move)文件或目录
—— 若如果目标位置与源位置相同,则相当于改名
格式:mv [选项]... 源文件或目录… 目标文件或目录(多个源的话目标必须是目录)
file命令
用途:查看文件类型
格式: file 文件名…
rm命令
用途:删除(Remove)文件或目录
格式:rm [选项]... 文件或目录
-f:强行删除文件或目录,不进行提醒
-r:递归删除整个目录树
通配符
* 匹配0个或者多个字符
? 匹配1个字符
11.17.3文件组成
11.17.4文件内容查看操作
cat命令
用途:显示出文件的全部内容
格式:cat -n 文件名
tac命令
用途:从最后一行倒着显示出文件的全部内容
more命令
用途:全屏方式分页显示文件内容(看到最后一行会自动退出)
交互操作方法:
按Enter键向下逐行滚动
按空格键向下翻一屏、按b键向上翻一屏
按q键退出
看上一行按b
less命令
用途:与more命令相同,但扩展功能更多(看到最后一行会自动退出)
交互操作方法:
与more命令基本类似,但个别操作会有些出入
【page down】【page up】上翻下翻页
head命令
用途:查看文件开头的一部分内容(默认为10行)
格式:head -n 文件名
head -n -3 /etc/passwd 不显示最后三行
head -n +3 /etc/passwd 显示前三行
tail命令
用途:查看文件结尾的少部分内容(默认为10行)
格式:tail -n 文件名 tail -f 文件名
最后一行:tail -1 /etc/passwd
tail命令高级用法
格式:tail -n 数字 文件名
数字:数字前有 +(加号),从文件开头指定的单元 数开始输出;数字前有 -(减号),从文件末尾指定的单元 数开始输出;没有 +或 -,从文件末尾指定的单元 数开始输出。
例如:
tail -n +3 /etc/passwd 从第三行开始显示
tail -n -3 /etc/passwd 显示最后三行
11.17.4文件查找
which命令
用途:查找可执行文件并显示所在的位置
—— 搜索范围由 PATH 环境变量指定
格式:which 命令或程序名
别名优先,存在内存中
查看别名:alias
取消别名:unlaias 命令
定义新的命令:
按照目录顺序查找,若有即结束
执行优先级:别名 > 内部命令 > 外部命令
改变变量优先(越靠前越优先):
whereis命令
用途:查找文件的路径、该文件的帮助文件路径,原理和which类似
格式:whereis 命令或程序名
输出帮助手册
locate命令
格式:locate 文件名
根据每天更新的数据库(/var/lib/mlocate)查找,速度块
不能找到自己新建的文件但会找到已经删除的文件
手动更新数据库updatedb
*find命令
用途:用于查找文件或目录
格式:find [查找范围] [查找条件] [动作]
【动作】: rm cp mv
常用查找条件
-name:按文件名称查找
-size: 按文件大小查找
-user: 按文件属主查找
-type: 按文件类型查找
-perm :按文件权限查找
-mtime :按文件更改时间查找
-newer:按比某个文件更新的查找
特殊查找条件
-o :逻辑或,只要所给的条件中有一个满足,寻找条件就算满足
-not :逻辑非,在命令中可用“!”表示。该运算符表示查找不满足所给条件的文件
-a:逻辑与,系统默认是与,可不加,表示只有当所给的条件都满足时,寻找条件才算满足。
find /boot -size +1024k -o -name “vmlinuz*”
范围 大小 或者 名字 以vmlinuz开头
vmlinuz* 以vmlinuz开头
*vmlinuz 以vmlinuz结尾
*vmlinuz* 包含vmlinuz
find /home !-user hello -exec ls -ld {} \;
目录 不属于hello用户 动作 前面找到的文件 命令结束
查找并复制:
find /etc -name "passwd" -exec cp -r {} /tmp \;
按照时间查找:
格式:find /usr -mtime +/-数字
数字:数字前有 +(加号),大于数字的天数;数字前有 -(减号),小于数字的天数;没有 +或 -,等于数字的天数。
例如:
find /usr -mtime 4 表示4天前那一天
find /usr -mtime -4 表示4天内
find /usr -mtime +4 表示4天前
常用动作:
-exec:将find查找的结果交给-exec后面的命令执行
-ok:比-exec动作多了一个确认
挂载光盘:读取光盘数据
挂载命令:mount [挂载目录]
/dev/sr0 表示第一个光驱
[root@zzhCentos6 ~]# mount /dev/sr0 /mnt/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@zzhCentos6 ~]# ls /mnt/ 访问
CentOS_BuildTag isolinux RPM-GPG-KEY-CentOS-Debug-6
EFI Packages RPM-GPG-KEY-CentOS-Security-6
EULA RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Testing-6
GPL repodata TRANS.TBL
images RPM-GPG-KEY-CentOS-6
11.17.5文件压缩
zip命令
用途:制作压缩文件
格式:zip 压缩文件名 文件1 文件2
install.log install.log.syslog
unzip命令
用途:解压缩文件
格式:unzip [-l] 压缩文件名
解压到指定目录:
unzip -d [目录]
zip压缩目录,使用-r选项,否则只有目录本身,里面没有文件
gzip命令
用途:制作压缩文件、解开压缩文件,只能是文件,不能是目录
格式:gzip [-9] 文件名...例如:gzip b.sh
gzip -d .gz格式的压缩文件(解压)
常用命令选项
-9:表示高压缩比,取值1-9,默认为6
-d:用于解压缩文件,同gunzip命令
-c:将输出重定向到标准输出
zcat命令
用途:查看压缩文件内容
格式:zcat 压缩文件名
bzip2命令
用途:制作压缩文件、解开压缩文件
格式:bzip2 [-9] 文件名...
bzip2 -d .bz2格式的压缩文件
常用命令选项
-9:表示高压缩比,取值1-9,默认为6
-d:用于解压缩文件,同bunzip2命令
-c:将输出重定向到标准输出
bzcat命令
用途:查看压缩文件内容
格式:bzcat 压缩文件名
tar命令
用途:制作归档文件、释放归档文件(打包)
格式:tar [选项]... 归档文件名 源文件或目录
tar [选项]... 归档文件名 [-C 目标目录]
常用命令选项
-c:创建 .tar 格式的包文件
-x:解开.tar格式的包文件
-v:输出详细信息
-f:表示使用归档文件
-t:列查看包内的文件
-p:保持原文件的原来属性
-P:保持原文件的绝对路径
打包命令:
tar -cf a.tar passwd shadow
查看命令:
tar -tf a.tar
解压命令:
tar -xf a.tar
常用命令选项
-C:建包或解包时进入指定的目录
-z:调用gzip程序进行压缩或解压
-j:调用bzip2程序进行压缩或解压
-J:调用xz程序进行压缩或解压
-A:将归档文件追加到另外一个归档文件中
-r:将文件追加到一个文档中,例如:tar -rf /tmp/sxkj.tar .bashrc
tar -cjf a.zip passwd shadow
tar -czf a.zip passwd shadow
先切换到d1,再进行解压:(-C命令)
tar xf b.tar -C d1
例如:以下两个等同
tar cf c.tar -C /etc hosts passwd
tar cf c.tar /etc/hosts /etc/passwd
将目录/etc/httpd/压缩并归档
tar jcf test.tar.bz2 /etc/httpd/
将test.tar.bz2加压到/tmp
tar xf test.tar.bz2 -C /tmp
tar命令注意事项
一定要注意绝对路径和相对路径问题,推荐使用相对路径。
使用z或j压缩的文件,解压缩的时候不需要加上z或j,tar直接可以识别。
tar对目录和文件都可以进行操作,gzip和bzip2只能对文件进行操作。
date命令
使用man命令查询date命令的使用方法,实现下列功能
显示日期时间效果例如:2012-03-10 10:35
使用date命令修改日期和时间
时间戳运算
%F full date; same as %Y-%m-%d
%T time; same as %H:%M:%S
[root@localhost ~]# date "+%F\ %T"
2018-11-23 16:59
date 可以查看或者设置系统日期和时间
hwclock 同步系统和硬件时间
-s | --hctosys set the system time from the hardware clock
-w | --systohc set the hardware clock to the curret system time
11.17.6本章总结
绝对路径和相对路径
目录操作命令
pwd、cd、ls、mkdir、du
文件操作命令
touch、file、cp、rm、mv、ln
查找命令
which、whereis、locate、find
文件内容操作命令
cat、more、less、head、tail
归档及压缩命令
zip、gzip、bzip2、zcat、bzat、tar
11.17.7练习
练习一:
阶段练习1
在/root下创建sxjy/ss和/sxjy/xx这些目录,停在/root下将/etc/passwd这个文件复制到ss中,把/etc/shadow这个文件复制到xx中,停在/root下把ss下面的passwd改名为haha,把xx下面的shadow移动到ss下并且同时改名为xixi。接着进入/usr/bin目录后,删除ss下的xixi,然后进入xx,接着再进入ss,再快速退回到xx中,接着进入/etc/sysconfig/network-scripts/目录,把ss下的haha复制到xx目录中去,最后删除sxjy和/sxjy
[root@localhost ~]# pwd
/root
[root@localhost ~]# mkdir -p sxjy/ss
[root@localhost ~]# mkdir -p /sxjy/xx
[root@localhost ~]# cp /etc/passwd sxjy/ss
[root@localhost ~]# cp /etc/shadow /sxjy/xx
[root@localhost ~]# mv sxjy/ss/passwd sxjy/ss/haha
[root@localhost ~]# ls sxjy/ss
haha
[root@localhost ~]# mv /sxjy/xx/shadow sxjy/ss/xixi
[root@localhost ~]# ls sxjy/ss
haha xixi
[root@localhost ~]# cd /usr/bin/
[root@localhost bin]# pwd
/usr/bin
[root@localhost bin]# rm -f ~/sxjy/ss/xixi
[root@localhost bin]# cd /sxjy/xx
[root@localhost xx]# cd ~/sxjy/ss
[root@localhost ss]# pwd
/root/sxjy/ss
[root@localhost ss]# cd -
/sxjy/xx
[root@localhost xx]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@localhost network-scripts]# cp ~/sxjy/ss/haha /sxjy/xx/
[root@localhost network-scripts]# rm -rf ~/sxjy /sxjy
[root@localhost network-scripts]# ls /
bin cgroup etc lib lost+found misc net proc sbin srv tmp var
boot dev home lib64 media mnt opt root selinux sys usr
[root@localhost network-scripts]# cd
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog
阶段练习2
在/root目录中执行这个命令:mkdir -p aa/bb/cc/dd,保持当前的目录停留在/root下,用相对路径的表示法在dd下创建一个叫sxjy.bat的文件,进入到bb目录下,再用相对路径的表示法将sxjy.bat这个文件复制到cc下,进入到dd目录下,用相对路径的表示法将cc下面的sxjy.bat移动到aa下面,回到/root目录,用相对路径的表示法将dd目录复制到aa下。
[root@localhost ~]# mkdir -p aa/bb/cc/dd
[root@localhost ~]# ls
aa anaconda-ks.cfg install.log install.log.syslog
[root@localhost ~]# ls aa/
bb
[root@localhost ~]# touch aa/bb/cc/dd/sxjy.bat
[root@localhost ~]# cd aa/bb
[root@localhost bb]# cp cc/dd/sxjy.bat cc
[root@localhost bb]# cd cc/dd
[root@localhost dd]# mv ../sxjy.bat ../../../
[root@localhost dd]# cd ../../../
[root@localhost aa]# pwd
/root/aa
[root@localhost aa]# ls
bb sxjy.bat
[root@localhost aa]# cd -
/root/aa/bb/cc/dd
[root@localhost dd]# cd
[root@localhost ~]# cp -r aa/bb/cc/dd aa
[root@localhost ~]# ls aa
bb dd sxjy.bat
练习二:
首先创建如图所示的目录(机器名无需一致)
挂载系统光盘(mount /dev/sr0 /mnt);将光盘中的文件大于10M并且名字是kerne开头的文件复制到xx下;然后将光盘中大于3072k小于8192k并且名字是i开头的文件复制到kk下;将xx和kk中的所有文件移动到jj下,把xx目录复制到/xx;
[root@localhost jj]# mount /dev/sr0 /mnt
[root@localhost jj]# find /mnt -size +10M -a -name "kerne*" -exec cp {} ../.. \;
[root@localhost jj]# find /mnt -size +3072k -a -size -8192k -a -name "i*" -exec cp {} .. \;
[root@localhost jj]# find ../.. -type f -exec mv {} . \;
[root@localhost jj]# cp -r /home/ss/xx /
练习三:
阶段练习5
停在/root目录下把/etc下的passwd、shadow、group三个文件备份到/tmp下的sxkj.tar文件中去,要求查看sxkj.tar里面的内容,要求最后一列只显示文件名,不带路径。
接着将/root目录下.bashrc这个文件追加备份到sxkj.tar中去,然后将sxkj.tar中的group文件恢复到/home目录下;再把/home目录下所有的文件都备份到/tmp下的home.tar.bz2中去,停在/root目录下将home.tar.bz2的内容都恢复到/tmp中去
[root@localhost ~]# tar -cf /tmp/sxkj.tar -C /etc passwd shadow group
[root@localhost ~]# tar -tf /tmp/sxkj.tar
[root@localhost ~]# tar -rf /tmp/sxkj.tar .bashrc
[root@localhost ~]# tar -tf /tmp/sxkj.tar
passwd
shadow
group
.bashrc
[root@localhost ~]# tar -xf /tmp/sxkj.tar -C /home/ group
[root@localhost ~]# tar -cjf /tmp/home.tar.bz2 /home/*
[root@localhost ~]# tar -xf /tmp/home.tar.bz2 -C /tmp/
练习四:
1、 切换到/opt,然后一条命令在/tmp下创建2个文件,文件名分别是:a.txt和b.txt
Touch /tmp/a.txt b.txt
2、 更改/tmp/a.txt的访问时间为“2010年10月28日 10点22分”
Touch -a -d “2010-10-28 10:22:00” /tmp/a.txt
3、 更改/tmp/b.txt的内容修改时间为“2015年10月8日 17点22分”
Touch -m -d “2010-10-28 10:22:00” /tmp/b.txt
4、 在保留文件属性情况下,复制/etc/shadow到/tmp,并且重命名为shadow.bak
Cp -a /etc/shadow /tmp/shadow.bak
5、 复制/etc/sysconfig目录到/tmp,并且改名,名字自己随便起
Cp /etc/sysconfig /tmp/aaa
6、 在/tmp目录下创建一个空文件,名字随便,然后重命名为:原文件名_new。例如:原文件名是a.txt,则新文件名为a.txt_new
Touch /tmp/a1
Cp /tmp/a1 ./a1_new
7、 停在/tmp下,在根目录下创建一个空文件,继续停在/tmp下,然后把刚创建的空文件重命名为:原文件名_new
Touch /b
Cp /b ./b_new
8、 查看/dev/sda的文件类型
File dev/sda
9、 删除目录/tmp/a/b
Rm -rf /tmp/a/b
10、 查看/etc/passwd文件内容,一次查看所有内容,并且显示行号
Cat -n /etc/passwd
11、 查看/etc/passwd文件内容,分页查看
More /etc/passwd
12、 查看/etc/shadow前4行
head -n +4 /etc/passwd
13、 查看/etc/shadow最后4行
tail -n -4 /etc/passwd
14、 查看top命令对应的可执行文件保存在哪里
which top
15、 输入命令lslslsls,看看有什么提示,为什么?
[root@zzhCentos6 ~]# lslslsls
-bash: lslslsls: command not found
Lslslsls不是一条命令
16、 查找ssh_config文件并且复制到/tmp,一条命令完成
Find / -name “ssh_config” -exec cp -r {} /tmp \;
17、 把/etc/ssh/打包到/tmp/ssh.tar
Tar -cPf /tmp/ssh.tar /etc/ssh
18、 把/etc/ssh/压缩打包到/tmp/ssh.tar.gz,并且保留原文件权限。
Tar czPf /tmp/ssh.tar.gz /etc/ssh/
19、 把/etc/ssh/压缩打包到/tmp/ssh_YYYY-MM-DD_HH:MM.tar.bz2,例如: /tmp/ssh_2016-07-03_10:26.tar.bz2
Tar cjPf /tmp/ssh_2016-07-03_10:26.tar.bz2 /etc/ssh
20、 把/etc/ssh/压缩打包到/tmp/ssh.zip
tar cPzf ssh.zip /etc/ssh/ -C /tmp/
21、 在/tmp目录下,随便创建一个空目录,把ssh.tar.gz解压到这个空目录中
Mkdir /tmp/ d1
Tar zxf ssh.tar.gz -C d1
22、 在/tmp目录下,随便创建一个空目录,把ssh.tar.bz2解压到这个空目录中,并且显示解压过程。
Mkdir /tmp/ d1
Tar jxvf ssh.tar.bz2 -C d1
23、 在/tmp目录下,随便创建一个空目录,把ssh.zip解压到这个空目录中
Mkdir /tmp/ d1
Unzip /tmp/d1 -d ssh.zip