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.txtb.txt
    Touch /tmp/a.txt b.txt
2、 更改/tmp/a.txt的访问时间为“20101028日 1022分”
    Touch -a -d 2010-10-28 10:22:00  /tmp/a.txt
3、 更改/tmp/b.txt的内容修改时间为“2015108日 1722分”
    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/shadow4
    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
posted @ 2019-01-22 21:06  DBA_zzher  阅读(193)  评论(0编辑  收藏  举报