Linux的基本思想之一是:一切都是文件。
系统中的所有都被视为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。
Linux目录树
为了统一Linux各分支(distributions)的目录结构,引入了文件目录配置标准(File Hierarchy System,FHS)
Linux的目录是以目录树的结构组织的,所有目录都在根目录下(/), 其它所有的目录、文件、设备都在/之下.
从根目录开始的文件路径称为绝对路径,同一系统下的每个文件的绝对路径是唯一的
.
表示工作目录(如./file),..
表示上一层目录,-
代表上一个工作目录,~
代表当前用户的home目录,~用户名
代表相应用户的home目录
根目录下第一层目录为:
-
/bin:bin 是二进制(binary)英文缩写, 常用的系统命令文件均处于此目录下.
-
/boot:Linux的内核及引导系统程序所需要的文件目录.
-
/cdrom: 光盘挂载目录
-
/dev: dev 是设备(device)的英文缩写,保存设备文件,并非设备驱动
-
/etc: 系统配置目录
-
/home: 普通用户主目录
-
/lib: 存放动态链接库(dll)
-
/lost+found: 在ext2或ext3文件系统中,当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统
-
/mnt: 常用作存储设备挂载目录
-
/media: 某些发行版用作存储设备挂载目录
-
/proc: 存储在内存中的虚拟文件系统,包括内存中系统内核,进程,网络与外部设备状态等.
-
/sys:与/proc类似的存储在内存中的虚拟文件系统,主要记录与内核有关的信息包括已加载的内核模块,内核检测到的硬件设备等.
-
/root:Linux超级权限用户root的home目录.
-
/sbin: 这个目录是用来存放系统管理员的系统管理程序,只有超级权限用户root可执行此目录下的命令,普通用户无权限执行这个目录下的命令.
-
/selinux :Secure Enhance Linux执行目录,主要进行程序(特别是网络程序)的权限控制.
-
/tmp:临时文件目录,用来存放不同程序执行时产生的临时文件.
-
/srv: 服务所需的数据目录
-
/usr: 存放用户应用程序和文件, /usr/local通常用来存放手动安装而不是由包管理器安装的文件.
-
/usr/share: 系统共用的东西存放地,比如 /usr/share/fonts 是字体目录,/usr/share/doc和/usr/share/man帮助文件。
-
/var: var是vary的简写,用于存放频繁变动的文件,比如/var/log用来存放系统日志.
Linux文件类型
普通文件
存储器存储的数据文件,由ls -l命令将这类文件的类型标记为[-].
可以大致分为:
-
纯文本文件: 以ASCII编码存储的文件
-
可执行二进制文件
-
二进制数据文件
二进制文件是否可执行不由后缀名而由是否拥有x权限来确定.
文件名由主文件名和后缀名两部分组成,以'.'开始文件为隐藏文件.ls命令不显示隐藏文件,需要使用ls -a参数显示隐藏文件.
Linux下的后缀名只提醒文件类型,不具有文件关联. 现在很多Linux桌面环境都提供了根据后缀名调用相应程序读取文件的功能.
目录文件
目录,类型显示为[d].
符号链接文件
类似Windows下的快捷方式,类型显示为[l].
设备文件
系统外设在Linux下被认为是一个文件, 分为:
-块设备文件
提供随机访问的设备,如硬盘。类型标为[b].
- 字符设备文件
串行端口的接口设备,只能进行顺序读取。例如键盘、鼠标等等。类型标为 [c].
套接字
网络通信套接字(socket),类型标记为[s]
管道文件
解决多进程并发读写同一个文件的特殊类型,类型标记为[p].
Linux文件权限和属性
文件权限和属性
ls命令可以显示文件的属性和权限,
$ls -al
-rwxr-xr-- 1 root root 42304 Sep 4 18:26 install.log
第一个字符代表文件的类型, [-]代表文件,[d]代表目录,[l]代表链接文件, [b]块设备文件,[c]字符设备文件
后面的九个字符分为三组,每组字符依次代表文件所有者(user),用户组(group),他人(others)的权限. 超级用户(root)对文件的访问是不受限制的.
每组由r,w,x三个字符组成,[r]代表可读(read),[w]代表可写(write),[x]代表可执行(execute)。三个字符的位置不会改变,如果没有该权限相应位置将出现[-].
对文件而言,r代表读取文件内容的权限,w代表修改文件的权限但没有删除文件的权限,x代表执行权限。
Windows系统下的文件可否执行由后缀名决定,Linux操作系统下文件能否执行取决于有无可执行权限,当然执行不可执行的文件系统将报错。
对目录而言,r代表读取目录内容的权限,用户可以用ls命令查看目录下的内容; 目录的可执行权限代表能否使用cd命令将该目录变成工作目录,如果无法转换成工作目录那么用户也无法执行该目录下的命令。
对目录的可写权限[w]代表可以对目录下的文件和子目录进行删除(即使对该文件/目录本身没有任何权限),重命名,移动,复制,新建等所有权限。但是,拥有该权限不能对目录本身进行上述操作,那是它父目录的权限。
第二列的数字表示有多少文件名链接此节点(inode), 文件系统通过inode记录文件的权限和属性.
第三列表示文件所有者,第四列表示所属用户组.
第五列表示文件大小单位为字节, 第六列表示最后修改日期.
最后一列是文件名, 以"."开头的文件名表示为隐藏文件.
Linux的文件包括修改时间(Modification Time,mtime); 状态改变时间(Status Time, ctime);读取时间(Access Time, atime).
当文件被读取时atime将会更新,当属性或权限改变时将会更新ctime但不会更新mtime,后者只会在文件内容被改变时更新。通常使用ls命令查看时显示的是文件的mtime.
修改所有者和文件权限
** 改变文件所有者 **
chown [-r] [user] [file]
r代表递归(recursive)即应用到所有子目录和子文件夹
user参数可以同时修改所有者和用户组, 中间用":"或"."分隔, 如chmod user.grp file
也可以只修改文件用户组, chmod .grp file
** 修改文件用户组 **
chgrp [-r] [grp] [file]
用法类似chown, 但只能修改用户组
** 改变文件权限 **
chmod [-r] [expr] [file]
-r选项代表递归, expr为权限表达式有数字式或符号式两种.
数字式的每一位由1,2,4分别代表x,w,r三种权限, 0代表无权限. 三者之和为某一身份用户的所有权限如7代表所有权限, 5代表rx权限.
数字式由三位数字组成,分别代表owner, group和other的权限, 如chmod 777 file
代表所有人都有rwx权限, chmod 740
代表owner有rwx, group有r权限,其它人无权限.
符号式用u,g,o代表所有者, 用户组和其它用户, a代表所有用户. r,w,x代表读,写,执行权限三者可以以任意顺序组合.
"="代表指定用户权限, 如chmod a=rxw
给予所有用户所有权限, chmod g=rx,o=r
给予用户组rx权限无w权限, 其他人r权限无wx权限.
"+"代表新增权限,若用户已拥有新增的权限则不起作用, 'chmod a+r'所有人新增r权限
"-"代表移除权限, 若用户本无此权限则不起作用, chmod o-x
移除other的x权限.
默认文件权限
umask [-S] [expr]
umask用于设置权限掩码, 掩码是默认不给与用户的文件权限.
在没给出掩码参数时该命令将显示当前掩码.显示掩码时,使用-S
参数将显示符号式默认权限.
$ umask
0002
$ umask -S
u=rwx,g=rwx,o=rx
设置掩码时只能采用数字式, 后三位的含义与chmod的数字式表达相同, 第一位代表特殊文件权限.
特殊文件权限
umask中的第一位代表特殊文件权限SUID,SGID,SBIT.
SUID(Set UID)仅对二进制可执行文件有效,且用户必须拥有其执行权限。SUID属性的文件在其执行期间(run tiime),执行者拥有和文件所有者相同的权限。
SGID(Set GID)与SUID类似,只是执行者只拥有用户组权限.
当文件被设置了SUID或SGID权限时,使用ls命令查询权限时所有者或用户组的执行权限位置会显示s而非x
SBIT(Sticky Bit)仅对目录有效,当用户对目录拥有w、x权限时,其在其下创建的文件或目录只有自己或着root可以删除。设置了SBIT权限后,others执行权限位置将显示t.
Linux常用文件操作
这里只列出指令常用操作, 更详细的操作请使用man
或--help
等帮助系统和文档.
cd
cd [path]
切换工作目录
pwd
pwd
显示工作目录(Print Working Director).
在使用链接文件作为工作目录时:
-
-L
或--logical
: 显示链接文件的路径 -
-P
或--physical
(默认): 显示链接指向的路径
ls
ls [dir]
选项:
-
-a
(--all
) 列出所有文件包括隐藏文件和“.”、“..”这两个目录 -
-A
(--almost-all
) 列出所有文件和目录,但不包括“.”和“..”这两个目录 -
-d
(--director
) 仅列出当前目录的信息,不列出子目录和文件的信息 -
-f
不进行排序直接列出结果(默认按文件名进行排序) -
-h
(--human-readable
) 以人类较易读的方式(KB ,MB,)的形式列出文件大小 -
-l
使用长数据格式,包含权限和属性等信息 -
-n
(--numeric-uid-gid
) 使用UID和GID来代替用户和用户组名
cp
复制文件或目录
cp [src] [dest]
选项:
-
-a
(--archive
) 此参数的效果和同时指定"-dpR"参数相同 -
-b
(--backup
) 删除、覆盖目的文件先备份。假如没有加上这个参数,在复制过程中若遇到符号链接,则会直接复制源文件或目录 -
-f
(--force
) 强行复制文件或目录, 不论目的文件或目录是否已经存在
--i
(--interactive
)覆盖文件之前先询问用户
-
-l
(--link
) 对源文件建立硬链接,而非复制文件 -
-p
(--preserve
) 保留源文件或目录的属性,包括所有者、所属组、权限与时间 -
-r
(--recursive
) 递归处理,将指定目录下的文件及子目录一并处理 -
-s
(--symbolic-link
) 对源文件建立符号链接,而非复制文件 -
-u
(--update
) 只有当源文件比目标文件更新或目标文件不存在时才进行复制
cp的源文件可以是单个或多个,当源文件是多个时目标文件必须是目录.
cp产生的目标文件权限通常是命令操作者,若要保留原权限需要使用p参数.
rm
移除文件或目录
rm [file/dir]
选项:
-f
(--force
)忽略不存在的文件,不出现警告信息-i
(interactive)移除前将询问是否要执行操作-r
(recursive)递归删除,将子文件和子目录一同删除
参数也可以是正则表达式
mv
mv [src] [dest]
移动或重命名文件(目录)
选项:
-f
(--force
) 强行复制文件或目录, 不论目的文件或目录是否已经存在-i
(--interactive
) 覆盖文件之前先询问用户-u
(--update
) 只有当源文件比目标文件更新或目标文件不存在时才进行复制-n
(--no-clobber
)不进行覆盖
mkdir
mkdir [dir]
创建空目录
选项:
-
-m
(--mode
)直接设置文件权限而不使用umask -
-p
(--parents
)递归建立父目录 -
-v
(-verbose
)每次创建都返回报告
rmdir
rmdir [dir]
删除空目录
cat
cat [file]
查看文本文件
选项:
-A
此参数的效果和同时指定-vET
参数相同-b
(--number-nonblank
)显示行号,不含空行-E
(--show-ends
)显示结尾的“$”字符-n
(--number
)显示行号,包含空行-T
(--show-tabs
)将[Tab]以^I显示出来-v
(--show-nonprinting
)显示非打印字符
touch
touch [file]
修改文件时间,当文件不存在时创建空文件。
-a 仅修改atime
-c 仅修改ctime
-d 不使用系统日期,而使用给定日期
-m 仅修改mtime
-t 不使用系统时间,而使用给定时间
tac
就是以行为单位反向查看,与cat正好相反(连名字也是~)
head / tail
head [file]
或
显示文件开头或结尾
-c k 显示开头(结尾)的k个字符。head中-k 表示除最后k个字符外均显示,tail中+k表示除开头k个字符外均显示。
-n k 显示开头(结尾)的k行。head中-k 表示除最后k行外均显示,tail中+k表示除开头k行外均显示。
默认显示前(末)10行,可以通过选项来调整。
less / more
less [file]
可以上下翻页,操作和man page相同提供翻页,查找等操作。
more [file]
可以实现翻页查看,只能向下查找。:f可以显示文件名和行数
nl
显示行号的输出,可以进行更多个性化设置
更多操作参见Linux帮助系统