linux 基础
计算机文件系统
概述:计算机中的各个组件和配置在Linux系统中使用文件来表示的,一般来说所有的硬件装置文件都被放在/dev目录内。
BOIS:写在主板的存储器中的一个程序,计算机在开机时会自动执行这个程序,通过BOIS打开计算机系统(window、Linux等)。
UEFI:与BOIS类似,是一个写在主板存储器中的程序,用于在计算机开机时校验证件,打开核心(计算机系统)。
索引式文件系统:
在索引式文件系统中,文件的 inode(记录文件数据所在位置的 block 号码),与 block (文件数据的内容)分别放在不同的区块,读取文件时先一次性读取出 inode ,再根据 inode 读取 block 。示意图如下:从文件的 inode 读取一个文件被存放再 5 8 10 号位置,然后从相应位置读取到整个文件。注意,一个block只能存放一个文件,一个文件可有多个 block 进行存放,格式化的时候可以指定 block 的大小。

FAT格式文件系统:
在FAT格式的文件系统中, inode 与block 被存放在一起,先读取一个 block  和 inode,再读取下一个。示意图如下:先读取一段,然后找到 inode ,根据 inode 再读取下一段,知道读取整个文件。

相关命令:
- 
command [options] [parameter]:文件系统的命令格式,参数说明:command:指令,指令的名称,必须是 指令 或者 可执行的文件。options:选项,不是Linux的实际指令,是后来设定的,通常前面带有-号,当使用全名时带有--符号,也可能会使用+符号。parameter:参数,指令或者选项的参数。
使用说明:
- 
指令、选项、参数以空格来分隔,多个空格会被视为一个。
 - 
按
Enter执行命令。 - 
命令过长的时候使用
\+Enter换行。 - 
命令区分大小写。
 
 - 
df 参数 文件名:列出文件系统的使用量。参数:
-a:列出所有的文件系统,包括系统特有的/proc等文件系统。-k:以KBytes的容量显示各文件系统。-m:以MBytes的容量显示各文件系统。-h:自动选择较易读的格式显示各文件系统。H:以M=1000K取代M=1024K的进位方式。T:连同该parition的filesystem名称也列出。
 - 
lsblk 参数:列出系统上的所有磁盘列表。-d:仅列出磁盘本身,不会列出该磁盘的分区数据。-f:同时列出该磁盘内的文件系统名称。-i:使用ASCII的线段输出,不要使用复杂的编码。-m:同时输出该装置再/dev下的权限数据。-p:列出该装置的完整文件名。-t:列出该磁盘装置的详细数据,包括磁盘队列机制、预读写的数据量大小等。
 - 
blkid:列出装置的UUID等参数。 - 
parted:列出磁盘的分区表类型与分区信息。 - 
exit:退出系统(退出当前 shell 登录)。 - 
ls:列出目录下的所有非隐藏文件。 - 
ls -al ~:列出用户家目录下的所有文件。 - 
date:显示当前时间。 - 
locale:显示目前支持的语系。 - 
cal [month] [year]:显示日历,可选年月,否则显示当前月。 - 
Tab键:补全,列出命令的补全集合。 - 
Ctrl键 + C键:中断当前的运行。 - 
Ctrl键 + D键:键盘输入结束。 - 
Shift键 + PageUP键:向前翻页。 - 
Shift键 + PageDown键:向后翻页。 - 
command --help:指令command的说明文档。 - 
/usr/share/doc:说明文档的存放目录。 - 
who:查看当前使用系统的成员。 - 
sync:将数据同步写入磁盘。 - 
shutdown [para] [time] [message]:关机。- 
para:参数 说明 -k不关机,只是将警告 message发出去。-r重新启动。 -c取消正在进行中的 shutdown指令。-h将服务停掉后,立即关机。  - 
time:指定延迟执行shutdown指令的时间。 - 
message:向其他使用者发送的警告信息。 
 - 
 
文件权限
权限分类:
owner:文件拥有者。group:组群。others:其他人。
注:root可以拿到所有的权限。
文件的权限信息:
使用ls -al命令查看文件的信息,如下如:

权限:共有十个字符,分为四组,各字符代表含义如下:

- 
第一组:表示文件的类型,
d表示目录,-表示文件,I表示连结文档,b表示装置文件里的可供存储的接口设备,c表示装置文件里的串行端口设备。其他组:第二组表示文件拥有者的权限,第三组表示族群拥有的权限,第四组表示其他人拥有的权限。每组的第一个位置字符表示可读权限,是为
r,否为-;第二个位置字符表示可写权限,是为w,否为-;第三个位置字符表示可执行权限,是为x,否为-。 - 
连结:表示有多少文件连结到此节点。
 
修改权限的指令
su -user:切换身份。chgrp [R] 组群名 文件名:改变文件所属组群,参数R表示递归变更,即连同次目录下的所有文件都变更所属组群。注意组群要在/etc/group文件中有记录才行。chown [-R] 账号名[:组群名] 文件名:改变文件拥有者(还可以顺带改变所属组群)。参数R表示递归变更,即连同次目录下的所有文件都变更所属组群。注意账号要在/etc/passwd文件中有记录才行。chmod [-R] xyz 文件名:改变文件的权限,x、y、z是整数分别表示owner、group、others的权限,将可读权限r用4表示,可写权限w用2表示,可执行权限x用1表示,将否-用0表示,则owner的权限是rwx表示为4+2+1=7,others的权限---表示为0+0+0=7,由此将一个文件的权限改为rwxrwx---的命令是chmod 770 文件名。
目录配置
Linux目录配置依据FHS标准进行配置,所以不同版本间目录配给大同小异。FHS将目录按交互作用分为四种类型:
- 可分享的:可以分享给其他系统挂载使用的目录。
 - 不可分享的:自己计算机上运作的配置文件。
 - 不变的:不经常变动的,跟随着 distribute 而不变动。
 - 可变动的:经常改变的数据。
 
FHS定义了三层目录的相关配置:
/:与开机系统有关。/usr:与软件安装/执行有关。/var:与系统运作过程有关。
其中根目录/下建议存在这些次目录:
| 目录 | 应放置文件内容 | 
|---|---|
/bin | 放置在单人维护模式下还能被操作的指令。 | 
/boot | 放置开机会使用到的文件。 | 
/dev | 放置接口设备的文件。 | 
/etc | 放置系统的配置文件,如账号密码文件、各种服务的启始档等。 | 
/lib | 放置开机时会用到的函式库。 | 
/media | 放置可移除的装置,如光盘、DVD等。 | 
/mnt | 放置暂时挂在的装置。 | 
/opt | 放置第三方协助软件。 | 
/run | 放置开机后产生的各项信息。 | 
/sbin | 放置开机过程所需要的,包括开机、修复、还原系统所需要的指令。 | 
/srv | 放置网络服务所需要的数据。 | 
/tmp | 用于正在执行的程序暂时放置文件。 | 
/usr | |
/var | |
/home | 系统默认的用户家目录。 | 
/root | 系统管理员的家目录。 | 
/lost+found | 系统发生错误时,放置遗失片段。 | 
/proc | 虚拟文件系统,数据存放在内存中。 | 
/sys | 虚拟文件系统,与 /proc 作用相似。 | 
/usr目录下建议存在的次目录:
| 目录 | 应放置文件内容 | 
|---|---|
/usr/bin/ | 放置一般用户使用的指令。 | 
/usr/lib/ | 与/lib功能相同,/lib目录就链接到此目录。 | 
/usr/local/ | 放置管理员自行安装的软件。 | 
/usr/sbin/ | 非系统正常运作所需要的系统指令。 | 
/usr/share/ | 放置只读架构的数据文件。 | 
/usr/games/ | 与游戏相关的数据。 | 
/usr/include/ | c/c++等程序语言的档头与包含档的放置处。 | 
/usr/libexec/ | 放置不被一般使用者惯用的执行档或脚本。 | 
/usr/lib<qual>/ | 与/lib<qual>功能相同,/lib<qual>就是链接到此目录 | 
/usr/src/ | 放置原始码。 | 
/var目录下建议存在的次目录:
| 目录 | 应放置文件内容 | 
|---|---|
/var/cache/ | 放置应用程序运行过程中产生的暂存档。 | 
/var/lib/ | 放置程序执行过程中用到的数据文件。 | 
/var/lock/ | 某些装置或文件资源一次只能被一个应用程序使用,如果有多个程序同时使用会产生错误,此时需要给该装置上锁,确保该装置只能给一个软件使用。 | 
/var/log/ | 放置登录文件。如/var/log/wtmp记录登录者的信息。 | 
/var/mail/ | 放置个人电子信箱。 | 
/var/run/ | 放置程序或服务的PID。 | 
/var/spool/ | 放置列队数据,即等待程序使用的数据,该数据通常在使用后删除。 | 
相关命令:
ls -l 结点:列出结点下的目录树。如ls -l /会列出根目录下的目录树。
文件和目录管理的相关指令
- 
cd 路径:变换目录。 - 
pwd:显示当前目录。 - 
mkdir 目录名:建立一个新目录。 - 
rmdir:删除一个空的目录。 - 
rm rf 文件名:删除一个文件或文件夹。 - 
ls 参数 文件或目录名称:文件与目录检视。参数:
-a:全部文件(包括隐藏文件)-A:全部文件(包括隐藏文件),不包括.与..这两个目录。-d:仅列出目录,不列出目录内的文件。-f:对列出的结果使用默认排序。-F:根据文件、目录等信息,给予附加数据结构,如:*表示可执行文件,/表示目录,=表示socket文件,|表示FIFO文件。-h:显示文件的容量大小。-i:列出inode号码。-l:列出文件的属性与权限等信息。-n:列出UID与GID而非使用者与组群的名称。-r:将排序结果反向输出。-R:列出目录下的所有文件(包含次目录)。-S:以文件容量大小排序。-t:按照时间排序。--color=never:不要依据文件特性给予颜色显示。--color=always:显示颜色。--color=auto:让系统自行依据设定来判断是否给予颜色。--full-time:以完整时间模式输出。--time=[atime.ctime]:输出access时间或改变权限属性时间,而不是内容变更时间。
 - 
