目录
- 零、第零章-计算机概论
- 壹、第一章-Linux是什么与如何学习
- 贰、第二章-主机规划与磁盘分区
- 叁、第三章-安装CentOS 7.x
- 肆、第四章-首次登录与在线求助
- 伍、第五章-Linux的文件权限与目录配置
- 陆、第六章-Linux文件与目录管理
- 玖、第九章-vim程序编辑器
- 拾、第十章-认识与学习BASH
- 拾壹、第十一章-正则表达式与文件格式化处理
- 拾贰、第十二章-学习shell脚本(很重要)
- 拾叁、第十三章-Linux账户管理与ACL权限设置
零、第零章-计算机概论
写在正文前,为非计算机专业的人提供一个提前的知识整理机会。
0.1 电脑:辅助人脑的好工具
0.1.1 电脑硬件的五大单元-pg4
电脑的五大组成单元:输入单元、输出单元、CPU内部的控制单元、算术逻辑单元和内存。
0.1.6 电脑上面常用的计量单位-pg8
0/1这个二进制的单位我们称为位(bit,亦称比特)。
但是位实在是太小了,所以在存储数据时,每份简单的数据都会使用到8个位的大小来记录,因此定义出字节(Byte)这个单位,它们的关系对应如下:
0.2 个人电脑架构与相关设备组件
0.2.1 执行脑袋运算与判断的CPU-pg11
在早期的CPU设计中:
外频是指CPU与外部部件进行数据传输时的速度;
倍频是指CPU内部用来加速工作性能的一个倍数。
0.2.2 内存-pg14
BIOS
BIOS(Basic Input Output System)是一个程序,这个程序是写死到主板上面的一个存储芯片中,这个存储芯片在没有通电时也能够记录数据,这就是只读存储器(Read Only Memory,ROM)。
0.2.3 显卡-pg16
补一个接口知识:
- D-Sub(VGA接口):为较早之前的连接接口,主要为15针的接口,为模拟信号的传输所使用。当初设计是针对传统的CRT显示器而来,主要的规格标准有640×350px@70Hz、1280×1024px@85Hz及2048×1536@85Hz等。
- DIV:共有四种以上的接口,不过市面上比较常见的仅为提供数字信号的DVI-D,以及整合数字和模拟信号的DVI-I两种。DVI常见于液晶屏幕的连接,标准规格主要有1920×1200px@60Hz、2560×1600px@60Hz等。
- HDMI:相对于D-Sub与DVI仅能传输影像数据,HDMI可以同时传输影像与声音,因此被广泛地使用于电视屏幕中,电视屏幕目前也经常都会支持HDMI格式。
- Display:与HDMI相似,可以同时传输声音和影像,不过这种接口目前在市面上还是比较少有屏幕的支持。
0.2.4 硬盘与存储设备-pg17
扇区(sector):磁盘的最小物理存储单位。
磁道(track):同一个同心圆的扇区组合成的圆。
柱面(cylinder):所有碟片上面的用一个磁道可以组合成所谓的柱面。
机械硬盘(Hard Disk Drive,HDD):需要驱动马达去转动碟片。先知道数据在哪个扇区上面,然后命令马达开始转,再让磁头去读取正确的数据。缺点是:磁盘读取延迟。
固态硬盘(Solid State Drive,SSD):最大好处是没有马达不需要转动,而是通过闪存直接读写的特性,因此除了没数据延迟且快速之外,还很省电。
0.2.6 主板-pg21
南北桥:
(1)北桥:负责连接速度较快的CPU、内存与显卡等组件;现在大多数北桥整合到CPU中了。
(2)南桥:负责连接速度较慢的设备接口,包括硬盘、USB设备、网卡等。
扩展卡数据需要先进入南桥跟大家抢带宽,之后要传向CPU时,还得要通过CPU与南桥的通信管道,那条管道称为DMI2.0总线。
扩展卡装在哪个插槽上面,对性能而言也是影响很大的。所以插卡时,请详情阅读主板上面的逻辑图例,尤其是CPU与南桥通信的带宽方面,特别重要。
CMOS主要的功能为记录主板上面的重要参数,包括系统时间、CPU电压与频率、各项设备的I/O地址与IRQ等,由于这些数据的记录需要用电,因此主板上面才有电池。
BIOS是写入到主板上某一块flash或EEPROM的程序,它可以在计算机启动的时候执行,以加载CMOS当中的参数,并尝试调用存储设备中的引导程序,进一步进入操作系统当中。
0.2.8 选购须知-pg22
**Tips:**如果公司需要一台服务器的话,建议不要自行组装,买品牌电脑的服务器比较好。速度的快慢与整体系统的最慢的那个设备有关。
0.4 软件程序运行
0.4.2 操作系统-pg26
API:应用程序编程接口(Application Programming Interface,API)。
壹、第一章-Linux是什么与如何学习
1.1 Linux是什么
1.1.1 Linux是什么?操作系统/应用程序?-pg34
Linux是具有“可移植性”的。
贰、第二章-主机规划与磁盘分区
2.1 Linux与硬件的搭配
2.1.3 各硬件设备在Linux中的文件名-pg67
几乎所有的硬件设备文件都在/dev这个目录内,比如/dev/sda、/dev/sr0等。
2.2 磁盘分区
2.2.4 Linux安装模式下,磁盘分区的选择(极重要)-pg79
Linux内的所有数据都是以文件的形式来呈现,整个Linux系统最重要的地方就是在于目录树结构。
目录树结构(directory tree)就是以根目录为主,然后向下呈现为分支状的目录结构的一种文件架构。
整个目录树结构最重要的就是那个根目录(root directory)。根目录的表示方法为一条斜线**“/”**,所有的文件都与目录树有关。
挂载(mount):所谓挂载就是利用一个目录当成进入点,将磁盘分区的数据放置在该目录下;也就是说进入该目录就可以读取该分区的意思。
叁、第三章-安装CentOS 7.x
本书采用的是CentOS 7.x,我用的虚拟机是Ubuntu,仁者见仁吧
肆、第四章-首次登录与在线求助
4.2 命令行模式下命令的执行
4.2.1 开始执行命令-pg127
**-ls**命令
-ls //用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)
4.2.2 基础命令的操作-pg130
简单好用的计算机:bc
进入:直接输入bc
退出:输入quit
- 加法 +
- 减法 -
- 乘法 *
- 除法 /
- 指数 ^
- 余数 %
4.2.3 重要的几个热键[Tab]、[Ctrl]-c、[Ctrl]-d-pg132
-
[Tab]
- [Tab]接在一串命令的第一个字段后面,表示【命令补全】
- [Tab]接在一串命令的第二个字段后面,表示【文件补齐】
-
[Ctrl]-c
注意,Linux下的[Ctrl]-c不是代表复制,而是用来中断正在运行的命令。
- [Ctrl]-d
[Ctrl]-d表示键盘输入结束,相当于exit。
4.3 Linux系统的在线求助man page与info page
4.3.1 命令的 --help 求助说明-pg134
使用 –help 可以将该命令的用法做一个大致的了解,类似于说明手册,查阅命令的使用方法。
4.3.2 man page-pg135
其中,man 是manual(操作说明)的简写。
以 date 命令为例,执行man date,可以清楚的看到date命令的说明。
进入man命令的功能后,按下【空格键】往下翻页,可以按下【q】按键来离开man的环境。
【DATE(1)】代表的是:“一般用户可以使用的命令”的意思。表格如下:
代号 | 代表内容 |
---|---|
1 | 用户在shell环境中可以操作的或可执行文件 |
2 | 系统内核可调用的函数与工具等 |
3 | 一些常用的函数(function)与函数库(library),大部分为C的函数库(libc) |
4 | 设备文件的说明,通常在/dev下的文件 |
5 | 配置文件或是某些文件的格式 |
6 | 游戏(games) |
7 | 惯例与协议等,例如Linux文件系统、网络协议、ASCII代码等的说明 |
8 | 系统管理员可用的管理命令 |
9 | 跟内核有关的文件 |
其他命令代号:
代号 | 内容说明 |
---|---|
NAME | 简短的命令、数据名称说明 |
SYNOPSIS | 简短的命令语法(syntax)简介 |
DESCRIPTION | 较为完整的说明,这部分最好仔细看看 |
OPTIONS | 针对SYNOPSIS部分中,有列举的所有可用的选项说明 |
COMMANDS | 当这个程序(软件)在执行的 |
FILES | 这个程序或数据所使用或参考或链接到的某些文件 |
SEE ALSO | 可以参考跟这个命令或数据有相关的其他说明 |
EXAMPLE | 一些可以参考的范例 |
查阅顺序:
- 先查看NAME的部分,约略看一下这个数据的意思;
- 再详细看一下DESCRIPTION,这个部分会提到很多相关的数据与使用时机,从这个地方可以学到很多小细节;
- 而如果这个命令已经很熟悉了,那么主要查询关于OPTIONS的部分就可以了。可以知道每个选项的意义,这样就可以执行比较详细的命令内容;
- 最后,再看一下,跟这个数据有关的还有哪些东西可以使用;
- 某些说明还会列举有关的文件(FILES部分)来提供参考。
man page内部常用的按键:
按键 | 进行工作 |
---|---|
空格键 | 向下翻一页 |
[Page Down] | 向下翻一页 |
[Page Up] | 向上翻一页 |
[Home] | 去到第一页 |
[End] | 去到最后一页 |
/string | 向【下】查找string这个字符串,如果要查找vbird的话,就输入/vbird |
?string | 向【上】查找string这个字符串 |
n,N | 利用/或?来查找字符串时,可以用n来继续下一个查找(不论是/或?),可以利用N来进行【反向】查找(向上查找) |
q | 结束这次的man page |
man -f man:取得更多的与man相关的信息。
man -k man:利用关键词将说明文件里面只要含有man那个字眼就将它取出。
4.3.3 info page-pg139
info page:和man page类似,与man page一口气输出一堆信息不同的是,info page则是将文件数据拆成一个一个的段落,每个段落用自己的页面来编写,并且在各个页面中还有类似网页的超链接来跳到各个不同的页面中,每个独立的页面也被称为一个**节点**(node)。所以,你可以将info page想成是命令行模式的网页显示数据。
按键 | 进行工作 |
---|---|
空格键 | 向下翻一页 |
[Page Down] | 向下翻一页 |
[Page Up] | 向上翻一页 |
[Tab] | 在节点之间移动,有节点的地方,通常会以*显示 |
[Enter] | 当光标在节点上面时,按下Enter可以进入该节点 |
b | 移动光标到该info界面当中的第一处 |
e | 移动光标到该info界面当中的最后一个节点一处 |
n | 前往下一个节点处 |
p | 前往上一个节点处 |
u | 向上移动一层 |
s(/) | 在info page当中进行查找 |
h,? | 显示帮助选项 |
q | 结束这次的info page |
4.4 超简单的文本编辑器:nano-pg142
打开一个名为text.txt的文件: nano text.txt
其中,那个指数符号(^)代表的是键盘的[Ctrl]按键;
M代表的是键盘的[Alt]按键。
4.5 正确的关机方式-pg143
正确的关机命令使用
- 将数据同步写入键盘中的命令:sync
- 常用的关机命令;shutdown
- 重新启动,关机:reboot、halt、poweroff
一般在重新启动时,都会执行如下的命令:
sync; sync; sync; reboot
伍、第五章-Linux的文件权限与目录配置
5.2 Linux文件权限概念
5.2.1 Linux文件属性-pg152
执行操作
ls -al
或
ll
可以显示文件的文件名和相关属性,如下:
dr-xr-x--- 5 root root 4096 May 29 16.08 .
//[1] [2] [3] [4] [5] [6] [7]
//[权限] [链接] [拥有者] [用户组] [文件容量] [修改日期] [文件名]
详细介绍第一栏[1]的十位字符所代表的含义
-
第一栏代表这个文件的类型与权限(permission)
- 第一个字符代表这个文件是目录、文件或链接文件等;
- 当为[d]则是目录,如d---------;
- 当为[-]则是文件,如-rwx------;
- 当为[l]则是链接文件,如lrwx------;
- 当为[b]则是设备文件里面的可供存储的周边设备(可按随机读写的设备),如brwx------;
- 当为[c]则是设备文件里面的串行端口设备,如crwx------;
- 接下来的字符中,以三个为一组,且均为【rwx】的三个参数的组合。其中,[r]代表可读(read)、[w]代表可写(write)、[x]代表可执行(execute)。要注意的是这三个权限的位置不会改变,如果没有权限,就会出现减号[-]而已。
- 第一组为文件拥有者可具备的权限。
- 第二组为加入此用户组之账号的权限。
- 第三组为非本人且没有加入本用户组的其他账号的权限。
-
第二栏表示有多少文件名链接到此节点(inode)
每个文件都会将它的权限与属性记录到文件系统的inode中,不过,我们使用的目录树却是使用文件名来记录,因此每个文件名就会链接到一个inode,这个属性记录的就是有多少不同的文件名链接到相同的一个inode号码。
-
第三栏表示这个文件(或目录)的拥有者账号
-
第四栏表示这个文件的所属用户组
-
第五栏为这个文件的容量大小,默认单位为Bytes
-
第六栏为这个文件的创建日期或是最近的修改日期
-
第七栏为这个文件名
5.2.2 如何修改文件属性与权限-pg156
-
修改所属用户组,chgrp
这个命令是change group的缩写,用以修改一个文件的用户组,不过被修改的组名必须要在/etc/group文件中存在才行,否则会显示错误。
//把a的拥有者修改b chgrp a b
-
修改文件拥有者,chown
这个命令是change owner的缩写,用以修改文件拥有者,用户必须是已经存在系统中的账号,也就是在/ect/passwd这个文件中有记录的用户名称才能修改。
//把b的拥有者修改为a chown a b
-
复制文件命令,cp
cp操作会复制执行者的属性与权限,但是无法修改
cp 源文件 目标文件 //复制一个与文件a一样属性的文件b cp a b
-
修改权限,chmod
**chmod**用于修改文件权限,权限有两种:使用数字或是符号来进行权限的修改。
-
数字类型修改文件权限
Linux文件的基本权限就有9个,分别是拥有者(owner)、所属群组(group)、其他人(others)三种身份各有自己的读(read)、写(write)、执行(execute)权限三个一组,可以使用数字来代表各个权限,如下:
r:4 w:2 x:1
每种身份各自的三个权限数字是需要累加的,例如当权限是[-rwxrwx—],数字则是:
owner = rwx = 4+2+1 = 7 group = rwx = 4+2+1 = 7 others = --- = 0+0+0 = 0
当修改权限时,若要修改.txt这个文件所有的权限都设置启用([-rwxrwxrwx]),那么就执行:
chmod 777 .txt
-
符号类型修改文件权限
chmod u(user) +(加入) r 文件或目录 g(group) -(移除) w o(others) =(设置) x a(all) 按照上一个需求,符号修改的操作方式是:
chmod a = rwx .txt
-
5.2.4 Linux文件种类与扩展名-pg163
cat:将一个文件内容读出来的命令
//可以看到文件内容
cat ~/.txt
5.3 Linux目录配置
5.3.1 Linux目录配置的依据————FHS-pg165
可分享(shareable) | 不可分享(unshareable) | |
不变(static) | /usr(软件存放处) | /etc(配置文件) |
/opt(第三方辅助软件) | /boot(启动与内核文件) | |
可变动(variable) | /var/mail(用户邮箱) | /var/run(程序相关) |
/var/spool/news(新闻组) | /var/lock(程序相关) |
事实上,FHS针对目录树架构仅定义出三层目录下面应该放置什么数据而已,分别是下面这三个目录的定义:
-
/(root,根目录):与启动系统有关;
-
/usr(unix software resource):与软件安装/执行有关;
-
/var(variable):与系统运行过程有关。
根目录(/)的意义与内容
根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来,同时根目录也与启动、还原、系统修复等操作有关。
因此,根据FHS标准建议:根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区,保持根目录越小越好。如此不但性能较佳,根目录所在的文件系统也较不容易发生问题。
目录 | 应放置文件内容 |
第一部分:FHS要求必须要存在的目录 | |
/bin | 系统有很多存放执行文件的目录,但/bin比较特殊。因为/bin放置的是在单人维护模式下还能够被使用的命令。在/bin下面的命令可以被root与一般账号使用,主要有:cat、chmod、chown、date、mv、mkdir、cp、bash等常用的命令。 |
/boot | 这个目录主要是放置启动会使用到的文件,包括Linux内核文件以及启动选项与启动所需配置文件等。Linux内核常用的文件名为:vmlinuz,如果使用的是grub2这个启动引导程序,则还会存在/boot/grub2/这个目录。 |
/dev | 在Linux系统上,任何设备与接口设备都是以文件的形式存在于这个目录当中。你只要通过读写这个目录下面的某个文件,就等于读写某个设备,比较重要的文件有/dev/null/dev/zero、/dev/tty、/dev/loop*、/dev/sd*等。 |
/etc | 系统主要的配置文件几乎都放在这个目录内,例如人员的账号密码文件、各种服务的启动文件等。一般来说,这个目录下的各文件属性是可以让一般用户查看的,但是只有root有权利修改。FHS建议不要放置可执行文件(binary)在这个目录中。比较重要的文件有:/etc/modprobe.d/、/etc/passwd、/etc/fstab、/etc/issue等。另外FHS还规范几个重要的目录最好要存在/etc/目录下: - /etc/cpt(必要):这个目录在放置第三方辅助软件/opt的相关配置文件; - /etc/X11/(建议):与X Window有关的各种配置文件都在这里,尤其是xorg.conf这个X Server的配置文件; - /etc/sgml/(建议):与SGML格式有关的各项配置文件; - /etc/xml/(建议):与XML格式有关的各项配置文件; |
/lib | 系统的函数库非常多,而/lib放置的则是在启动时会用到的函数库,以及在/bin或/sbin下面的命令会调用的函数库而已。什么是函数库?你可以将它想成是外挂,某些命令必须要有这些外挂才能够顺利完成程序的执行之意,另外FSH还要求下面的目录必须要存在: - /lib/modules/:这个目录主要放置可抽换式的内核相关模块(驱动程序)。 |
/media | media是媒体的英文,顾名思义,这个/media下面放置的就是可删除的设备,包括软盘、光盘、DVD等设备都暂时挂载于此。常见的文件名有:/media/floppy、/media/cdrom等。 |
/mnt | 如果你想要暂时挂载某些额外的设备,一般建议你可以放置到这个目录中。在早些时候,这个目录的用途和/media相同。只是有了/media之后,这个目录就暂时用来挂载了。 |
/opt | 这个是给第三方辅助软件放置的目录。什么是第三方辅助软件?举例来说,KDE这个桌面管理系统是一个独立的软件,不过它可以安装到Linux系统中,因此KDE的软件就建议放置到此目录下。另外,如果你想要自行安装额外的软件(非原来的发行版提供),那么也能够将你的软件安装到这里来。不过,以前的Linux系统中,我们还是习惯放置在/usr/local目录下。 |
/run | 早期的FHS规定系统启动后所产生的各项信息应该要放置到/var/run目录下,新版的FHS则规范到/run下面,由于/run可以使用内存来模拟,因此性能上会好很多。 |
/sbin | Linux系统有非常多命令是用来设置系统环境的,这些命令只有root才能够用来设置系统,其他用户最多只能用来查询而已。放在/sbin下面的为启动过程中所需要的,里面包括了启动、修复、还原系统所需要的命令。至于某些服务器软件程序,一般则是放置到/usr/sbin/当中。至于本机自行安装的软件所产生的系统执行文件(system binary),则放置到/usr/local/sbin/当中了。常见的命令包括:fdisk、fsck、ifconfig、mkfs等。 |
/srv | srv可以视为service的缩写,是一些网络服务启动之后,这些服务所需要使用的数据目录,常见的服务例如WWW、FTP等。举例来说。WWW服务器需要的网页数据就可以放置在/srv/www/里面。不过,系统的服务数据如果尚未要提供给因特网任何人浏览的话,默认还是建议放置到/var/lib下面即可。 |
/tmp | 这是让一般用户或是正在执行的程序暂时放置文件的地方。这个目录是任何人都能够存放的,所以你需要定期地清理一下。当然,重要数据不可放置在此目录。因为FHS甚至建议在启动时,应该要将/tmp下的数据都删除。 |
/usr | 第二层FHS设置,后续介绍。 |
/var | 第二层FHS设置,主要为放置变动性的设置,后续介绍。 |
第二部分:FHS建议可以存在的目录 | |
/home | 这是系统默认的用户家目录(home directory)。在你新增应该一般用户账号时,默认的用户家目录都会规范到这里来,比较重要的是家目录有两种代号: - ~:代表目前这个用户的家目录; - ~dmtsai:则代表dmtsai的家目录。 |
/lib | 用来存放与/lib不同的格式的二进制函数库,例如支持64位的/lib64函数库等。 |
/root | 系统管理员(root)的家目录,之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中。 |
Linux下几个也非常重要的目录
目录 | 应放置文件内容 |
/lost+found | 这个目录是使用标准的ext2、ext3、ext4文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时,将一些遗失的片段放置在这个目录下,不过如果使用的是xfs文件系统的话,就不会存在这个目录。 |
/proc | 这个目录本身是一个虚拟文件系统(virtual filesystem),它放置的数据都是在内存中,例如系统内核、进程信息(process)、外接设备的状态及网络状态等。因为这个目录下的数据都是在内存当中,所以本身不占任何硬盘空间。比较重要的文件例如:/proc/cpuinfo\/proc/dma\/proc/interrupts\/proc/ioports\/proc/net/*等。 |
/sys | 这个目录其实跟/proc非常相似,也是一个虚拟的文件系统,主要也是记录内核与系统硬件信息相关的内容。包括目前已加载的内核模块与内核检测到的硬件设备等,这个目录同样不占硬盘容量。 |
/usr的意义与内容
根据FHS的基本定义,/usr里面放置的数据属于可分享与不可变动(shareable,static)。
usr是UNIX Software Resource的缩写,这个目录有点内似于Windows系统的“C:\Windows\(当中的一部分)+C:\Program Files\”这两个目录的综合体。
目录 | 应放置文件内容 |
第一部分:FHS要求必须要存在的目录 | |
/usr/bin/ | 所以一般用户能够使用的命令都放在这里。目前新的CentOS 7已经将全部的用户命令放置于此,而使用链接文件的方式将/bin链接至此。也就是说,/usr/bin与/bin是一模一样的。另外,FHS要求在此目录下不应该有子目录。 |
/usr/lib/ | 基本上,与/lib功能相同,所以/lib就是链接到此目录中。 |
/usr/local/ | 系统管理员在本机安装自己下载的软件(非发行版默认提供者)。建议安装到此目录,这样会比较便于管理。举例来说,你的发行版提供的软件较旧,你想安装较新的软件但又不想删除旧版,此时你可以将新版软件安装于/usr/local/目录下,可与原先的旧版软件有分别。你可以自行到/usr/local去看看,该目录下也是具有bin、etc、include、lib...的子目录。 |
/usr/sbin/ | 非系统正常运行所需要的系统命令,最常见的就是某些网络服务器软件的服务命令(daemon)。不过基本功能与/sbin也差不多,因此目前/sbin就是链接到此目录中的。 |
/usr/share/ | 主要放置只读的数据文件,当然也包括共享文件。、在这个目录下放置的数据几乎是不分硬件架构的可读取的数据,因为几乎都是文本文件。在此目录下常见的还有这些子目录: - /usr/share/man:在线帮助文件; - /usr/share/doc:软件的说明文档; - /usr/share/zoneinfo:与时区有关的时区文件。 |
第二部分:FHS建议可以存在的目录 | |
/usr/games/ | 与游戏比较相关的数据放置处。 |
/usr/include/ | c/c++等程序语言的头文件(header)与包含文件(include)放置处,当我们以Tarball方式(*.tar.gz的方式安装软件)安装某些程序时,会使用到里面的许多文件。 |
/usr/libexec/ | 某些不被一般用户常用的执行文件或脚本(script)等,都会放置在此目录中。例如大部分的X窗口下面的操作命令,很多都是方在此目录下。 |
/usr/lib/ | 与/lib/功能相同,因此目前/lib就是链接到此目录中。 |
/usr/src/ | 一般源代码建议放置到这里,src有source的意思。至于内核源代码则建议放置到/usr/src/Linux/目录下。 |
/var的意义与内容
目录 | 应放置文件内容 |
第一部分:FHS要求必须要存在的目录 | |
/var/cache/ | 应用程序本身运行过程中会产生的一些缓存。 |
/var/lib/ | 程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。举例来说,MySQL的数据库放置到/var/lib/mysql/而rpm的数据库则放到/var/lib/rpm中。 |
/var/lock/ | 某些设备或是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时,就可能产生一些错误的状况,因此就得要将该设备上锁(lock),以确保该设备只会给单一软件所使用。举例来说,刻录机正在刻录一张光盘,你想一下会不会有两个人同时在使用一个刻录机刻盘?如果两个人台式刻录,那光盘写入的是谁的数据?所以当第一个人在刻录时刻录机就会被上锁,第二个人就得要该设备被解除锁定(就是前一个人用完了)才能够继续使用,目前此目录也已经挪到/run/lock中。 |
/var/log/ | 重要到不行。这是日志文件放置的目录,里面比较重要的文件有/var/log/messages、/var/log/wtmp(记录登录信息)等。 |
/var/mail/ | 放置个人电子邮箱的目录,不过这个目录也被放置到/var/spool/mail/目录中,通常这两个目录是互为链接文件。 |
/var/run/ | 某些程序或是服务启动后,会把它们的PID放置在这个目录下,至于PID的意义我们会在后续章节提到,与/run相同,这个目录链接到/run目录。 |
/var/spool/ | 这个目录通常放置一些队列数据,所谓的队列就是排队等待其他程序使用的数据,这些数据被使用后通常都会被删除。举例来说,系统收到新邮件会放置到/var/spool/mail/中,但用户收下该邮件后该封信原则上就会被删除,邮件如果暂时寄不出去会被放到/var/spool/mqueue/中,等到被送出后就被删除。如果是计划任务数据(crontab),就会被放置到/var/spool/cron/目录中。 |
5.3.2 目录树(directory tree)-pg169
在Linux下面,所有的文件与目录都是由根目录开始的。那是所有目录与文件的源头,然后在一个一个的分支下来,有点像是树枝状,因此,我们也称这种目录配置方式为:目录树(directory tree),这个目录有什么特殊?它主要的特征有:
-
目录树的启动点为根目录(/,root);、
-
每一个目录不止能使用本地分区的文件系统,也可以使用网络上的文件系统。举例来说,可以利用Network File System(NFS)服务器挂载某特定目录等;
-
每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的。
5.3.3 绝对路径与相对路径-pg170
根据文件名写法的不同,也可将所谓的路径(path)定义为绝对路径(absolute)与相对路径(relative)。这两种文件名/路径的写法依据是这样的:
-
绝对路径:由根目录(/)开始写起的文件名或目录名称,例如/home/dmtsai/.bashrc;
-
相对路径:相对于目录路径的文件名写法,例如./home/dmtsai或…/…/home/dmtsai等,反正开头不是/就属于相对路径的写法。
例子,你目前在/home这个目录下,如果想要进入/var/log这个目录时,可以怎么写?
1. cd /var/log(absolute)
2. cd ../var/log(relative)
因为你在/home下面,所以要回到上一层(…/)之后,才能继续往/var来移动。特别注意这两个特殊的目录:
-
.: 代表当前的目录,也可以使用./来表示;
-
…: 代表上一层目录,也可以使用…/来表示。
例题
如何先进入/var/spool/mail/目录,再进入到/var/spool/cron/目录中呢?
**答:**由于/var/spool/mail与/var/spool/cron是同样在/var/spool/目录中,因此最简单的命令执行方法为:
1. cd /var/spool/mail
2. cd ../cron
例题
网络文件常常提到类似“./run.sh”之类的数据,这个命令的意义是什么?
**答:由于命令的执行需要变量(bash章节才会提到)的支持,若你的执行支持放置在本目录,并且本目录并非常规的执行文件目录(/bin,/usr/bin等为常规),此时要执行命令就得要严格指定该执行文件。“/”代表“本目录”**的意思,所以“./run.sh”代表“执行本目录下名为run.sh的文件”。
陆、第六章-Linux文件与目录管理
6.1 目录与路径
6.1.1 绝对路径与相对路径-pg176
-
绝对路径:路径的写法“一定由根目录(/)写起”,例如/usr/share/doc。
-
绝对路径的正确度要比较好。
-
如果在写程序(shell脚本)来管理系统的条件下,务必使用绝对路径。
-
-
相对路径:路径的写法“不是由根目录(/)写起”,例如由/usr/share/doc要到/usr/share/man下面时,可以写成:“cd …/main”。
6.1.2 目录的相关操作-pg176
比较特殊的目录:
- . 代表此层目录
- … 代表上层目录
-
- 代表前一个工作目录
- ~ 代表目前使用者身份所在的家目录
- -account 代表account这个使用者的家目录(account是个账户名称)
几个常见的处理目录的命令:
- cd(change directory,切换目录)
利用相对路径的写法必须要确认你目前的路径才能正确地去到想要去的目录。
回到上层目录可以用 “cd …”,这个命令太常见,就不阐述了。
- pwd(print working directory,显示目前所在的目录)
选项与参数:
-p : 显示出真正的路径,而非使用链接(link)路径。
- mkdir(make directory,建立新目录)
在默认的情况下,你所需的目录得一层一层地建立才行。
选项与参数:
-m : 设置文件的权限,直接设置,不使用默认权限(umask)
可以利用-m来强制设置一个新目录相关的权限。比如“mkdir -m 711 test”就是给予test一个drwx–x–x的权限。
-p : 帮助你直接将所需要的目录(包括上层目录)递归创建
执行“mkdir -p /home/bird/test”,系统就会自动帮你依序生成目录。并且,如果该目录本来存在时,系统也不会显示错误信息。不过,不建议常用-p这个选项,因为担心如果打错字,那么目录名称就会变得乱七八糟。
- rmdir(remove directory,删除空目录)
选项与参数:
-p : 连同上层“空的”目录也一起删除
目录需要一层一层删除才行,而且被删除的目录里面必定不能存在其他的目录或文件,这也是所谓的空目录(empty directory)的意思。
如果要将所有目录下的东西都删除?这个时候就必须使用【rm -f test】。不过,还是使用rmdir比较安全。
6.1.3 关于执行文件路径的变量:$PATH-pg179
“为什么我可以在任何地方执行/bin/ls这个命令?”
“这是因为环境变量PATH的帮助所致。”
echo $PATH
(显示)/usr/local/sbin:/usr/local/bin:/bin:/usr/sbin:/usr/bin:/root/bin
echo有“显示,打印”的意思,PATH前面加的 $ 表示后面接的是变量,所以会显示出目前的PATH。
PATH(一定是大写)这个变量的内容是由一堆目录所组成,每个目录中间用冒号(:)来隔开,每个目录有顺序之分。
例题:
假设你是root,如果你将ls由/bin/ls移动成为/root/ls(可用【mv /bin/ls /root】命令完成),然后你自己本身也在/root目录下,请问(1)你能不能直接输入ls来执行?(2)若不能,你该如何执行ls这个命令?(3)若要直接输入ls即可执行,又该如何进行?
答:
由于这个例题的重点是将某个执行文件移动到非正规目录去,所以我们先要进行下面的操作才行(务必先使用su - 切换成为root身份):
mv /bin/ls /root
(mv为移动,可将文件在不同的目录间进行移动操作)
(1)接下来不论你在哪个目录下面输入任何与ls相关的命令,都没有办法顺利地执行ls。也就是说,你不能直接输入ls来执行,因为/root这个目录并不在PATH指定的目录中,所以,即便你在/root目录下,也不能够查找到ls这个命令。
(2)因为这个ls确实存在与/root下面,并不是被删除了。所以我们可以通过使用绝对路径或是相对路径直接指定这个执行文件,下面的两个方法都能够执行ls这个命令:
/root/ls (直接用绝对路径指定改文件名)
./ls (因为在/root目录下,就用./ls来指定)
(3)如果想要让root在任何目录均可执行/root下面的ls,那么就将/root加入PATH当中即可。加入的方法很简单,就像下面这样:
PATH = “${PATH}:/root”
上面这个做法就能够将/root加入到执行文件查找路径PATH中了。**另外,除了 P A T H 之 外 , 如 果 想 要 更 明 确 地 定 义 出 变 量 的 名 称 , 可 以 使 用 大 括 号 PATH之外,如果想要更明确地定义出变量的名称,可以使用大括号 PATH之外,如果想要更明确地定义出变量的名称,可以使用大括号{PATH}来处理变量的调用。**如果确定这个例题进行的没有问题,请将ls移回/bin下面,不然系统会挂。
mv /root/ls /bin
某些情况下,即便你已经将ls移回了/bin目录,不过系统还是会告诉你无法处理/root/ls。很可能是因为指向系统参数被缓存的关系。不要紧张,只要注销(exit)再登录(su -)就可以继续快乐地使用ls命令了。
总结:
-
不同的身份用户默认的PATH不同,默认能够随便执行的命令也不同(如root与dmtsai)
-
PATH是可以修改的
-
使用绝对路径或相对路径直接指定某个命令的文件名来执行,会比查找PATH来的正确
-
命令应该要放置到正确的目录下,执行才会比较方便
-
本目录(.)最好不要放到PATH当中
6.2 文件与目录管理
6.2.1 文件与目录查看:ls-pg181
ls [-aAdfFhilnrRST] 文件名或文件目录
ls [--color={never,auto,always}] 文件名或文件目录
ls [--full-time] 文件名或文件目录
选项与参数:
-
-a : 全部的文件,连同隐藏文件(开头为.的文件)一起列出来;
-
-A : 全部的文件,连同隐藏文件,但不包括.与…这两个目录;
-
-d : 仅列出目录本身,而不是列出目录内的文件数据;
-
-f : 直接列出结果,而不进行排序(ls默认会以文件名排序);
-
-F : 根据文件、目录等信息,给予附加数据结构,例如:
-
- : 代表可执行文件;
- / : 代表目录;
- = : 代表socket文件;
- | : 代表FIFO文件;
-
-
-h : 将文件容量以人类较易读的方式(例如GB、KB等)列出来;
-
-i : 列出inode号码,inode的意义下一章将会介绍;
-
-l : 详细信息显示,包含文件的属性与权限等数据;(很多版本简化为ll)
-
-n : 列出UID与GID而非使用者与用户组的名称(UID与GID会在账号管理提到);
-
-r : 将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小;
-
-R : 连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来;
-
-S : 以文件容量大小排序,而不是用文件名排序;
-
-t : 依时间排序,而不是用文件名。
-
–color=never : 不要依据文件特性给予颜色显示;
-
–color=always : 显示颜色;
-
–color=auto : 让系统自行依据设置来判断是否给予颜色。
-
–full-time : 以完整时间模式(包括年、月、日、时、分)输出;
-
–time={atime,ctime} : 输出access时间或改变权限属性时间(ctime),而非内容修改时间(modification time)。
当只执行ls时,默认显示为:非隐藏文件的文件名、以文件名进行排序及文件名代表的颜色显示。
6.2.2 复制、删除与移动:cp、rm、mv-pg183
- cp(copy,复制文件或目录)
cp [-adfilprsu] 源文件(source) 目标文件(destination)
cp [options] source1 source2 ... directory
选项与参数:
-
-a : 相当于-dr --preserve=all的意思,至于dr请参考下列说明;(将文件的所有特性都复制过来)
-
-d : 若源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;
-
-f : 为强调(force)的意思,若目标文件已经存在且无法开启,则删除后再尝试一次;
-
-i : 若目标文件(destination)已经存在时,在覆盖时会先询问操作的进行;
-
-l : 进行硬链接(hard link)的链接文件建立,而非复制文件本身;
-
-p : 连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性;
-
-i : 递归复制,用于目录的复制操作;
-
-s : 复制成为符号链接文件(symbolic link),亦即“快捷方式”文件;
-
-u : destination比source旧才更新destination,或destination不存在的情况下才复制;
-
–preserve=all : 除了-p的权限相关参数外