Skip to content

Latest commit

 

History

History
419 lines (361 loc) · 21.8 KB

文件系统及文件管理类命令.md

File metadata and controls

419 lines (361 loc) · 21.8 KB

文件系统及文件管理类命令

文件系统

ls /
  • /boot:系统启动相关文件,如内核,initrd,以及grub(BootLoader)
  • /dev:设备文件
    • 块设备:随机访问,无所谓先后,如磁盘,组织成数据块访问;
    • 字符社会:线性访问,按字符为单位,如鼠标,显示器
  • /etc:配置文件。大多数为纯文本文件
  • /home:用户的家目录,每一个用户的家目录通常默认为/home/USERNAME
  • /root:管理员的家目录
  • /lib:库文件(不能单独执行);/lib/modeles:内核模块文件。静态库:.a为后缀;动态库:.dso
  • /media:挂载点目录,挂载移动设备(如光盘)
  • /mnt:挂载点目录,挂载额外的临时文件(如第二块硬盘)
  • /opt:可选目录
  • /proc:伪文件系统,内核映射文件,系统启动后才出现文件
  • /sys:伪文件系统,跟硬件设备相关的属性映射文件
  • /tmp:临时文件,/var/tmp是另一个临时文件目录
  • /var:可变化的文件
  • /bin:可执行文件,用户命令(/bin,/sbin 放程序)
  • /sbin:管理命令
  • /usr:(universal shared readonly,只读文件),/usr下也有/bin,/sbin,/lib,与系统提供基本功能相关;/bin,/sbin,/lib与系统启动相关;/usr/local:/bin,/sbin,/lib,第三方软件存放路径,非必需

目录命名规则:

  1. 长度不能超过255个字符
  2. 不能使用 / 当文件名。因为 / 不但是根目录,也作为路径分隔符
  3. 严格区分大小写

文件管理类命令

ls:

ls命令用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。

cd:

cd命令用来切换工作目录至dirname。 其中dirName表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的home directory(也就是刚login时所在的目录)。另外,~也表示为home directory的意思,.则是表示目前所在的目录,..则表示目前目录位置的上一层目录。

pwd:

pwd命令以绝对路径的方式显示用户当前工作目录。命令将当前目录的全路径名称(从根目录)写入标准输出。全部目录使用/分隔。第一个/表示根目录,最后一个目录是当前目录。执行pwd命令可立刻得知您目前所在的工作目录的绝对路径名称。

mkdir:

mkdir命令用来创建空目录。

-p或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
-v或-verboes:显示命令的详细执行过程
命令行展开:
在mnt/test/文件夹下创建x和y文件夹,x文件夹下创建m文件: mnt/test/{x/m,y}

tree:

tree命令以树状图列出目录的内容。

rmdir:

rmdir命令用来删除空目录。

-p或--parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;
-v或-verboes:显示命令的详细执行过程

rm:

rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。

  • 注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。
-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。

touch:

touch命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建新的空文件。

mark

stat:

stat命令用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。

mark

复制和移动文件

cp:

cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。

-a:此参数的效果和同时指定"-dpR"参数相同,常用于备份;
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-p:保留源文件或目录的属性;
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-l:对源文件建立硬连接,而非复制文件;
-s:对源文件建立符号连接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。

mv:

mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。

  • mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果:
  1. 如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。
  2. 如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。
  • 注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。
--backup=<备份模式>:若需覆盖文件,则覆盖前先行备份;
-b:当文件存在时,覆盖前,为其创建一个备份;
-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。
--strip-trailing-slashes:删除源文件中的斜杠“/”;
-S<后缀>:为备份文件指定后缀,而不使用默认的后缀;
--target-directory=<目录>:指定源文件要移动到目标目录;
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。

install:

install命令和cp命令类似,都可以将文件/目录拷贝到指定的地点。但是,install允许你控制目标文件的属性。

--backup[=CONTROL]:为每个已存在的目的地文件进行备份。
-b:类似 --backup,但不接受任何参数。
-c:(此选项不作处理)。
-d,--directory:所有参数都作为目录处理,而且会创建指定目录的所有主目录。
-D:创建<目的地>前的所有主目录,然后将<来源>复制至 <目的地>;在第一种使用格式中有用。
-g,--group=组:自行设定所属组,而不是进程目前的所属组。
-m,--mode=模式:自行设定权限模式 (像chmod),而不是rwxr-xr-x。
-o,--owner=所有者:自行设定所有者 (只适用于超级用户)。
-p,--preserve-timestamps:以<来源>文件的访问/修改时间作为相应的目的地文件的时间属性。
-s,--strip:用strip命令删除symbol table,只适用于第一及第二种使用格式。
-S,--suffix=后缀:自行指定备份文件的<后缀>。
-v,--verbose:处理每个文件/目录时印出名称。

文本查看