cp 参数 来源文件 目标文件:将来源文件复制到目标文件下。参数:
-a:除-p的权限还加入SELinux属性。-d:若来源文件为链接文件的属性,则复制链接文件属性而非文件本身。-f:若目标文件已经存在且无法开启,则移除后再尝试一次。-i:若目标文件已经存在,在覆盖时会先询问是否进行。-l:进行硬式连结的连结档建立,而非复制文件本身。-p:连同文件的属性一起复制过去。-r:递归持续复制。-s:复制成为符号链接我呢见(即快捷方式)。-u:destination比source旧时才更新destination,或destination不存在时才复制。
 - 
rm 参数 文件:移除文件或目录。参数:
-f:忽略不存在的文件,不会出现警告信息。-i:删除前是否询问。-r:递归删除,删除目录下的所有文件。
 - 
mv 参数 来源文件 目标文件:将来源文件移动到目标文件(来源文件可以有多个,用空格隔开)。mv 参数 旧文件名 新文件名:文件重命名。参数:
-f:如果目标文件已存在,不会询问直接覆盖。-i:如果目标文件已存在,询问是否覆盖。-u:如目标文件已存在,且source比较新才会覆盖。
 - 
cat 参数 文件名:打开指定文件,读取内容。参数:
-A:相当于-vET。-b:列出行号,仅针对非空白行。-E:将结尾的断行字符$显示出来。-n:列出行号,空白行的也会列出。-T:将tab键以^I显示出来。-v:列出一些看不出来的特殊字符。
 - 
tac 参数 文件名:打开指定文件,反向读取内容,参数与cat一样。 - 
nl 参数 文件名:添加打印行号。使用示例:nl -b a -n ln -w filename。-b:指定行号的指定方式,主要有两种:-b a表示不论是否为空行都列出行号;-b t表示不列出空行的行号。-n:行号的表示方法,主要有三种:-m ln表示行号在屏幕的最左边显示,且不加0;-m rn表示行号在自己字段的最右方显示,且不加0;-m rx表示行号在自己字段的最右方显示,且加0。w:行号字段的占用的字符数。
 - 
more 文件名:打开指定文件,若屏幕展示不完则分页展示,使用空格键向下翻一页,Enter键向下翻一行,B键向回翻页,Q键退出文件, 输入:f显示文件名及当前显示行数。 - 
less 文件名:打开指定文件,若屏幕展示不完则分页展示,空格键向下翻一页,pagedown键向下翻一页,pageup向上翻一页,/字符串向下搜寻字符串,?字符串向上搜寻字符串,n重复前一个搜寻,N反向重复前一个搜寻,g前进到第一行,G前进到最后一行,q关闭文档。 - 
head -n number 文件名:读取文件的前number行。 - 
tail -n number 文件名:读取文件的后number行。 - 
od 文件名:读取非文本文件,参数略。 - 
touch 参数 文件名:修改文件的时间。参数:
-a:仅修订access time时间(读取时间),即atime时间,当文件内容被取用时会更新这个时间。-c:仅修订status time时间 (状态时间),即ctime时间,当文件的状态改变时会更新这个时间。-m:仅修订modification time(修改时间),即mtime时间,当文件的内容变更时会更新这个时间。-d:后面接时间用于指定修订的时间,而不是使用当前时间。-t:后面接时间用于指定修订的时间,而不是使用当前时间。时间格式为[YYYYMMDDhhmm]。
 - 
umask:查看文件预设权限,默认以数字显示,输入-S参数则以符号显示。紧跟四位数字可以修改默认预设权限。 - 
chattr 参数一 参数二:设置文件的隐藏属性。参数一:
+:增加一个特殊参数,其他参数保持不变。-:移除一个特殊参数,其他参数保持不变。=:设定所有特殊参数,会覆盖掉之前的。
参数二:
A:当存取文件时,访问时间atime不会被改变。S:将文件的修改同步写入磁盘(一般文件的修改是异步写入磁盘的)。a:使文件只能增加数据不能删除和修改数据。c:文件将被自动压缩,读取的时候自动解压缩。d:使文件不会被dump备份。i:使文件不能被删除、改名、连结、写入、修改。s:设定文件若被删除则完全从硬盘中移除。u:与s相反,文件被删除了其实还存在磁盘中,可以找回文件。
 - 
lsattr 参数 文件名:查看文件的隐藏属性。参数:
-a:将隐藏文件隐藏属性也列出来。-d:如果文件是目录,不列出目录内的文件的隐藏属性。-R:连同子目录的数据也一起列出来。
 - 
file 文件名:查看文件的类型。 - 
which 执行档名:查找执行档所在的位置(返回第一个搜寻结果),参数-a返回所有的搜寻结果。 - 
whereis 参数 文件名:在whereis会查找的目录中查找文件所在的位置。参数:
-l:累出whereis会去查询的几个目录。-b:只找binary格式的文件。-m:只找在说明文件manual路径下的文件。-s:只找source来源文件。-u:查找不在-b-m-s三个项目中的其他文件。
 - 
locate 参数 文件名:在已建立的数据库/var/lib/mlocate中查找指定文件。参数:
-i:忽略大小写。-c:不输出档名,只输出找到的文件数量。-l:输出指定行数,如输出五行是-l 5。-S:输出locate所使用的数据库文件的相关信息。-r:后面可接正规表示法的显示方式。
 - 
find 参数:在硬盘中查找文件,参数过多,暂略。 
路径
概念:路径分为以 / 开头的绝对路径,和不以 / 开头的相对路径路径。其中:
.:表示此层目录。..:表示上一层目录。-:表示前一个工作目录。~:表示目前用户身份所在的家目录。~account:表示account这个用户的家目录。
文件打包、压缩、备份
计算机系统使用的计量单位最小是 bytes ,而计算机的最小计量单位是 bits ,其中 1 bytes = 8 bits ,当系统存储数据时,如存储数字  1 时,1 会在 8 bits 中的最右边的一个存储单元中存储 1,其他 7 个存储单元存储 0 ,压缩就是通过技术将填 0 的 7个存储单元空出来,这样就节省了一部分存储单元。当然还有其他压缩方法,比如存储 1···1 (一千个)会存储为 1000个1 ,而不是真正的一千个一。
压缩命令(只能压缩单个文件):
- 
gzip 参数 文件名:解压.gz.zip.gzip文件,或将文件压缩成.gz。参数:
-c:将压缩文件的数据流输出到屏幕上。-d:解压文件。-t:检查压缩文件的一致性,看看文件是否有错误。-v:压缩文件,并显示源文件和压缩文件的压缩比等信息。-#:数字,-1代表最快但压缩比最差,-9代表最慢但压缩比最好,默认-6。
 - 
