本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Linux文件系统
根目录
在我们熟悉的windows中,文件系统有C盘,D盘,E盘,等等 这些盘,都是平等的,没有包含关系,其中c盘一般为系统盘
而Linux的文件系统没有盘符的概念,Linux文件系统的根目录是 / ,所有的文件和目录都从这里开始衍生的,以树状形式管理
主目录是每个用户的home目录,在根目录下的home目录下,每个用户都有自己的主目录
一切皆文件
Linux下任何东西都是文件,设备是一个文件,目录也是一个文件,命令也是一个文件
文件命名规范:
- 可包含字母、数字、. 、 - 、_
- 也允许使用其他符号,但是不建议这样子做
- 长度最大为256个字符
路径
绝对路径:从根目录开始,是唯一的路径 相对路径:从当前目录开始,不唯一,所处的目录不一样,相对路径就不一样了
Linux可使用的一些特殊符号
| 符号 | 意义 |
|---|---|
| . | 本目录 |
| .. | 上一级目录 |
| ~ | 当前用户的主目录 |
| / | 根目录 |
| 以 . 为开头的文件或目录 | 隐藏文件或文件夹 |
通配符
| 符号 | 意义 |
|---|---|
| * | 匹配任意长度的任意字符 |
| ? | 一个长度的任意字符 |
| [.....] | 匹配方括号其中的一个字符 |
| [a-z] | 匹配方括号内一个范围中的一个字符 |
| [^.....] | 匹配除了方括号内的一个字符 |
硬链接与软链接
链接,类似一个文件或目录的快捷方式或另外一个入口 Linux的链接有硬链接和软链接(符号链接),两种
【软链接】 软链接的inode与源文件不同,这表明软链接本质上是一个独立的文件,但文件的内容只是执行源文件的一个引用或者说指针,并不实际存储源文件的内容,不管源文件的内容有多大,软链接文件都是非常小的,其实可以理解为,文件的一个快捷方式或别名。 类似于windows的快捷方式
- 删除源文件 或 改变源文件的路径 后不可用
- 是一个独立文件,有独立的inode
- 删除软链接对源文件无影响
- 可以给文件或目录 建立
- 大小很小,里面只是保存了源文件的路径信息,改变源文件内容,不影响它的大小
- 可以跨文件系统使用
【硬链接】 硬链接hard_file的inode与源文件相同,大小相同,时间戳相同。硬链接本质上源文件的一个拷贝,占用的存储空间与源文件相同,同时硬链接与源文件会保持同步更新,更二者之一,另一个的内容和时间戳都会同步更新。
- 与源文件有同一个inode,是指向同一个物理文件
- 删除源文件后,依然可以用,删除最后一个指向这个inode后,相当于文件删除
- 对系统来说与源文件是同等的,也是同权的
- 只能给文件建立
- 大小与源文件相同,但是不实际占用物理内存,因为和源文件指向同一个物理内存,所 有显示的大小和源文件一样
- 不能跨文件系统使用
文件权限与属性
Linux是多用户操作系统,Linux对不同用户访问同一个文件或目录做了不同的访问权限控制
使用ls命令的实例:
说明:
-
第一个字母表示文件类型
- d 目录
- ’-‘(减号) 文件
- l(小写l字符) 链接文件
- b 块设备 (一次读一个块)
- c 字符设备 (一次读一个字符)
- s 套接字
-
接下来9个字符是关于文件权限。
- r为可读,w为可写,x为可执行,若缺少了某个权限则会用 - 表示
- 前3个rwx字符是文件的拥有者的权限,
- 中间3个rwx是文件的所有组的权限,
- 最后的rwx是对其他人访问文件的权限。
-
第2列 多少链接指向这个文件。
-
第3列 谁是这个文件/文件夹的所有者。
-
第4列 谁是这个文件/文件夹的所有组。
-
第5列 这个文件/文件夹的以字节为单位的大小
-
第6列 这告诉我们文件最后的修改时间。
-
第7列 文件名或者目录名,一般目录为蓝色
Linux的目录简介
以下是对这些目录的解释:
-
/bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。比如 cat、chmod、chown等等,可以被普通用户和root用户使用
-
**/boot:**这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。存放启动配置文件和内核文件,linux内核的文件名为:vmlinuz,还可能有启动引导程序grub2
-
/dev :dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的,任何设备都是以文件的形式存放在这里。
-
/etc: etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录,还有各种服务的启动文件。HFS还规定,在它的下面有opt(必要) x11(建议) sgml(sgml)格式相关的配置文件 xml(xml格式的有关的配置文件)
-
/home: 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。
-
/lib: lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
-
/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
-
/media:linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
-
/mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
-
/opt:opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。第三方辅助软件存放的目录
-
/proc:proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器: echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
-
/root:该目录为系统管理员,也称作超级权限者的用户主目录。
-
/sbin:s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。里面存放的命令只有root可以使用
-
/selinux:这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
-
/srv: 该目录存放一些服务启动之后需要提取的数据。比如www服务 FTP服务
-
/sys:这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。 sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。 该文件系统是内核设备树的一个直观反映。 当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
-
/tmp:tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。启动时可能会被清除,这里不能放重要的文件
-
/usr:usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
- /usr/bin:系统用户使用的应用程序。
- /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
- /usr/src:内核源代码默认的放置目录。
- /usr/local 建议安装软件的目录 /usr/include c和c++的库
-
/var:var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
-
/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。 在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
-
/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。
Linux的文件命令
格式: user_name@zhuji_name:~$ comand [-options] parameter1 parameter2
意义:
-
user_name(用户名)@zhuji_name(主机名):~(路径)$ (用户符号)
-
comand:命令名称,可以是系统自带的,也可以是我们写的程序、脚本
-
[-options] :命令选项 ,由 - 来引导,可以同时多个选项,多个选项可以只用一个 - ,一些命令支持 - - 引导的长选项,如cp --force 等价于 cp -f
-
parameter1:命令参数,允许有多个
-
其中用户符号的$表示普通用户,#表示管理员用户(root)
-
命令、选项、参数中间,一定要有一个或多个空格
-
严格区分大小写
如果参数里面存在空格,会被识别为参数结束了,所以需要使用 \ 来转义
ls命令
查看指定目录下有什么文件或目录,若不指定,则列出当前目录
格式: ls [选项] [目录]
选项列表:
- l 列出文件详细信息,(类型、权限、链接数、所有者、组名、大小、时间
- a 显示所有子目录和文件的信息 包括以 ‘.’开头的隐藏文件、目录
- 1 一行输出一个文件信息
- A 与a基本相同 不显示 . 和 . .
- d 显示目录本身的属性,不显示目录的内容
- h 显示目录或文件的大小 默认单位B
- R 以递归的方式显示目录即子目录的所有内容
- color 在字符模式下以颜色区分不同文件
cd命令 与 pwd命令
pwd命令:打印当前工作目录的绝对路径 cd命令:切换当前工作目录
格式:cd [选项] 目录名
可以是绝对路径或相对路径
【cd ~ 】【cd 】:当前用户主目录 【cd ~用户名 】 :这个用户主目录 【cd .. 】: 上级目录 【cd . 】 :当前目录 【cd - 】 :上次操作的目录 【cd !$ 】:把上个命令的参数作为cd 参数使用
mkdir命令
创建文件夹,允许创建多个文件夹,也允许多重创建
常用选项:
p 递归创建 Z 设置安全上下文,当使用SELinux时有效; m<目标属性>或–mode<目标属性> 建立目录的同时设置目录的权限;
实例 : 创建三个文件夹
mkdir aa bb cc
创建三个文件夹,c是b的子文件夹,b是a的子文件夹
mkdir -p a/b/c
创建文件夹,满足关系 a-->{ b,c-->(d,e)}
mkdir -p a/{b,c/{d,e}}
建立目录test,并且只有文件主有读、写和执行权限,其他人无权访问
mkdir -m 700 test
rmdir命令
删除一个空目录
必须离开目录,并且目录必须为空目录,不然提示删除失败
-p : 递归删除多层级空目录
rm命令
删除文件、文件夹
选项 r 递归删除 f 忽略提示信息 i 删除前逐一询问
删除目录需要加上-r 经常与通配符一起使用,快速删除多个文件
touch命令
若文件不存在,则创建文件 若文件存在,则修改文件时间
选项 -a 只更改存取时间 (atime); -c 更改文件时间 若文件不存在也不建立任何文件; -d <时间日期> 可以使用指定的日期时间来更改,而非现在的时间; -f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题; -m 或–time=mtime或–time=modify 只更改修改时间; -r <参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同; -t <日期时间> 使用指定的日期时间,而非现在的时间; –help 在线帮助;
用法 创建一个文件:touch five 一次性创建多个文件 touch a1 a2 a3 修改时间 :touch five five为已经有的文件
cp命令
复制文件或目录,复制后名字是可以改变的
格式为:cp 源文件 目标文件(夹)
选项
-R/r:递归复制,若复制目录,必须加上; -f:强行复制文件或目录,不论目标文件或目录是否已存在; 使用 -n 选项,不会发生覆盖操作。 使用 -i 选项,可以提示操作者是否执行覆盖操作。 使用 -b 选项,在覆盖前进行备份,备份文件名是原始文件名加上一个波浪线。 使用 -u 选项,表示只有文件比较新的时候,才发生覆盖。
-a:此参数的效果和同时指定"-dpR"参数相同; -d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;(如果复制链接而不加上这个,就是复制文件) -l:对源文件建立硬连接,而非复制文件; -p:保留源文件或目录的属性; -s:对源文件建立符号连接,而非复制文件; -u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件; -S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀; -b:覆盖已存在的文件目标前将目标文件备份; -v:详细显示命令执行的操作。
实例1,复制文件
cp txt1 txt2
若txt2不存在,则创建一个复制过去 若txt1存在,则会覆盖
实例2,复制目录
cp -rf mulu1/ mulu2
此时目录mulu2不存在,创建一个并复制mulu1 mulu1与mulu2一致,(名字改变)
cp -rf mulu1/ mulu2
此时mulu2存在,复制mulu1到mulu2下 mulu1被复制到mulu2里面 (名字不变)
mv命令
文件、文件夹的重命名或剪切命令 (移动) 格式:mv [选项] 源文件或目录 目标文件或目录
同一个文件夹下就是重命名 不同文件夹就是移动
选项: -b 若需覆盖文件,则在覆盖文件前先进行备份 -f 强制覆盖,若目标文件已存在同名文件,使用该参数时则直接覆盖而不询问 -i 若目标文件已存在同名文件,则提示询问是否覆盖 -u 若目标文件已存在需移动的同名文件,且源文件比较新,才会更新文件 -t 指定mv的目标目录,改选项使用于移动多个源文件到一个目录的情况,此时目标文件在前,源文件在后
查看文件内容cat、more 、less、head、tail的异同
cat 可读可写,不够直观 more 只读,只能往下翻 less 只读,可上下翻 head 只查看前面一部分 tail 只查看后面一部分
cat命令
直接在命令行上,从第一行开始显示文件
-b 显示行号 -n 显示行号,空白行也显示行号 -v 列出一些看不出来的符号 -A 显示特殊符号,包括-v 和结束符号 tab符号
tac 和cat倒过来的命令,从最后一行开始显示
nl也是类似的显示命令,可以对行号有较多操作
more命令
分页显示内容,底行显示百分比
空格键 表示下翻一页 enter 下翻一行 /字符串 向下查找这个字符串 :f 显示文件名和目前显示的行数 b 或 ctrl - b 往回翻页 q 退出
less 命令
分页显示内容,比more更灵活
空格键 表示下翻一页 [pagedown] 下翻一页 [pageup] 上翻一页 enter 下翻一行 /字符串 向下查找这个字符串 ?字符串 向上查找这个字符串 n 重复前一个查找 g 前进到第一行 G 到最后一行 b 或 ctrl - b 往回翻
head 命令
查看前面的内容 默认是10行 指定行数: head -n 【行数】 文件名 显示除了后面一定行数之外的内容 head -n -【行数】 文件名
tail 命令
查看后面的内容 默认是10行 指定行数: tail -n 【行数】 文件名 显示除了前面一定行数之外的内容 tail -n -【行数】 文件名
-f 持续刷新显示,直到按 ctrl c 退出
ln链接
ln [参数][源文件或目录][目标文件或目录] 软链接:ln -s 源文件 目标文件 硬链接:ln 源文件 目标文件
必要参数: -b 删除,覆盖以前建立的链接 -d 允许超级用户制作目录的硬链接 -f 强制执行 -i 交互模式,文件存在则提示用户是否覆盖 -n 把符号链接视为一般目录 -s 软链接(符号链接) -v 显示详细的处理过程
选择参数: -S “-S<字尾备份字符串> ”或 “--suffix=<字尾备份字符串>” -V “-V<备份方式>”或“--version-control=<备份方式>” --help 显示帮助信息
tree命令
以树结构来查看目录结构
可能需要安装,安装命令:
sudo apt-get insatll tree
格式: tree 目录名
效果: