三.文件管理

2018-03-26  本文已影响0人  hitlipeng

1.基本文件管理:

普通文件:

增:touch    

使用格式:#touch   文件名1  文件名2  ... 

创建单个文件: 

#touch   file1

创建多个文件:  

#touch  file2  file3  file4同时创建三个文件  

注意:文件名是可以带空格的,但是尽量避免这样的操作   

删:rm   

使用格式:#rm  文件名1   文件名2  ...

删除单个文件:

#rm  file1  

remove regular empty file `file1'?  Y代表删除  N不删除

删除多个文件:

#rm  file2  file3  file4  

注意: 本身rm并不能交换询问,是它的一个选项-i导致会询问

-i: prompt before every removal

扩展:命令的别名,如果一个命令有别名,会先去引用别名 

查看别名:#alias   

alias rm='rm -i'再去使用rm的时候,相当于使用了rm -i   

设定别名:#alias   别名="命令+[选项]+[参数]"

   #alias   tom="rm  -i"  

#tom    file1也会将tom当作rm -i去使用 

取消别名:#unalias   别名  

   #unalias   tom    

#alias发现tom的别名就没有了 

强制删除:可以不再交互式询问

-f: force强制删除   

#rm   -f    file1     

改:

编辑:#vim   文件名    

vim的使用模式:

命令模式:直接使用命令打开的模式

常见的命令:

yy:复制, 4yy方式,复制4行    

dd:剪切, 4dd方式,剪切4行

p:粘贴,会将内容粘贴到光标所在行的下一行 

u:撤销上一步操作

插入模式: 在命令模式下,按i  a  o  I  A  O中任意一个字符所进入的模式,就是编辑模式,可以任意书写内容

注意:在插入模式下,不能直接进入到末行模式,必须先回到命令模式,按Esc回到命令模式  

末行模式:在命令模式下,按冒号键进入的模式

注意:在末行模式,也不能直接进入到插入模式,也需回到命令模式,也是按Esc键  

末行功能:  

q:退出  

w:保持  

wq:保持并退出  

q!:强制退出,不保存  

w!:强制保存    

wq!:强制保存,并退出

例:#vim     file1.txt    

注意:如果文件存在,则直接进行编辑;如果不存在,则先创建,再编辑

复制:#cp  原文件   目标文件   

例: 

#cp   file1.txt   file2.txt   

#cat  file2.txt发现内容和file1.txt一样   

#ls  -i   

270953 file1.txt  261191 file2.txt两个文件的inode不一样

移动、剪切:#mv   原文件   目标文件   

#mv   file1.txt   file3.txt   

#cat  file3.txt   

#ls  -i   

270953 file3.txt   file3的inode号,跟原文件file1一样

在某种层次上,可以把移除,理解成是给文件改名 

查:cat   tac  head    tail   more   less   

正向查看: 会将文件内容一次性读进内存进行查看 

#cat文件名   

#cat   /etc/passwd  

-n:显示行数  

#cat -n   /etc/passwd   

反向查看:

#tac文件名   

#tac   /etc/passwd  

查看头部:

#head文件名  

#head   /etc/passwd默认显示文件的前十行  

#head   -3    /etc/passwd显示文件的前三行  

查看尾部: 

#tail文件名  

#tail   /etc/passwd显示尾十行   

#tail  -3  /etc/passwd显示尾三行  

翻页查看:向下翻页

#more文件名 

#more   /etc/passwd 

按回车键,向下翻一行;按空格,向下翻一页;按q退出查看

翻页查看:上下左右翻页

#less文件名  

#less   /etc/passwd   

按回车键,向下翻一行;按空格,向下翻一页;按q退出查看;还可以使用上下左右箭头查看,可以回看 

目录:

增:mkdir   

创建一个目录:#mkdir   目录名   

#mkdir  aa   

创建多个目录:#mkdir  目录名1   目录名2  ...

#mkdir  bb   cc   dd  

同时创建多级子目录: 

#mkdir  -p    ff/fff/ffff/fffff   

删:rmdir  

删除一个目录:#rmdir    目录名   

#rmdir   aa    

删除多个目录: 

#rmdir  bb   cc   dd   

#rmdir   ff   

failed to remove `ff': Directory not empty

默认rmdir只能删除空的目录 

递归删除:#rm  -r    目录名    

#rm  -r   ff发现可以删除   

改:cp  mv   

复制:#cp  -r   原目录   目标目录

#mkdir   -p  a/b/c/d  

#cp   a    h   