zcat 文件名:读取.gz.zip.gzip文件。 - 
bzip2、bzcat、bzmore、bzless、bzgrep:也是解压缩命令,使用方法略。还有其他解压缩命令也不再列出。 
打包命令(可以压缩文件包)
tar 参数 -f 新建文件名 打包文件名 :打包,注意打包不会自动生成文件名,需指定。
tar 参数 -f 打包文件名 :查看文档名。
tar 参数 -f 打包文件名 -C 解压目录 :解压。
-c:建立打包文件。-t:查看打包文件内有那些文件名。-x:解压。-z:透过gzip的支持进行压缩 / 解压缩(压缩文件名为好为.tar.gz)。-j:透过bzip2的支持进行压缩 / 解压缩(压缩文件名为好为.tar.bz2)。-J:透过xz的支持进行压缩 / 解压缩(压缩文件名为好为.tar.xz)。-v:在压缩 / 接压缩的过程中,将正在出来的文件名显示出来。-f 文件名:后面要立即接要被处理的文件名。-C 目录:将压缩文件解压到指定目录。
vi 编辑器
vi 编辑器分三种模式:
- 一般指令模式:使用 vi 打开一个文件就进入了一般指令模式,一般模式中无法编辑文件。
 - 编辑模式:在一般指令模式中按下 
I键、O键、A键、R 键可以进入编辑模式,进入编辑模式后画面的左下方会出现INSERT或REPLACE字样, 按Esc 键回到一般指令模式。 - 指令列命令模式:在一般模式中按下 
:键、/键、?键进去指令列命令模式,在这个模式下提供 搜寻资料、存盘、替换、退出 vi、显示行号等功能。 - 简单使用:
/bin/vi 文件名:使用 vi 打开或新建一个文件,按下: 键进入编辑模式,Esc 键回到一般模式,按下: 键进入指令列命令模式,输入wq保存编辑并退出 vi 编辑器。 
账号管理
/etc/passwd 文件:存放账号,及UID (使用者 ID),文件的每行代表一个账户,各字段使用 : 分隔,如图:

其中 密码 的标识全部为 x ,UID 中 0 代表管理员, 1-999 代表系统账号,1000-60000 表示可登录账号。
/etc/shadow:存放账号的密码等信息 ,登录账号时会在 /etc/passwd 中查找账号及 UID ,在 /etc/group 查找 GID ,若信息正确在 /etc/shadow 查找对应的密码,无误后登录账号。文件的每行代表一个账户,各字段使用 : 分隔,如图:

/etc/group:存放账号的 GID (组群 ID) 。文件的每行代表一个组群,各字段使用 : 分隔,如图:

相关命令:
- 
groups:输出当前用户的所属组群。 - 
useradd [-u UID] [-g 初始组群] [-G 次要组群] [-mM] [-c 说明] [-d 家目录绝对路径] [-s shel] 使用者账号名:增加账户。参数:
-u:指定一组数字作为UID。-g:指定初始组群。-G:指定次要组群。-m:建立用户家目录。-M:不建立用户家目录。-c:用户说明信息。-d:指定家目录的路径。-r:建立一个系统账号。-s:指定shell。-e:指定账号的失效日期,日期格式YYYY-MM-DD。-f:指定密码是否会失效,0为立即失效,-1为永远不失效。
 - 