cat:

cat命令连接文件并打印到标准输出设备上,cat经常用来显示文件的内容。

  • 注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。为了控制滚屏,可以按Ctrl+S键,停止滚屏;按Ctrl+Q键可以恢复滚屏。按Ctrl+C(中断)键可以终止该命令的执行,并且返回Shell提示符状态。
-n或-number:从1开始对所有输出的行数编号;

tac:

tac命令用于将文件以行为单位,反序输出,即第一行最后显示,最后一行先显示。

more:

more命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:--More--(XX%)可以用下列不同的方法对提示做出回答:

  • 按Space键:显示文本的下一屏内容。
  • 按Enier键:只显示文本的下一行内容。
  • 按斜线符:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
  • 按H键:显示帮助屏,该屏上有相关的帮助信息。
  • 按B键:显示上一屏内容。
  • 按Q键:退出more命令。

less:

less命令的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键。man中能用的选项都能用。

head:

head命令用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容。

-n<数字>:指定显示头部内容的行数;
-c<字符数>:指定显示头部内容的字符数;
-v:总是显示文件名的头信息;
-q:不显示文件名的头信息。

tail:

tail命令用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。

-f:查看文件尾部,不退出,等待显示后续追加至此文件的新内容。

文本处理

cut:

cut命令用来显示行中的指定部分,删除文件中指定字段。cut经常用来显示文件的内容。 说明:该命令有两项功能,其一是用来显示文件的内容,它依次读取由参数file所指 明的文件,将它们的内容输出到标准输出上;其二是连接两个或多个文件,如cut fl f2 > f3将把文件fl和几的内容合并起来,然后通过输出重定向符“>”的作用,将它们放入文件f3中。

-b:仅显示行中指定直接范围的内容;
-c:仅显示行中指定范围的字符;
-d:指定字段的分隔符,默认的字段分隔符为“TAB”;
-f:显示指定字段的内容;
-n:与“-b”选项连用,不分割多字节字符;
--complement:补足被选择的字节、字符或字段;
--out-delimiter=<字段分隔符>:指定输出内容是的字段分割符;
--help:显示指令的帮助信息;
--version:显示指令的版本信息。

查看实例 cut分割TAB

  1. ctrl+v 2)按Tab

sort:

sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。

-n:依照数值的大小排序
-r:以相反的顺序来排序(降序)
-t<分隔字符>:指定排序时所用的栏位分隔字符
-k:以哪个字段作为关键字进行排序
-u:排序后相同的行只显示一次
-f:排序时忽略字符大小写

uniq:

uniq命令用于报告或忽略文件中的重复行,一般与sort命令结合使用。

-c或——count:在每列旁边显示该行重复出现的次数
-d或--repeated:仅显示重复出现的行列

文本统计:wc

wc(word count)命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。

-c或--bytes或——chars:只显示Bytes数;
-l或——lines:只显示行数;
-w或——words:只显示字数。

字符处理:tr

tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。

-c或——complerment:取代所有不属于第一字符集的字符;
-d或——delete:删除所有属于第一字符集的字符;
-s或--squeeze-repeats:把连续重复的字符以单独一个字符表示;
-t或--truncate-set1:先删除第一字符集较第二字符集多出的字符。
例:tr 'A-Z' 'a-z' <xxx

压缩、解压缩命令

压缩格式:gz, bz2, xz, zip, Z

压缩算法:算法不同,压缩比也会不同;

gzip: .gz

gzip /PATH/TO/SOMEFILE:压缩完成后会删除原文件,不能压缩目录
	-d:解压
	-<数字>:1-9,指定压缩比,默认是6;
gunzip:
gunzip /PATH/TO/SOMEFILE.gz:解压完成后会删除原文件
zcat /PATH/TO/SOMEFILE.gz: 不解压的情况,查看文本文件的内容

bzip2:.bz2

比gzip有着更大压缩比的压缩工具,使用格式近似

bzip2 /PATH/TO/SOMEFILE:也会删除原文件
	-d:解压
	-<数字>:1-9,默认是6
	-k:压缩时保留原文件	
bunzip2 /PATH/TO/SOMEFILE.bz2
bzcat /PATH/TO/SOMEFILE.bz2:不解压的情况,查看文本文件的内容

xz: .xz 更新,压缩比更大

xz /PATH/TO/SOMEFILE
	-d:解压
	-<数字>:1-9, 默认是6
	-k:压缩时保留原文件
	
unxz /PATH/TO/SOMEFILE.xz
xzcat /PATH/TO/SOMEFILE.xz

zip:既归档又压缩的工具

zip FILENAME.zip FILE1 FILE2 ...:压缩后不删除原文件
unzip FILENAME.zip:解压,不删除原文件

tar(.tar):归档工具(只归档不压缩)

archive:归档,把多个文件整合成一个文件,归档本身并不意味着压缩