#ls   

#ls   -h    

剪切:#mv   原目录  目标目录 

#mv   a   l    

#ls发现没有了a目录,生成了l目录  

#ls   -R   l   

查:ls     

2.扩展查看:file    stat    type     

file:查看文件内容的类型

#file     /etc/passwd  

ASCII text纯文本的文件,可以直接使用cat等命令查看  

#file    /bin/ls    

64-bit LSB executable使用lsb协议加密的文件,不能使用cat等查看 

#file   /var/lib/mysql/ibdata1    

/var/lib/mysql/ibdata1: data数据库类型文件,也不能使用cat等查看

stat:查看文件的基本属性详细信息

#stat    /etc/passwd   

Access:访问时间,查看了文件的内容,该时间会变

Modify:修改时间,修改了文件的内容,该时间会变

Change:改变时间,修改文件的基本属性,该时间会变

type:查看命令的类型

#type   cd  

cd is a shell builtin系统内建命令,伴随内核而来

#type   chmod   

chmod is /bin/chmod外部命令     

#type   ls    

ls is aliased to `ls --color=auto'如过有别名,先显示别名

which:查看命令的绝对路径

命令:就是一个文件,文件存放是功能代码

#which    chmod    

/bin/chmod     

3.文件的搜索:

locate:是本地数据库中搜索,速度比较快,但不是实时的 

使用格式:#locate     字符串(string)

注意:locate是对文件名做模糊匹配,只要将来文件中含有该字符串,就会被显示

例1: 

#locate   ifcfg  

例2: 

#touch    /home/loring/zhangsanfeng.txt 

#locate  zhangsanfeng    

发现新创建的文件,没有搜索到   

这是因为,数据库默认是每天更新一次,新建立的文件还没有更新到数据

#updatedb手动更新数据库的命令 

#locate     zhangsanfeng     

/home/loring/zhangsanfeng.txt

例3:  

#touch    /tmp/zhangwuji.txt

#updatedb     

#locate    zhangwuji     

发现更新了数据库,依然搜索不到  

#vim   /etc/updatedb.conf    

PRUNEPATHS = "/afs /media /net /sfs  /tmp"

path:路径  

在这后面有/tmp的出现,那么将来在/tmp中的文件,就不会更新到数据库

如果想让/tmp目录中的文件,更新到数据,将其从paths后删除即可

#updatedb   

#locate   zhangwuji    

/tmp/zhangwuji.txt

find:是遍历整个文件系统(目录),速度较慢,但它是实时的 

使用格式:#find   目录   选项  选项的参数

find是按照文件的基本属性进行搜索的

准备过程: 

#useradd    loring

#cd   /home/loring   

#touch   a.txt   b.txt   c.txt      

#mkdir  abc    

#chown   loring    a.txt   

#chown   .loring    b.txt 

#chmod   631  c.txt  

#cp   /var/log/messages   /home/loring     

按照文件的类型搜索:-type  

#find   /home/loring   -type   f   

代表从/home/loring目录中进程搜索   

-type:代表按照文件的类型进程搜索  

常见的类型:f普通文件   d目录  l链接文件  b块设备  c字符设备

按照文件的权限搜索:-perm       permission  权限   

#find  /home/loring   -perm   631   

搜索权限为631的文件  

/home/loring/c.txt

按照文件的所有者搜索:-user   

#find  /home/loring   -user   loring    

搜索所有者为loring的文件   

/home/loring/a.txt

按照文件的所属组搜索:-group   

#find   /home/loring  -group   loring   

搜索组为loring的文件  

/home/loring/b.txt

按照文件大小搜索:-size    

#find   /home/loring   -size   4k搜索大小等于4k的文件

显示内容:/home/loring/abc

#find   /home/loring   -size   +4k搜索大于4k的文件

显示内容:/home/loring/messages

#find   /home/loring   -size   -4k搜索小于4k的文件  

显示内容:/home/loring/c.txt

  /home/loring/b.txt

  /home/loring/a.txt

#find    /home/loring   -size   +10k    -size  -50k   

搜索大于10k,但是小于50k的文件 

#find   /home/loring  -size    -1k    

#find   /home/loring  -size    -1M    

#find   /home/loring  -size    -1G   

注意:单位前别直接写-1,-1等于0了  

按照文件名搜索:-name   

#find   /home/loring    -name   c.txt  

显示/home/loring/c.txt    

#find   /home/loring    -name    c.tx发现没有,精确搜索 

文件名通配: 

通配:用一些符号,来代表一类字符

通配符: 

*代表任意多个字符  

?代表任意单个字符  

[]代表要从括号中给定的值,任选一个

按照时间进行搜索:-mtime    -ctime   -atime   -mmin  -cmin   -amin   

-mtime:按照Modify时间进行搜索,单位是天 

-atime:按照access时间进行搜索,单位是天 

-ctime:按照change时间进行搜索,单位是天  

-mmin:按照modify时间进行搜索,单位是分钟

#find    /home/loring    -mtime     3  

代表搜索修改时间是在3天前--4天前,一天时间间隔内

#find   /home/loring     -mtime     +3  

代表修改时间是在4天以前的文件

#find   /home/loring     -mtime     -3  

代表修改时间是在3天以内的文件 

注意:find搜索文件,多个条件可以同时指定,按要求去做就行

#find   /home/loring  -user  loring  -size  +100k  -mtime  -10     

4.文件的压缩和解压缩、打包:

压缩和解压缩:

压缩:按照一定算法,将文件的内容重新排列;也可以理解成是一种加密

解压:按照压缩的相同算法,还原以前的排列

压缩目的:1.节约磁盘空间   2.节约网络带宽(文件在互联网传输,要压缩)  3.可以保证数据的安全  

准备工作: 

#mkdir   /loring  

#cp   /var/log/messages   /loring/messages  

多复制几个文件 

或者: 

#while true;do cat /etc/passwd  >> /loring/passwd;done   

执行一会后,要按ctrl+c结束 

4.1 zip:

使用格式:#zip   压缩文件名    文件名1  文件名2 ...

注意:zip不仅有压缩功能,也有打包功能

压缩: 

例: 

#zip   loring.zip   passwd  passwd1   

注意:1. loring.zip的压缩文件名,是自己定义的,必须以.zip结尾,前面的名称自定义即可

2.压缩后,原文件不会丢失

解压:  

#unzip压缩文件名   

#unzip    loring.zip    

注意: 解压后,压缩文件也不会丢失

在解压时,指定解压路径:

#unzip压缩文件    -d   解压路径

#unzip    loring.zip  -d    /tmp     

#ls  -lh   /tmp    

会发现两个文件:passwd  passwd1     

压缩比:  

#zip  tom.zip   passwd2   

adding: passwd2 (deflated 99%)   

压缩比=(原文件大小-压缩后文件大小)/原文件大小 

注意: 压缩比越大,压缩后文件就越小,压缩的时间就越长

   压缩比越小,压缩后文件就越大,压缩的时间越短  

   压缩比的大小,不是固定的,要看文件的类型和里面的内容

压缩级别: 压缩级别是固定的,可以影响压缩比

压缩级别:1-9一共九个级别,数字越大,压缩级别越高  

注意: 压缩级别越大,压缩比就越大

       压缩级别越小,压缩比就越小

4.2 gzip  

压缩:

#gzip原文件名1   原文件名2    

注意:文件是分开压缩,单独存放;压缩文件名是自动生成的

#gzip    /loring/passwd3  

#ls    /loring   

passwd3.gz   

注意:压缩后,原文件会丢失;压缩文件名的后缀为.gz    

#file  /loring/passwd3.gz    

解压缩: 

第一种: 

#gunzip压缩文件名    

#gunzip   passwd3.gz   

注意:解压后,压缩文件也会丢失

第二种:

#gzip   -d压缩文件名   

#gzip   -d   passwd3.gz       

-d:    Decompress ,解压  

不解压查看:

#zcat压缩文件名    

#zcat     passwd3.gz     

指定压缩级别:默认在6的压缩级别

#gzip     -1   passwd4指定压缩级别为1  

#gzip     -9   passwd5指定压缩级别为9   

4.3 bzip2  

压缩:

#bzip2原文件名    

#bzip2    passwd4     

#ls   -lh  /loring   

passwd4.bz2

注意:压缩后,原文会丢失;压缩文件名的后缀为.bz2   

解压:

第一种: 

#bunzip2     passwd4.bz2  

注意:解压后,压缩文件会丢失   

第二种:

#bzip2    -d    passwd4.bz2    

不解压查看:

#bzcat压缩文件名  

#bzcat      passwd4.bz2     

指定压缩级别:

#bzip2    -1   passwd4   

#bzip2    -8   passwd5    

保留原文件:

在压缩时,保留原文件:

#bzip2   -k   passwd5      

在解压时,保留压缩文件: 

#bunzip2  -k  passwd5.bz2   

4.4 xz   

压缩:

#xz原文件   

#xz    passwd5   

注意:压缩后,原文件会丢失

解压:

第一种:

#unxz压缩文件 

#unxz       passwd5.xz  

注意:解压后,压缩文件也会丢失   

第二种:

#xz    -d   passwd5.xz  

不解压查看:

#xzcat压缩文件 

#xzcat     passwd5.xz       

指定压缩级别:

#xz    -3    passwd5  

#xz    -7    passwd5     

保留原文件: 

压缩时保留原文件:

#xz     -k原文件   

#xz     -k   passwd5

解压时,保留解压文件: 

#unxz   -k压缩文件  

#unxz   -k  passwd5.xz   

4.5打包:  tar     必须会用    

打包:归档 

#tar    -cvf归档文件名      原文件1   原文件2  ...

-c:  create创建归档文件  

-v: verbose显示创建的过程  

-f: file操作的文件   

注意:只要使用了tar的命令,就必须有-f选项,而且该选项要放在所有选项的最后

例: 

#tar   -cvf   loring.tar     passwd1   passwd2  

注意:默认tar打包的同时,没有压缩功能;如果要想压缩,要借调用压缩工具

展开归档:

#tar    -xvf归档文件名    

-x:展开归档  

#tar    -xvf     loring.tar   

注意:不管是归档,还是展开归档,原文件都不会丢失 

不展开归档查看:

#tar     -tf归档文件   

-t:不展开归档查看里面的文件名 

#tar     -tf     loring.tar   

向归档文件中,追加文件:    

#tar    -rf归档文件名     添加的文件名   

-r:追加   

#tar    -rf      loring.tar     passwd3   

#tar    -tf      loring.tar验证

注意:归档文件必须在没有被压缩的时候,才能向里追加文件  

归档时,调用压缩工具进行压缩: 

创建归档时,调用压缩工具: 

#tar    -zcvf归档文件名     原文件1  原文件2  

-z: 借调用gzip压缩工具

#tar    -jcvf归档文件名     原文件1  原文件2

-j:借调用bzip2压缩工具 

#tar    -Jcvf归档文件名     原文件1  原文件2

-J: 借调用xz压缩工具  

例: 

#tar    -zcvf     loring.tar.gz    passwd1  passwd2   

#tar    -jcvf     loring.tar.bz2   passwd1  passwd2   

#tar    -Jcvf     loring.tar.xz    passwd1  passwd2   

展开归档,并解压压缩:

#tar    -zxvf     loring.tar.gz    

#tar    -jxvf     loring.tar.bz2    

#tar    -Jxvf     loring.tar.xz    

注意:归档时调用哪个压缩工具进行压缩的,那么展开归档时,就应该还去调用同样的压缩工具,进行解压

例如:#tar    -zxvf    loring.tar.bz2     就是错误的使用

5.文件处理:排序、去重、切割、统计、过滤

注意: 以上5个命令都是针对文件中的内容,都不会对原文件做任何修改,只会影响输出

5.1排序: sort   

5.1.1正向排序:

#sort文件名     

#sort    /etc/passwd    

注意:默认sort会按照行首字母,根据ascii码的顺序,进行排序;a-z的顺序

5.1.2逆向排序:  -r  

#sort   -r文件名  

#sort   -r   /etc/passwd   

5.1.3按照数值大小排序: -n   

#cat    a.txt  

10

10001

111

1010

10202

#sort    a.txt   

10

10001

1010

10202

111

#sort   -n   a.txt   

即按照大小排序,又是倒序: 

#sort   -n   -r    a.txt   

5.1.4按照文件的字段进行排序:  字段-->列   

准备:  

#head  /etc/passwd   >  pass.txt     

将passwd文件的前十行,放在pass.txt文件中,如果pass.txt不存在,会自动创建

#sort   -t  "分隔符"   -k    第几列     文件名   

#sort   -t  ":"    -k   3     pass.txt  

以冒号分隔,按照第三列进行排序

#sort   -t  ":"  -k  3   -n    pass.txt   

按照第3列的数值大小进行排序 

5.1.5排序同时并去重:

#sort   -u文件名    

#sort    -u    /etc/passwd   

5.2去重:  uniq     -->  unique  唯一  

准备: 

#cat  b.txt  

 abc 

 123

 123

 abc

 abc

 123

去重: 

#uniq文件名   

#uniq   b.txt   

abc

123

abc

123

注意:默认uniq只能去掉相邻的重复行

统计重复行出现的次数:

#uniq   -c文件名   

#uniq   -c    b.txt    

  1 abc

      2 123

      2 abc

      1 123

去掉所有的重复行:

先排序,再去重

#sort   b.txt    |    uniq   

注释:| 代表了无名管道,作用是将第一命令执行的结果,传递给第二个命令去执行

作业: 将/etc/passwd文件中,第5行-第10行内容显示出来

#sort   -u文件名    

#sort   -u    b.txt   

#sort   b.txt   |  uniq   -c     

去掉所有的重复行,并且统计重复行的数量

例如:可以统计一个IP地址,一共访问了多少次 

5.3切割: cut     *****

#cut    -d  "分隔符"    -f   第几列     文件名   

单列输出:  

#cut    -d   ":"    -f  3   /etc/passwd输出第3列  

多列输出:

离散:

#cut   -d  ":"   -f  1,3,5     /etc/passwd输出第1列、第3列和第5列     

连续:

#cut   -d  ":"   -f   1-3     /etc/passwd输出第1列到第3列 

注意: 默认输出的分隔符,和输入的分隔符保持一致;-d所指定的就是输入分隔符  

指定输出分隔符: 

#cut   -d  ":"  -f  1,3   --output-delimiter="--->"   /etc/passwd  

--output-delimiter=指定输出分隔符  

5.4统计:  wc     -->  word  count  

统计所有信息:

#wc文件名   

#wc    /etc/passwd 

35   54 1663 /etc/passwd

行数   单词数量   字符的数量  文件名   

统计行: 

#wc    -l文件名 

#wc    -l   /etc/passwd   

统计单词:

#wc    -w文件名  

#wc    -w    /etc/passwd  

统计字符: 

#wc    -c文件名   

#wc    -c    /etc/passwd   

实验: 

统计/tmp目录下,一共有多少个文件??

#ls  -l  /tmp   |  wc  -l     

注意:将得到数减1  

5.5过滤: grep   *****

grep:行级过滤器,会将匹配到的行,整行显示出来

准备工作: 

#alias   grep='grep  --color=auto'

#useradd   loringroot  

#useradd   rootloring  

按照字符串进行过滤: 

#grep   "字符串"   文件名    

#grep   "root"    /etc/passwd    

要将文件中,含有root字符串的行,过滤出来

行首定位:^

#grep    "^root"   /etc/passwd    

代表了整行必须以root开头,^代表以谁开头

实验: 

将/etc/fstab文件中,以#开头的行过滤出来???

#grep    "^#"    /etc/fstab  

行尾定位:$

#grep    "bash$"     /etc/passwd   

代表一整行,必须以bash结尾,$代表了以谁结尾

例:

#cat    c.txt  

rootrootroot  

root  loring root  

root

rootloringroot  

#grep  "^root$"   c.txt  

整行中,只含有一个root字符串的行

过滤文件中的空行:

#grep    "^$"     /etc/passwd   

词首的锚定:\<

#grep   "root"    /etc/passwd

#grep   "\

在一行中,必须至少有一个单词,要以root开头 

词尾的锚定:\>

#grep   "root"   /etc/passwd  

#grep   "root\>"    /etc/passwd  

在一行中,必须至少有一个单词,要以root结尾

#grep     "\"    /etc/passwd  

在一行中,必须至少含有一个root的完整单词

常见的选项: 

-i  -v   -A  -B  -C   -rl   -R   

#grep   -i   "root"   /etc/passwd  

-i:忽略字符串的大小写 

#grep   -v    "^#"   /etc/fstab    

-v:取反,匹配到反而不显示,显示匹配不成功的  

#grep   -v  "^$"   /etc/fstab    

#grep  -A  3   "root"    /etc/passwd  

-A:在匹配到行后,会再多向下显示几行

#grep   -B  2   "root"   /etc/passwd   

-B:在匹配到行之前,会再多显示几行

#grep   -C  3    "root"   /etc/passwd   

-C:在匹配到行的上下,会各多显示几行

准备: 

#mkdir   /loring/a/b/c/d/e/f

#echo  hello  zhangsanfeng   >  /loring/a/b/c/d/e/f/haha.txt

#grep   -rl  "zhangsanfeng"    /loring             ******

#grep   -R   "zhangsanfeng"    /loring   

根据文件中的内容,搜索文件的位置;只要文件中含有了zhangsanfeng字符串,就会被搜索出来

上一篇下一篇

猜你喜欢

热点阅读