passwd 参数 账户名称:操作账户密码,账户名称用于指定操作的账户,不填则默认操作当前账户。参数:
--stdin:透过来自前一个管线的数据,作为密码输入。-l:在/etc/shadow第二栏最前面加上!使密码失效。-u:与-l相反。-S:列出密码相关的参数,及 ``/etc/shadow` 文件内的大部分信息。-n:设置密码不可变动时间。-x:设置密码需要变更的时间。-w:设置密码过期的警告时间。-i:设置密码失效时间。
 - 
change 参数 账号名称:显示密码参数。参数:
-l:列出账号的详细密码参数。-d:设置最近改动密码的日期。-E:设置账号的失效日期,日期格式YYYY-MM-DD。-l:设置密码的失效日期。-m:设置密码不可变更的时间。-M:设置密码需要变更的时间。-W:设置密码过期警告的时间。
 - 
userdel 参数 账户名称:删除账户。参数:
-r:连同用户的家目录一起删除。
 - 
id 账户名称:列出当前账户或指定账户的UIDGID信息。 - 
groupadd 参数 组名:新增组群。参数:
-g GID:指定组群的GID。-r:建立系统组群。
 - 
groupmod 参数 组名:修改组群的相关参数。参数:
-g:修改GID。-n:修改组名。
 - 
groupdel 组名:删除组群。 - 
gpasswd 参数 组名:建立组群管理员。参数:
- :没有参数时,给组群设置一个密码。
 -A 组员列表:将控制权交给指定组员。-M 账号列表:将账号加入组群中。-r:移除组群的密码。-R:让组群的密码栏失效。
 - 
gpasswd 参数 组员 组名:将用户加入组群或将组员移除组群。参数:
-a:将账户加入组群。-d:将组员移除组群。
 - 
su 参数 账户:切换账户。参数:
-m:切换用户,但不读取使用者的配置文件。-c:使用用户进行一次指令。
 
登录文档
登录文档是记录系统活动信息的文件,多用于系统错误排查、网络服务错误、事件记录等。登录文档一般有下面几个:
/var/log/boot.log:记录本次开机启动信息。/var/log/cron:记录crontab排程产生的信息。/var/log/dmesg:记录开机过程中核心侦测产生的信息。/var/log/lastlog:记录所有账号最近一次登录系统时的信息。/var/log/maillog或/var/log/mail/*:记录邮件的往来信息。/var/log/messages:记录系统发生的所有错误信息。/var/log/wtmp/var/log/faillog:记录需要登录的软件的登录信息。/var/log/httpd/*/var/log/samba/*:网络服务登录信息,注意不同的网络服务会使用自己的登录文件来记录自己产生的信息。
软件管理
dpkg  与 RPM 是 Linux 安装软件的两个常用方式。
RPM 相关指令:
- 
rpm 参数 包名:安装软件包。参数:
-i:安装,即install。rp-v:察看更细部的安装信息画面。-h:以安装信息列显示安装进度。
 - 
rpm 参数:查询安装的软件。参数:
-q:后接软件名,查询软件是否已安装。-qa:列出所有已安装的软件。-qi:后接软件名,列出该软件的详细信息。或列出-ql:后接软件名,列出该软年的所有文件与目录所在的完整文件名。-qc:后接软件名,列出该软件的所有配置文件。-qd:后接软件名,列出该软件的所有说明文件。-qR:后接软件名,列出与该软件有关的相依软件所含的文件。-qf:后接文件名,找出该文件属于哪一个已安装的软件。-q --scripts:后接软件名,列出软件安装后需要执行的脚本。-qp [参数]:参数与上面参数一致,找出某个RPM文件内的信息,而不已安装的软件信息。
 - 
rpm 参数:查询软件变更。参数:
-Va:列出所有软件内被更改过的文件。-V:后接软件名,列出软件内被更改过的文件。-Vp:后接RPM文件名,列出该软件内可能被更改过的文件。-Vf:后接文件名,列出某个文件是否被更改过。
 - 
rpm -e 软件名:卸载指定软件。 
yum 相关指令:
- 
yum [参数] [查询工作项目]:查询功能。参数:
-y:当yum等待用户输入时,自动提供yes响应。--install root=/path:不使用默认安装路径,将软件安装到指定的地址/path。
查询工作项目:
search:后接软件名或软件描述关键字。list:列出目前yum所管理的所有软件名称与版本,类似于rpm -qa。info:列出yum所管理的所有软件的详细信息,或指定软件的详细信息。provides:后接文件名,找出该文件属于哪一个已安装的软件。
 - 
yum 参数:安装升级参数:
install 软件名:安装指定软件。update [软件名]:升级指定软件或升级整个系统。
 - 
yum remove 软件名:卸载指定软件。 