-c:创建归档文件 #-cf
-f FILE.tar:操作的归档文件
-x:展开归档
--xattrs:归档时,保留文件的扩展属性信息
-t:不展开归档,直接查看归档了哪些文件

-zcf:归档并调用gzip压缩
-zxf:调用gzip解压缩并展开归档,-z选项可省略

-jcf:归档并调用bzip2压缩
-jxf:调用bzip2解压缩并展开归档,-j选项可省略
-jtf:调用bzip2解压缩,不展开归档,直接查看归档了哪些文件,-j选项可省略                                                 

-Jcf:xz
-Jxf:调用xz解压缩并展开归档,-z选项可省略

cpio:归档工具 ​

练习:写一个脚本 从键盘让用户输入几个文件,脚本能够将此几个文件归档压缩成一个文件;

文件查找:

locate:

locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。简而言之即非实时,模糊匹配,速度快,查找是根据全系统文件数据库进行的。

find:

find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。简而言之即实时,精确,支持众多查找标准,遍历指定目录中的所有文件完成查找,速度慢。

find <查找路径> <查找标准> <查找到以后的处理动作> 查找路径:默认为当前目录 查找标准:默认为指定路径下的所有文件 处理动作:默认为显示到屏幕上

  • 查找标准:
-name 'FILENAME':对文件名作精确匹配,严格区分大小写
	支持文件名通配:
		*:任意长度的任意字符
		?:任意单个字符
		[]:匹配指定范围内的任意单个字符
		[abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]
		[:space:]:空白字符
		[:punct:]:标点符号
		[:lower:]:小写字母
		[:upper:]:大写字母
		[:alpha:]:大小写字母
		[:digit:]:数字
		[:alnum:]:数字和大小写字母
-iname 'FILENAME':文件名匹配时不区分大小写
-regex PATTERN:基于正则表达式进行文件名匹配
-user USERNAME:根据属主查找
-group GROUPNAME:根据属组查找
-uid UID:根据UID查找,当属主被删除后,此前所有属于该属主的文件的属主就是该用户此前的ID,这种情况下就不能用 -user 查找了
-gid GID:根据GID查找,理由同上
-nouser:查找没有属主的文件,需要定期使用该命令,将没有属主的文件授权给管理员,以免其他用户使用
-nogroup:查找没有属组的文件,同上
-type:根据文件类型查找
	-:普通文件 (f)
	d: 目录文件
	b: 块设备文件 (block)
	c: 字符设备文件 (character)
	l: 符号链接文件(symbolic link file)
	p: 命令管道文件(pipe)
	s: 套接字文件(socket)
-size:根据文件大小查找
	前可加 +|- 表示大于或小于,不加则表示精确多少大小,注意:所有小于1k的都认为是1k,M,G同理
	<数字>k
	<数字>M
	<数字>G
根据时间戳查找:后可加 +|- 和数字,表示几天前,几天内
	-mtime:修改,单位是天
	-ctime:改变
	-atime:访问
	-mmin:单位是分钟
	-cmin
	-amin
根据文件权限查找:
-perm MODE:精确匹配
	/MODE:任意一位匹配即满足条件
	-MODE:文件权限能完全包含此MODE时才符合条件
#如:-644:显示以下两种类型
	644:rw-r--r--
	755:rwxr-xr-x
  • 组合条件:默认是与

    -a:与 -o:或 -not:非

如:在/tmp目录下,不是目录,并且还不能套接字类型的文件

find /tmp -not -type d -a -not -type s 

如:在/tmp/test目录下,属主不是user1,也不是user2的文件

find /tmp/test -not \( -user user1 -o -user user2 \)  #注意括号需要转义
  • 处理动作:
-print:显示
-ls:类似ls -l的形式显示每一个文件的详细
-ok COMMAND {} \; 每一次操作都需要用户确认,{}表示引用查找到的文件  #注意:一定要反斜线和分号结尾
-exec COMMAND {} \; 不需要确认,其他同上

题目:

  1. 查找/var目录下属主为root并且属组为mail的所有文件;

    find /var -user root -group mail
  2. 查找/usr目录下不属于root,bin,或student的文件;

    find /usr -not -user root -a -not -user bin -a -not -user student
    find /usr -not \( -user root -o -user bin -o -user student \)
  3. 查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件;

    find /etc -mtime -7 -not \ ( -user root -o -user student \)
    find /etc -mtime -7 -not -user root -a -not -user student
  4. 查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,并将其属主属组均修改为root;

    find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \;
  5. 查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefiles文件中;

    find /etc -size +1M -exec echo {} >> /tmp/etc.largefiles \;
    find /etc -size +1M | xargs echo >> /tmp/etc.largefiles #以空格隔开

    xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。

  6. 查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息;

    find /etc -not -perm /222 -ls