目录
1 Linux 文件系统简介
- 在 Linux 操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件;
- 在 Linux 系统中有一个重要的概念:一切都是文件。其实这是 Unix 哲学的一个体现,而 Linux 是重写 UNIX 而来,所以这个概念也就传承了下来。在 UNIX 系统中,把一切资源都看作是文件,包括硬件设备。UNIX 系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问;
2 Linux 目录结构
Linux 文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录。
目录说明:
- /root:超级用户(系统管理员)的主目录;
- /bin:存放二进制可执行文件(ls、cat、mkdir等),常用命令一般都在这里;
- /etc:存放系统管理和配置文件;
- /home:存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示;
- /usr:用于存放系统应用程序;
- /opt:额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里;
- /proc:虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息;
- /sbin: 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等;
- /dev:用于存放设备文件;
- /mnt:系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;
- /boot:存放用于系统引导时使用的各种文件;
- /lib:存放着和系统运行相关的库文件 ;
- /tmp:用于存放各种临时文件,是公用的临时文件存储点;
- /var:用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等)等;
- /lost+found: 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫XX.chk)就在这里;
3 Linux 文件类型
常见的文件类型及其含义有:
- d:目录
- -:普通文件
- l:链接文件
- c:字符设备文件
- b:块设备文件
4 Linux 文件权限
用户分为三种:
- 文件拥有者(owner)
- 群组(group)
- 其它人(other)
对不同的用户有不同的文件权限.
文件权限字段一共有 9 位。每 3 个为一组,共 3 组,每一组分别代表对文件拥有者、所属群组以及其他人的文件权限。一组权限中的 3 位分别为 r、w、x 权限,表示可读、可写、可执行;
文件权限字段的八进制模式:
权限 | 二进制位 | 八进制位 |
---|---|---|
--- | 000 | 0 |
--x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r-- | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
修改权限
1 使用数字修改文件权限
命令基本格式为:
chmod [-R] 权限值 文件名
-R表示连同子目录中的所有文件,也都修改设定的权限。
示例:将 .bashrc 文件的权限修改为 -rwxr-xr–。
chmod 754 .bashrc
2 使用字母修改文件权限
命令基本格式为:
chmod [ugoa] [+-=] [rwx] dirname/filename
- u:拥有者
- g:所属群组
- o:其他人
- a:所有人
- +:添加权限
- -:移除权限
- =:设定权限
示例:为 .bashrc 文件的所有用户添加写权限。
chmod a+w .bashrc
5 Linux 文件属性
使用 ls -l查看一个文件的信息时,会显示一个文件的信息,例如
drwxr-xr-x 3 root root 17 May 6 00:14 .config
对这个信息的解释如下:
- drwxr-xr-x:文件类型以及权限,第 1 位为文件类型字段(这里是 d,即目录),后 9 位为文件权限字段(rwxr-xr-x)
- 3:链接数
- root:文件拥有者
- root:所属群组
- 17:文件大小
- May 6 00:14:文件最后被修改的时间
- .config:文件名
6 目录的基本操作
6.1 ls
列出文件或者目录的信息,目录的信息就是其中包含的文件。
# ls [-aAdfFhilnrRSt] file|dir
-a :列出全部的文件
-d :仅列出目录本身
-l :以长数据串行列出,包含文件的属性与权限等等数据
...
6.2 cd
更换当前目录。
cd [相对路径或绝对路径]
6.3 mkdir
创建目录。
# mkdir [-mp] 目录名称
-m :配置目录权限
-p :递归创建目录
6.4 rmdir
删除目录,目录必须为空。
rmdir [-p] 目录名称
-p :递归删除目录
6.5 pwd
显示当前所在位置。
7 文件的基本操作
7.1 touch
- 把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;
- 用来创建新的空文件;
# touch [-acdmt] filename
-a :更新读取时间
-c :若该文件不存在则不建立新文件
-m :更新修改时间
-d :后面可以接更新日期而不使用当前日期,也可以使用 --date="日期或时间"
-t :后面可以接更新时间而不使用当前时间,格式为[YYYYMMDDhhmm]
7.2 cp
复制文件。如果源文件有两个以上,则目的文件一定要是目录才行。
# cp [-adfilprsu] source destination
-a :相当于 -dr --preserve=all
-d :若来源文件为链接文件,则复制链接文件属性而非文件本身
-i :若目标文件已经存在时,在覆盖前会先询问
-p :连同文件的属性一起复制过去
-r :递归复制
-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制
--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了
7.3 rm
删除文件。
# rm [-fir] 文件或目录
-f :即使原档案属性设为唯读,亦直接删除,无需逐一确认
-i :删除前逐一询问确认
-r :将目录及以下之档案亦逐一删除
7.4 mv
移动文件。
# mv [options] source dest
# mv [options] source... directory
-b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。
-i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。
-f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。
-n: 不要覆盖任何已存在的文件或目录。
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
7.5 vim
文本编辑器。
- i 切换到输入模式,以输入字符;
- : 切换到底线命令模式,以在最底一行输入命令。
命令 | 作用 |
---|---|
:w | 写入磁盘 |
:w! | 当文件为只读时,强制写入磁盘。到底能不能写入,与用户对该文件的权限有关 |
:q | 离开 |
:q! | 强制离开不保存 |
:wq | 写入磁盘后离开 |
:wq! | 强制写入磁盘后离开 |
8 获取文件内容
8.1 cat
取得文件内容。
# cat [-AbEnTv] filename
-n :打印出行号,连同空白行也会有行号,-b 不会
8.2 tac
是 cat 的反向操作,从最后一行开始打印。
8.3 more
和 cat 不同的是它可以一页一页查看文件内容,比较适合大文件的查看。
8.4 less
和 more 类似,但是多了一个向前翻页的功能。
8.5 head
取得文件前几行。
# head [-n number] filename
-n :后面接数字,代表显示几行的意思
8.6 tail
是 head 的反向操作,取得文件后几行。
9 文件搜索
9.1 whereis
文件搜索。速度比较快,因为它只搜索几个特定的目录。
# whereis [-bmsu] dirname/filename
9.2 locate
文件搜索。可以用关键字或者正则表达式进行搜索。
locate 使用 /var/lib/mlocate/ 这个数据库来进行搜索,它存储在内存中,并且每天更新一次,所以无法用 locate 搜索新建的文件。可以使用 updatedb 来立即更新数据库。
# locate [-ir] keyword
-r:正则表达式
9.3 find
文件搜索。可以使用文件的属性和权限进行搜索。
# find [basedir] [option]
# examples:
find -name "target.java" # 当前目录下查找文件
find / -name "target.java" # 根目录下查找文件
find ~ -name "target.java" # /home 目录下查找文件
find ~ -name "target.*" # /home 目录下查找文件(模糊查询)
find ~ -iname "target.java" # /home 目录下查找文件(忽略大小写)