1.linux的标准文件系统结构:
至少包含12个:
- /bin:可执行的命令文件;
- /boot:存放系统的引导文件及内核文件等;
- /dev:设备文件的目录;
- /etc:保存系统中重要的配置文件;
- /home:存放除根用户外,其他用户的家目录;
- /lib:存放系统和程序运行的库函数文件的目录;
- /root:root用户的家目录;
- /sbin:存放根用户执行的命令文件;
- /srv:服务启动后需要访问的数据;
- /tmp:临时文件存放的目录; 任何人都可以访问
- /opt:存放第三方程序的建议安装目录;
- /media:外部设备的挂载点目录;
/run:当前运行的进程信息;
/sys:存放系统硬件信息;
/var:存放可变数据的目录;
/proc:反应的是实时的内存中信息及内核信息;
/lib64:存放库文件的目录;
/mnt:外部设备的挂载点目录;
/usr:用户的程序管理目录;
2.切换,创建,删除
pwd 显示当前完整的工作目录
cd [目录路径]
变换工作目录至制定目录路径,若[目录路径]参数省略则变换至使用者的家目录,其中[目录路径]可为绝对路径或相对路径
另外 "~" 在Bash中表示当前用户家目录, "." 表示当前所在的目录 ".." 表示当前所在目录的上一层目录,”-” 则表示本次跳转前所处的目录。
范例 :
跳转到 /usr/bin/ : cd /usr/bin
回退到前一个目录:cd -
跳到目前目录的上上两层: cd ../..
mkdir [选项]... 目录...
若指定目录不存在则创建目录。
¨ -m, --mode=模式 设置权限模式(类似chmod命令)
¨ -p 需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理
rmdir 目录
删除目录,只能删除空目录
3.列出文件,文件属性
1.ls [文件名|目录名|none] 列出目录下的文件
-a 列出所有文件,包括隐藏文件
-l 列出文件详细信息
-al 列出所有文件详细信息
-R 将目录下所有的子目录的文件都列出来,相当于我们编程中的“递归”实现
-s 在每个文件的后面打印出文件的大小。 size(大小)
2.详细信息:七个字段
1.类型和权限 2.文件硬链接数 3.文档拥有者4.文档所属用户组5.文件大小6.时间戳,文件最近修改时间7.文件名
1,3,4字段决定了文件完整的访问权限
3.权限字段共11个字符,第1个字符是文件的类型
在Linux中,文件总共有7种类型,下面就是这7种文件及其类型代码字符:
1. - 常规文件
2. d 目录文件
3. l 符号链接文件
4. c 字符特殊设备文件
5. b 模块特殊设备文件
6. p FIFO管道文件
7. s 套接字文件
2-4,5-7,8-10字符分别是文件对于文件所有者、文件组成员和其他用户可以规定不同的访问权限,这些权限就是读(r)、写(w)、执行(x)和无权限(-)
这对读(r)、写(w)、执行(x)这三种权限于普通文件和目录的含义是不同的:
r w x
文件读取文件 编辑文件 执行可执行文件
列出目录内容 移动、建立、删除文件/目录 进入目录
4.用户(user)是能够获取系统资源的权限的集合。Linux中的用户可以分为三类:
根用户(root):具有系统全部权限的用户;
普通用户:其使用系统的权限受到一定限制;
系统用户:也称虚拟用户,是保障系统运行的用户,一般不通过Shell登录系统。
用户组(group)就是具有相同特征的用户(user)的集合体。
5.chmod [选项]... 模式[,模式]... 文件...
或:chmod [选项]... 八进制模式文件...
或:chmod [选项]... --reference=参考文件文件...
将每个文件的模式更改为指定值。
¨ --reference=参考文件 使用指定参考文件的模式,而非指定权限值
¨ -R, --recursive 以递归方式更改所有的文件及子目录
修改或者设置文件访问权限可以用两种方法:
一种是助记符的方法,助记符分为三个部分:
对象助记符:可以是 a 代表所有用户,u代表文件拥有者,g代表文件组用户,o代表其他用户
操作助记符:可以是+代表添加权限,-代表删除权限,=代表设置权限
权限助记符:r代表可读,w代表可写,x代表可执行
如果你想对用户、组合或其他设置不同的权限,可以通过逗号分隔不同的表达,例如chmod u+r, g=rx,o-rwx hello.sh 表示为文件拥有者增加读权限,设置文件组用户权限为可读可执行,删除其他用户的所有权限
另一种是使用八进制取代符号设置权限:用 4位八进制数字来表示一个文件的访问权限
6.chown [选项]... [所有者][:[组]] 文件...
或:chown [选项]... --reference=参考文件文件...
更改每个文件的所有者和/或所属组。当使用 --referebce 参数时,将文件的所有者和所属组更改为与指定参考文件相同,注意,只有root用户才能变更文件的所有者,只有某用户组的成员用户才能将文件组设置为为该用户组。
¨ --reference=参考文件使用参考文件的相关属性,而非指定值
¨ -R, --recursive 递归处理所有的文件及子目录
4.拷贝,剪切,删除,创建文件
1.cp [选项]... [-T] 源文件目标文件
或:cp [选项]... 源文件... 目录
或:cp [选项]... -t 目录源文件...
将源文件复制至目标文件,或将多个源文件复制至目标目录。
\cp -f 强制覆盖所有同名文件
¨ -f 如果目标文件无法打开则将其移除并重试
¨ -i 覆盖前询问(使-n选项失效)
¨ -l 只创建硬链接文件而不复制文件
¨ -n 不覆盖已存在的文件(使-i选项失效)
¨ -p 复制时保留文件的访问权限,拥有者,文件组和时间戳
¨ -r/R 递归复制目录及其子目录内的所有内容
¨ -s 只创建符号链接而不复制文件
¨ -u 只在源文件文件比目标文件新,或目标文件不存在时才进行复制
2.mv [选项]... [-T] 源文件目标文件
或:mv [选项]... 源文件... 目录
或:mv [选项]... -t 目录源文件...
将源文件重命名为目标文件,或将源文件移动至指定目录。
¨ -f 覆盖前不询问
¨ -i 覆盖前询问
¨ -n 不覆盖已存在文件
¨ -u 只在源文件文件比目标文件新,或目标文件不存在时才进行移动
如果指定了-i、-f、-n 中的多个,仅最后一个生效。
mv 没有-R 选项,mv可以直接移动目录
3.rm [选项]... 文件...
删除 (unlink) 文件。
¨ -f 强制删除。忽略不存在的文件,不提示确认
¨ -i 在删除前需要确认(默认选项)
¨ -R 递归删除目录及其内容
4.touch 文件名
创建文件,如已存在,改变时间戳
5.链接文件
1.文件存储:一个文件本身的数据总是放在在一个块(block)或者块的集合中。文件的信息(包括文件类型、读写权限、文件所有者、文件组、文件大小、文件链接数目,文件时间戳等)放在在一个 inode 中,一个文件只对应一个inode,而且这个inode在本文件系统内是惟一的
2.目录条目:在Linux中,一个目录文件总是包含一个目录条目清单,所有此目录中的文件或者子目录都体现为这个目录条目清单中的一个目录条目,目录条目包含这个个文件名或目录名,以及指向该文件或目录的 inode 的指针
3.链接有两种:符号链接(symbolic link)和硬链接(hard link)
硬链接:仅仅是文件或目录的一个附加目录条目,允许同一文件或目录有多个名字。
ln命令会增加链接数,rm命令会减少链接数。一个文件除非链接数为0,否则不会从文件系统中被物理地删除。无额外链接的文件的链接数为l。
对硬链接有如下限制:
- 不能对目录文件做硬链接。(普通用户没有创建目录硬链接的权限,只有根用户可以通过“ln –f”命令强制为目录创建硬链接,不推荐)
- 不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中。
符号链接:是指向包含另一目录条目的文件的一个目录条目。符号链接也称为 symlinks。
符号链接确实是一个新文件,具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
通俗来说,文件的硬链接就可以理解为文件的一个别名,而符号链接则可以视为文件的一个快捷方式。
4.ln [选项] 连接指向的文件 连接名
默认创建硬链接,当使用-s 时创建符号链接。当创建硬链接时每个指定的目标都必须存在。符号链接可以指向任意的位置(包括不存在的位置)。
¨ -s 创建符号链接
¨ -d 创建指向目录的硬链接(只适用于超级用户)
¨ -f, 强行覆盖任何已存在的目标文件
¨ -i 覆盖文件前进行确认
6.归档压缩文件
1.tar <操作> [选项] 归档名文件列表
操作:
-
-c 创建一个新的归档文件
-
-r 向归档文件末尾追加文件
-
-u 更新归档文件
-
-x 从归档文件中解出文件
-
-t 列出归档文件中的文件
-
--delete 从归档文件中删除一个文件
-
-A 合并两个规档文件
选项:
-
-C 指定一个解档目录
-
-f 指定一个归档文件/设备进行操作
-
-z 调用gzip来压缩/解压缩文件
归档文件的“.tar”后缀名不是必须的,但是一般我们都会加上这个后缀,以告诉用户这个文件是一个归档文件
-f选项后必须紧跟归档文件名
tar不会压缩文件
2.gzip [选项] 压缩(解压缩)的文件名
-d 将压缩文件解压。
-c 将输出写到标准输出上,并保留原有文件。
-r 递归式压缩/解压缩指定目录中的所有文件。
-num 用指定的数字num调整压缩的速度和压缩比。(1-9数字 压缩比,数字越大,压缩后文件越小,压缩越慢)
-v 对每一个压缩和解压的文件显示文件名和压缩比.
-t 测试,检查压缩文件是否完整。
gzip 在压缩文件过程中,会自动为文件添加一个“.gz”的后缀名,并且将原文件删除
3.打包压缩:tar -czf 压缩文件名.tar.gz 归档名文件列表
解档解压:tar -xzf 压缩文件名.tar.gz
7.查找文件
1.locate [查找路径][文件名关键字]
查找快,功能简单,linux将系统中的所有文件名记录在/var/lib/mlocate数据库中
会查找到删除的,和查不到刚新建的,数据库不实时更新,可用updatedb更新
2.find [查找范围][查找条件][动作]
find <path> <-option> [-print | -ls] [-exec|-ok <command> {} \;]
在<path>指定的目录结构中搜索文件,并执行指定的操作。
find需要根据某个条件在特定的目录进行查找,有以下常用的查找选项:
¨ -print 将查找到的文件输出到标准输出
¨ -exec command {} \; 将查到的文件执行command操作,{} 和 \;之间有空格
¨ -fprint <filename> 将查找到的文件输出到指定文件
¨ -ok 和-exec相同,只不过在操作前要询问用户
¨ -name <filename> : 查找名为filename的文件,即按文件名查找。
¨ -iname <filename> : 与-name相同,只是忽略大小写(-i);
¨ -perm : 按执行权限来查找 ,后是八进制,如777
¨ -user <username> : 按文件属主来查找
¨ -group <groupname> : 按组来查找
¨ -amin <-n|+n> : 按文件访问时间来查找文件,-n指n分钟以内,+n指n分钟以前,n表示第n分钟
¨ -atime <-n|+n> : 按文件访问时间来查找文件,-n指n天以内,+n指n天以前
¨ -cmin <-n|+n> : 按文件创建时间来查找文件,-n指n分钟以内,+n指n分钟以前
¨ -ctime <-n|+n> : 按文件创建时间来查找文件,-n指n天以内,+n指n天以前
¨ -mmin <-n|+n> : 按文件更改时间来查找文件,-n指n分钟以内,+n指n分钟以前
¨ -mtime <-n|+n> : 按文件更改时间来查找文件,-n指n天以内,+n指n天以前
¨ -empty : 空白文件、空白文件夹、没有子目录的文件夹
¨ -newer <f1 !f2> : 查更改时间比f1新但比f2旧的文件
¨ -type <b|d|c|p|l|f> : 查是块设备/目录/字符设备/管道/符号链接/普通文件
¨ -prune : 忽略某个目录
¨ -size <+n|-n> :根据文件大小查找文件,+n表示超过n大小的文件,-n表示小于n大小的文件
*find命令的所谓“命令动作(Actions)”,表示在查找到文件后,要对这些文件所做的操作,我们在这里只介绍其中三个常用的命令动作:
–print:find命令的默认动作,将查找到的文件名输出
–ls:将将查找到的文件名以ls –dils格式输出
-exec command ; :对查找到的文件名执行指定命令,命令command由用户指定,用{} 代表查找到的文件,用\;结束。
-ok command ; :与-exec非常类同,只不过在对文件执行指定命令之前会询问用户是否执行
*atime:文件最后被访问时间(Time when file data was last accessed.),atime 是在读取文件或者执行文件时更改的。
mtime:文件内容最后被更改的时间(Time when data was last modified.),mtime 是在写入文件时随文件内容的更改而更改的
ctime:文件状态(属性或者内容)最后被更改的时间(Time when file status was last changed),ctime 是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改的。
文件时间戳(Timestamp)指的是文章的mtime。
*在find命令支持用逻辑运算符来操作单个逻辑条件,或者将逻辑条件连接起来:
–a 表示与
–o 表示或
!表示取反
注意:使用多个条件时,这些条件要用圆括号括起来,左右圆括号还要使用反斜杠"\"来进行转义,以防止shell的解释
8.通配符
字符 | 含义 | 实例 |
* |
匹配 0 或多个字符 |
a*b a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。 |
? |
匹配任意一个字符 |
a?b a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。 |
[list] |
匹配 list 中的任意单一字符 |
a[xyz]b a与b之间必须也只能有一个字符,但只能是 x 或 y 或 z, 如: axb, ayb, azb。 |
[!list] |
匹配除list 中的任意单一字符 |
a[!0-9]b a与b之间必须也只能有一个字符,但不能是阿拉伯数字, 如axb, aab, a-b。 |
[c1-c2] |
匹配 c1-c2 中的任意单一字符如:[0-9] [a-z] |
a[0-9]b 0与9之间必须也只能有一个字符如a0b, a1b... a9b。[0-9a-fA-F] 表示任何大写或小写十六进制数位。 |
{string1,string2,...} |
匹配 sring1 或 string2 (或更多)其一字符串 |
a{abc,xyz,123}b a与b之间只能是abc或xyz或123这三个字符串之一。 |
9.查看文本文件
1.cat [选项]... [文件]...
将[文件]或标准输入组合输出到标准输出。
-
-b对非空输出行编号
-
-E在每行的未尾添加$符号,便于确认每一行,因为有些行内容太长了,在显示时会在显示器上以多行表示。
-
-n对输出的所有行编号
-
-s将相连的多个空行用一个空行来代替
-
-T将Tab字符显示为^I
如果没有指定文件,或者文件为"-",则从标准输入读取。适合查看较小的文本文件
2.less [选项]... [文件]...
对文件或其它输出进行分页显示。
-
-n对输出的所有行编号
-
-M 输出打开的文件名,当前显示的行数,总行数和光标当前所处文档位置
-
-s将相连的多个空行用一个空行来代替
-
-S 截断过长的行而不换行显示
在less中,可以使用如下命令来控制文本的查看:
搜索命令/pattern从光标处向下搜索与pattern匹配的字符串
?pattern从光标处向上搜索与pattern匹配的字符串
n跳到下一个匹配的文本
N跳到上一个匹配的文本
q退出
!command调用Shell命令
3.head [选项]... [文件]...
将每个指定文件的头10 行显示到标准输出。
如果指定了多于一个文件,在每一段输出前会给出文件名作为文件头。如果不指定文件,或者文件为"-",则从标准输入读取数据。
-
-c K 显示每个文件的前K 字节内容;如果附加"-"参数,则除了每个文件的最后K字节数据外显示剩余全部内容
-
-n K 显示文件的前K 行内容.
tail [选项]... [文件]...
显示每个指定文件的最后10 行到标准输出。