基本上所有的linux发行版本都遵循了linux基金会发布的标准文件系统架构(Filesystem Hierarchy Standard, FHS)。根据FHS的规定,linux的目录是树形的,其中最重要的根目录,所有的目录都位于根目录下。FHS规定了linux根目录下应有哪些目录,这些特定的目录应该放置什么数据。
FHS规定,根目录下至少应该包含12个目录,
登陆linux系统时,初始的默认工作目录,总是登陆用户的家目录,也即登陆用户的私人目录。
pwd
(present working directory)命令显示当前完整的工作目录。
cd
(change directory)命令切换工作目录。
mkdir
,(make directory)创建目录, mkdir /tmp/sampledir
。添加 -p选项,来创建嵌套目录 mkdir -p dirlevel01/dirlevel02
rmdir
(remove directory)删除目录,rmdir sampledir
.注意只能删除空目录。
linux中有两种路径书写方式,分别是绝对路径和相对路径。绝对路径就是目录的完整路径,相对路径书写时,可以省略根目录到当前工作目录的部分。
Linux为了方便输入,linux的外壳程序Bash提供了一些特殊字符,代表一些特殊目录,如下:
.
,表示当前工作目录, cd ./dir01
..
,表示工作目录的上层目录, cd ../dir02
-
,表示前一个工作目录,cd -
~
,表示用户的家目录,cd ~
(切换至当前用户的家目录); cd ~nblinux
(切换至nblinux用户的家目录中)ls [文件名 | 目录名 | NONE]
ls命令常带的选项有 -a 和 -l
ls -l 列出的每一行是每一个文件的信息,包含7个字段的内容,分别是
chmod 700 hello.sh
即将hello.sh文件权限修改为700 。命令chown nbcc:stu hello.sh
即将hello.sh文件的拥有者和从属用户组修改为了nbcc 和stu。chown stu hello.sh
即只修改文件拥有者,chown :nbcc hello.sh
即只修改文件从属用户组。
第1 3 4 字段,联合在一起,决定了某个用户对该文件的具体访问权限类型。
cp [要拷贝的文件|文件列表] [目的文件名|目的目录]
当有目的文件名时,表示复制后进行文件重命名。举例,cp /tmp/file01 ~
, cp /tmp/file01 ~/file01_bak
。
当复制多个文件时,文件名之间用空格隔开即可。cp /tmp/file01 /tmp/file02 /tmp/file03 ~
。
-r 选项表示拷贝整个目录,cp -r /tmp/dir01 ~
。
cp 命令拷贝文件时,如果目标位置有同名文件,cp命令默认会询问是否覆盖。
若有批量同名文件存在的话,在cp命令前加一个反斜线,同时使用-f选项,cp命令就强制覆盖所有同名文件而不询问。如\cp -f /tmp/file01 /tmp/file02 ~
cp命令拷贝文件时,文件的访问权限以及拥有者和从属用户组都可能发生改变,如果希望原原本本地复制一个文件,建议使用 -p选项。 cp -p /tmp/sample.sh ~nbcc
。使用-p选项复制文件时,需要登录用户对该文件有w权限才可以。
mv [要移动的文件|文件列表|目录] [目的文件名|目的目录]
mv /tmp/file05 ~
移动单个文件mv /tmp/file05 /tmp/file06 /tmp/file07 ~
移动多个文件mv /tmp/dir02 ~
移动文件夹 。注意与cp命令不同,mv移动目录时,不需要加任何选项。mv /tmp/file01 /tmp/file01_bak
rm [要删除的文件|文件列表|目录]
rm ./file01
删除单个文件rm ./file02 ./file03 ./file04
删除多个文件rm -R ./dir01
,删除文件夹,需要加上-R选项。touch [要创建的文件名]
即创建了一个没有任何内容的空文件
本讲学习在linux中为文件创建硬链接和符号链接。
符号链接和windows中的快捷方式很像。符号链接文件很小,提供了一个访问实际文件的一个通道。
创建链接的命令是 ln
创建符号链接的命令是 ln -s [链接指向的文件] [链接名]
例如,ln -s /tmp/hello.sh ./hello_slink
linux中可以通过符号链接文件来读写执行原文件,但是符号链接文件和原文件并不是同一个文件。如果原文件被删除了,那么指向这个文件的符号链接文件就会失效,提示没有那个文件或目录,这种情况被称为这个符号链接断裂了。
硬链接和符号链接文件有很大的不同,因为两者的原理不同。
为理解硬链接,需要首先了解linux中文件是如何存贮的。
linux中当划分磁盘分区并进行格式化的时候,整个分区会被划分为两个部分,即Inode区和Data Block区。linux中每个文件都被分成两部分存放,一部分是文件的唯一标识,inode-number以及属性信息,放在inode区的一个inode中,inode-number和inode是一一对应的。另一部分是文件的实际数据,放置在data block区中。在linux中,我们需要通过文件的inode里找到存放文件数据的data block,在一个硬盘分区中,不可能有两个文件公用一个inode,自然不可能有两个文件的inode-number是一样的。inode区类似一本书的目录,data block区类似书的内容,必须通过目录才能找到具体的内容。
ls -il
加上-i 选项,即列出文件的inode-number,第一个字段就是文件的inode-number。
接着需要理解linux中的目录是什么文件?linux中目录是一张表,每一个表项都代表了一个文件,目录中有多少文件,这张表中就有多少表项。每个表项中都包括了两样数据,一是文件名,而是该文件的inode-number。因此linux中存取文件的过程就是,通过文件名找到对应的inode-number,然后找到文件的inode,最后找到文件的数据。
在此基础上,理解硬链接。硬链接,就在文件目录中,让一个inode-number对应了 多个文件名。文件inode和数据还是一份,没有变化。
创建硬链接,ln [链接指向的文件] [链接名]
ls -il /tmp/sample.txt
ln /tmp/sample.txt ./sample_hl01
ls -il /tmp/sample.txt ./sample_hl01
可以看到sample.txt文件属性中第二个字段表示的硬链接数目发生了改变,由1变为2。
原文件、以及原文件的硬链接文件,其本质上是同一个文件,可以通过查看文件的inode-number是一致的,可以通过任一个硬链接或原文件来访问文件。因此,如果将原文件删除掉,创建的硬链接文件并不会像符号链接文件一样断裂。只是文件属性中的硬链接数目发生改变了,其他一起正常保持不变。
硬链接就相当于,一个文件在文件系统中的别名。
强烈不推荐为目录创建硬链接,容易造成目录遍历死循环。
不能跨硬盘分区创建硬链接,因为不同的分区中文件的inode-number不是唯一的。
本讲学习打包和压缩文件。
打包文件,就是将多个文件或者一个目录,打包成一个大文件。打包命令是tar (最开始tar 的命令是将文件打包到磁带上,所以是tape archive的缩写)。tar命令的原理就是将多个文件前后连接在一起,形成一个大文件,所以打包后的文件大小可能比打包前所有文件的大小之和更大。tar命令并不对文件进行压缩,tar打包文件起码要跟两个选项。tar -cf
, -c选项是创建打包文件, -f选项是指定要创建的打包文件名。
tar -cf [打包文件名] [要打包的文件/列表]
注意打包文件名的参数要紧跟在选项f 的后面,并且强烈推荐创建的打包文件名后缀是.tar
tar -cf samplefile.tar /tmp/file01 /tmp/file02 /tmp/file03 /tmp/file04 /tmp/file05
,打包多个文件
tar -cf sampledir01.tar /tmp/sampledir01
, 打包一个目录
tar -tf ./tmp/samplefile.tar
, -tf选项,列出打包文件中所有文件名查看。
tar -f ./samplefile.tar --delete tmp/file05
,--delete选项,将打包文件中的一个指定文件删除
tar -f sampledir01.tar -A ./samplefile.tar
,-A选项,合并两个打包文件。将samplefile.tar合并到sampledir01.tar中。
tar -f ./sampledir01.tar -r ~/fileA.txt
, -r选项,向打包文件中添加新文件。
tar -xf ./sampledir01.tar -C ./sampledir
, -x选项,表示解包。即将sampledir01.tar解包,默认的解包目录是当前目录。-C选项来指定要解包目录。
linux中文件压缩命令有多种,最常用的就是gzip。使用简单,将要压缩的文件跟在gzip之后即可。
gzip ./sampledir01.tar
,压缩后的文件将替换原文件,并且gzip自动为压缩文件添加了一个.gz的后缀名。也就相当于生成.gz的文件替换了原文件。gzip -d ./sampledir01.tar.gz
,-d选项,解压缩文件,后跟要解压缩的文件名即可。解压后的文件会替换压缩文件。gzip -6 samplefile01
tar -czf sample.tar.gz /tmp/samplefile01 /tmp/samplefile02 /tmp/samplefile03
tar -xzf sample.tar.gz
本讲学习如何在linux中查找文件,类似与everything所实现的功能。linux中查找文件的命令有两个,分别是locate 和find。
查找较快,但是功能稍弱。因为linux将系统中所有的文件名都记录在一个 /var/lib/mlocate 的数据库中,当使用locate查找文件时,会在数据库中查找,而不是在硬盘中进行查找。所以locate查找文件的限制就是,有时locate查找到的文件,已经被删除了,或者刚创建的文件,无法被查找到。这是因为记录所有文件名的数据库不实时更新导致的。这个数据库默认的更新频率是每天一次。我们也可以通过updatedb
命令来手动更新这个数据库,这个更新操作可能花费较多时间。
locate [查找的路径] [文件名的关键字]
locate .tar
, 即在整个系统中查找名字中包括.tar字样的文件查找略慢,但是功能强大。find命令可以按照用户指定的各种准则来匹配文件。
find [查找范围] [查找条件] [动作]
举例说明:
find / -name passwd
,-name 根据文件名称查找,表示在整个系统中查找文件名为passwd 的文件,注意文件名是一个精确名称,而不是一个关键字。如果要通过文件名中的关键字进行查找,结合通配符使用即可。
find /bin -type l
, -type根据文件类型查找,后跟一个表示文件类型的字符。即查找bin目录下所有符号链接文件。
find,根据文件时间属性查找。相关条件选项有6个,可以分为3组,用法类同。
find /tmp -mtime -3 -ls
, 在tmp下查找3天内,内容发生了修改的文件。
find /tmp -mtime +7 -ls
, 在tmp下查找7天前,内容发生了修改的文件。
find /tmp -mtime 4 -ls
, 在tmp下查找在4天前的那一天,内容发生了修改的文件。
时间参数中的 +, -, 和无符号的含义
find还可以根据文件大小来查找文件,-size选项,使用的大小单位有,c 字节;k, 1024字节; M, 1024k;G, 1024M.
find /tmp -size -3k -ls
,在tmp下查找比3k字节小的文件。find /tmp -size +100c -ls
,在tmp下查找比100字节大的文件。find /tmp -size 10M -ls
,在tmp下查找大小正好为10M字节的文件。find 根据文件拥有者和从属用户组的属性进行查找文件,
find /tmp -user root -ls
, find /tmp -uid 500 -ls
.find /tmp -group stu -ls
, find /tmp -gid 0 -ls
find根据文件的访问权限进行查找,选项是-perm,是一个八进制的文件访问权限数字
find /tmp -perm 754 -ls
find 命令的单个条件选项,也可以联用,实现多条件查找。find命令中可以使用,与(-a)或(-o)非(!)三种运算符,来连接查找条件。
find /tmp \( -size +1k -a -size 10M -a mmin -30 -a -type f \) -ls
,注意使用多个查找条件时,这些条件要用圆括号括起来,并且左右圆括号都要用反斜线进行转义。 并且左右圆括号和条件项之间应有一个空格。find命令中动作选项的一个特殊参数,-exec,即find将对查找到的对象执行-exec参数指定的shell命令。
find /tmp \( -size +1k -a -size 10M -a mmin -30 -a -type f \) -exec rm -rf {} \;
这个命令中,重点关注-exec 到;之间的部分。-exec表示find命令动作参数的开始,;表示动作的结束(因为bash中;有特殊含义,所以使用反斜线进行转义),中间就是find命令的动作,rm -rf是具体命令,{}代表find查找的文件。注意,{}和反斜线之间应有一个空格。find ~ \( -mmin -10 -a -type d \) -exec tar -cf {}.tar {} \;
,表示在当前目录下,查找在10分钟内修改过的目录文件,并打包成目录同名的文件。通配符 * 代表任意长度字符串(也包含了0长度)。如 *.txt表示所有以.txt结尾的文件。
通配符 ? 代表任意单个字符。ls -l /bin/??sh
表示列出bin目录下有4个字符并以sh结尾的文件。
通配符 [c1-c2] 表示匹配c1 - c2字符序列中的任意单一字符。cp /tmp/file[0-9].txt ~
表示将tmp目录下名为file单数字.txt的文件复制到当前用户的家目录。第二种用法是,[c1,c2,...,cn]表示匹配括号之间的字符列表中的任意单一字符,如chmod 700 /tmp/script[a,1,x].sh
表示修改tmp目录下名为scripta.sh,或script1.sh,或scriptx.sh文件访问权限为700。
通配符 {} 代表。{string1,string2,...,stringN}
表示匹配string1, string2直至stringN中的某个字符串。例如rm -rf {jiaoben, script}*.sh
表示,删除工作目录下以script或jiaoben打头,以.sh结尾的文件。
通配符 !, 通常和[] 或 {}联用,表示对括号中内容取反。举例,tar -cf file.tar /tmp/file[!0-9].txt
表示将tmp目录下,file后紧跟除0-9数字之外的任意单个字符,并以.txt结尾的文件打包成为一个file.tar的文件。
linux中配置文件、日志文件通常采用纯文本文件进行存储。linux中查看文本文件有多个命令,cat less more head tail 等等。
cat
, (concatenate是连接的意思), 有三个功能,连接几个文件,从键盘创建文件,查看文件。cat /etc/passwd
. cat命令一次将文件所有内容输出到屏幕上,cat命令不提供翻页和查找功能。因此cat只适合查看小文件。less
, 对于较大的文本文件进行查看。less /var/log/messages
,进入less后可以用上下箭头进行翻行,pgup, pgdn进行翻页,less中提供基本的文本查找功能,键入/关键字
在文件中查找相应的关键字文本,用n 和N在查找到的关键字中进行上下跳转。查看完毕后,q即可以退出,然后回到命令行。more
, 用法和less接近,不过less更为常用一些。head
, 用于查看文件的头几行。如head -n 20 /var/log/messages
。如果head不跟-n选项和参数时,默认显示文件的头10行。tail
, 用于查看文件的末尾几行。与head用法一样。head和tail 经常用于查看日志文件,因为日志文件更新的内容经常位于文件头或者文件尾。原文:https://www.cnblogs.com/songbiao/p/12587944.html