1. Linux文件目录架构
Linux的目录结构与win的目录有很大不同,首先,没有盘符的概念;然后Linux使用斜杠/标识目录,Linux首先建立一个根目录,然后将其他文件系统挂载到这个目录下。
Linux系统主要目录及内容:
目录 | 内容 |
/bin | 构建最小系统所需要的命令 |
/boot | 内核与启动文件 |
/dev | 设备文件 |
/etc | 系统软件的配置文件 |
/home | 主目录 |
/lib | 编译器库 |
/media | 可移动介质安装点 |
/opt | 应用安装包 |
/proc | 进程的映像 |
/root | root用户主目录 |
/sbin | 和系统操作有关的命令 |
tmp | 临时文件 |
/usr | 非系统的程序和命令 |
/var | 系统专用的数据和配置文件 |
路径:
- 相对路径:凡是以当前工作目录或者其他以非斜线字符为起始字符的所有路径都为相对路径;
- 绝对路径:必须从根目录/开始;
Linux文件系统中的每一个目录均包含两个特殊目录
- . 代表当前目录
- .. 代表父目录
2. 建立目录 mkdir
wangzhengchao@ubuntu:~$ ls Desktop Documents Downloads examples.desktop Music Pictures Public Templates Videos wangzhengchao@ubuntu:~$ mkdir test1 test2 wangzhengchao@ubuntu:~$ ls Desktop Downloads Music Public test1 Videos Documents examples.desktop Pictures Templates test2
使用绝对路径建立目录:
wangzhengchao@ubuntu:~$ ls Desktop Downloads Music Public test1 Videos Documents examples.desktop Pictures Templates test2 wangzhengchao@ubuntu:~$ mkdir /home/wangzhengchao/test1/hello wangzhengchao@ubuntu:~$ ls test1/ hello
使用-p选项,建立一个完整的子目录结构:
wangzhengchao@ubuntu:~$ ls Desktop Downloads Music Public test1 Videos Documents examples.desktop Pictures Templates test2 wangzhengchao@ubuntu:~$ mkdir -p ~/test3/hello wangzhengchao@ubuntu:~$ ls test3/ hello
3. 建立空文件 touch
wangzhengchao@ubuntu:~$ ls Desktop Downloads Music Public test1 test3 Documents examples.desktop Pictures Templates test2 Videos wangzhengchao@ubuntu:~$ touch test4 wangzhengchao@ubuntu:~$ ls Desktop Downloads Music Public test1 test3 Videos Documents examples.desktop Pictures Templates test2 test4
touch还可以更新一个文件到建立日期和时间:
wangzhengchao@ubuntu:~/test2$ ls -l 总用量 0 -rw-rw-r-- 1 wangzhengchao wangzhengchao 0 11月 4 20:16 hello wangzhengchao@ubuntu:~/test2$ touch hello wangzhengchao@ubuntu:~/test2$ ls -l 总用量 0 -rw-rw-r-- 1 wangzhengchao wangzhengchao 0 11月 4 20:18 hello
4. 移动和重命名 mv
移动文件:
wangzhengchao@ubuntu:~$ ls Desktop Downloads Music Public test1 test3 Videos Documents examples.desktop Pictures Templates test2 test4 wangzhengchao@ubuntu:~$ mv test4 test1/hello/ wangzhengchao@ubuntu:~$ ls Desktop Downloads Music Public test1 test3 Documents examples.desktop Pictures Templates test2 Videos wangzhengchao@ubuntu:~$ ls test1/hello/ test4
移动目录:
wangzhengchao@ubuntu:~$ ls Desktop Downloads Music Public test1 test3 Documents examples.desktop Pictures Templates test2 Videos wangzhengchao@ubuntu:~$ mv test3/ test1/ wangzhengchao@ubuntu:~$ ls Desktop Downloads Music Public test1 Videos Documents examples.desktop Pictures Templates test2 wangzhengchao@ubuntu:~$ ls test1 hello test3
如果直接使用mv指令移动文件,且目标目录有同名文件,则会直接替换,不提示任何信息,为此,我们可以使用-i 或者-b 选项, -i会提示是否覆盖;-b会把首先在目标目录到同名文件后加一个~,避免覆盖。
重命名;
wangzhengchao@ubuntu:~$ ls Desktop Downloads Music Public test1 Videos Documents examples.desktop Pictures Templates test2 wangzhengchao@ubuntu:~$ mv test2 test3 wangzhengchao@ubuntu:~$ ls Desktop Downloads Music Public test1 Videos Documents examples.desktop Pictures Templates test3
5. 复制文件和目录 cp
cp用法基本与mv一致,但对于自动跳过目录到情况,可以使用-r选项将子目录连同其中到文件一起复制到另一个目录下。
6. 删除目录与文件 rmdir / rm
删除目录之前,一定要检查该目录是不是空目录,rmdir只能删除空目录。rm用于删除文件,使用带有-r选项到rm指令,可以递归的删除目录下到所有文件和子目录,如下:
wangzhengchao@ubuntu:~$ ls Desktop Documents Downloads examples.desktop Music Pictures Public Templates test1 Videos wangzhengchao@ubuntu:~$ ls test1 hello test3 wangzhengchao@ubuntu:~$ rm -r test1/ wangzhengchao@ubuntu:~$ ls Desktop Documents Downloads examples.desktop Music Pictures Public Templates Videos
使用rm指令时,一定要谨慎,最好使用带有-i选项的rm
7. 查看文件和目录的属性
Linux为3种人准备了权限:文件所有者(属主),文件属组用户(属组),其他人。注意:其他人不包含root用户!
用户对文件和目录享有三种权限:
r | 读 | 可以打开并查看内容 |
w | 写 | 拥有对文件到修改权限 |
x | 执行 | 是否可执行,对目录和文件意义不同 |
对于目录而言,执行权限实际控制了用户是否可以进入该目录,读权限负责确定是否可以列出该目录到内容,写权限控制着可否在目录中创建,删除和重命名文件
文件权限与二进制,八进制的对应关系:
rwx | ||
八进制 | 二进制 | 权限 |
0 | 000 | --- |
1 | 001 | --x |
2 | 010 | -w- |
3 | 011 | -wx |
7 | 100 | r-- |
5 | 101 | r-x |
6 | 110 | rw- |
7 | 111 | rwx |
Linux中的7种文件类型:
文件类型 | 符号 |
普通文件 | - |
目录文件 | d |
字符设备文件 | c |
块设备文件 | b |
本地域套接口 | s |
有名管道 | p |
符号连接 | l |
------------------------------------------------------------------------------------------------------------------------------------
虚线之间内容于21:09:05 2018-11-8 补充
目录文件:
- 是一种特殊文件,存储的内容不是普通意义上的数据,而是一系列文件名及其信息节点号(ls -i filename 可以查看文件信息节点号);
- 目录文件与普通文件并无实质性差别,但是目录文件是由Linux系统直接管理的,用户只能查询,并不能直接修改目录文件,目录文件始终是由操作系统负责维护的。
链接文件:
- 链接文件把多个文件名指向同一个文件,更新一个文件即可反映到其他文件;
- 除了目录之外,非链接文件的链接计数只能是1;
- 如果文件的信息节点相同,其引用的就是同一个信息节点;
- 硬链接的唯一局限是链接的两个文件必须位于同一个物理文件系统;
- 符号链接文件可以使用户跨越不同的物理文件系统建立链接文件,符号链接文件拥有自己的数据,具有文件名和信息节点;
管道文件:
- 管道包括普通管道和管道文件
- 普通管道是一种进程之间的通信机制,数据按照FIFO的方式处理;
- 管道文件是一种特殊文件,管道文件拥有文件名和信息节点,但是不含有任何数据,管道文件一边缓存数据,一边供进程读取数据;
------------------------------------------------------------------------------------------------------------------------------------
以下代码查看文件login的属性:
1 wangzhengchao@ubuntu:~$ ls -l /bin/login 2 -rwxr-xr-x 1 root root 48128 5月 17 2017 /bin/login
第二行代码的第一个-代表login文件是一个普通文件(参见linux中到文件类型),紧接着的9位(rwxr-xr-x)代表权限码。对9位权限码可以拆解为如下3组(每3位一组)权限位: rwx(属主) r-x(属组) r-x(其他)。即,对于属主拥有读写和执行权限,对于属组拥有读和执行权限(因为-代表没有对应的权限),对于其他人拥有读和执行权限。该9位权限码还可以用3位八进制数755表示(参见文件权限与二进制,八进制的对应关系)。
8. 修改文件所有权 chown
chown基本语法: chown [OPTION]... [OWNER] [:[GROUP]] FILE...
- 上述指令将文件FILE的属主更改为OWNER,将属组更改为 GROUP
- 如果只修改属主,可以忽略group
- 如果只修改属组,可以忽略owner
wangzhengchao@ubuntu:~$ ls -l hello -rw-rw-r-- 1 wangzhengchao wangzhengchao 0 11月 4 21:20 hello wangzhengchao@ubuntu:~$ sudo chown king hello wangzhengchao@ubuntu:~$ ls -l hello -rw-rw-r-- 1 king wangzhengchao 0 11月 4 21:20 hello
chown还提供了-R选项,用于更改一个目录及其下所有文件的所有权限:
wangzhengchao@ubuntu:~$ ls -l test 总用量 0 -rw-rw-r-- 1 wangzhengchao wangzhengchao 0 11月 4 23:10 helloWorld wangzhengchao@ubuntu:~$ sudo chown -R king test/ wangzhengchao@ubuntu:~$ ls -l test 总用量 0 -rw-rw-r-- 1 king wangzhengchao 0 11月 4 23:10 helloWorld wangzhengchao@ubuntu:~$ ls -l
9. 修改文件权限 chmod
首先明确:只有文件的属主和root用户才能修改文件的权限
chmod用于改变文件的权限,使用 用户组+/-权限 的表达方式增加/删除相应的权限。其中:
- 用户组:属主(u), 属组(g), 其他人(o), 所有人(a)
- 权限:读(r), 写(w), 执行(x)
chmod u+x hello 表示文件hello对属主增加了执行属性;
chmod u-x hello 表示文件hello对属主删除了执行属性;
还可以使用 用户组=权限 或者 用户组1 = 用户组2 的方式修改权限:
chmod u=rw hello 表示文件hello对属主设置读写权限
chmod o=u hello 表示将其他人权限设置为和属主权限一样
根据上述文件权限与二进制,八进制的对应关系表(参见第7部分),我们还可以直接使用3位八进制数修改文件权限:
wangzhengchao@ubuntu:~$ ls -l hello -------rwx 1 wangzhengchao wangzhengchao 114 11月 5 09:05 hello wangzhengchao@ubuntu:~$ chmod 664 hello wangzhengchao@ubuntu:~$ ls -l hello -rw-rw-r-- 1 wangzhengchao wangzhengchao 114 11月 5 09:05 hello
文件hellio原来的权限为 ------rwx,现在需要修改为 rw-rw-r-- 根据八进制对应表可以得到3位八进制权限数为664 , 因此可以使用 chmod 664 hello 修改权限。
10. 输出重定向
当我们执行 date指令时,系统默认将内容打印到屏幕上,使用输出重定向可以置顶输出的位置,例如可以制定输出到文件里面。
wangzhengchao@ubuntu:~$ date 2018年 11月 05日 星期一 09:50:38 CST wangzhengchao@ubuntu:~$ date > date_out wangzhengchao@ubuntu:~$ cat date_out 2018年 11月 05日 星期一 09:50:53 CST
如果输出文件不存在,系统会自动创建;若文件存在,则原内容会被删除,写入新内容;为避免删除原内容,可以使用 >> 重定向
11. 管道 |
管道通过|,将一条命令的输出连接到一条命令的输入:
wangzhengchao@ubuntu:~$ ls Desktop Downloads hello Pictures Templates Videos Documents examples.desktop Music Public test 无标题文档 wangzhengchao@ubuntu:~$ ls | grep s Desktop Documents Downloads examples.desktop Music Pictures Templates test Videos
上述代码执行查找包含字符s的文件名