鸟哥的 Linux 私房菜
1.磁盘分区
-
SATA1插槽上的文件名:/dev/sda
-
SATA5插槽上的文件名:/dev/sdb
-
USB磁盘(开机完成后才被系统捉到):/dev/sdc
分区表的两种形式:
1.MBR:分四区。开机管理程序纪录区与分区表则通通放在磁盘的第一个扇区, 这个扇区通常是 512Bytes 。
ex:/dev/sda1;/dev/sda2 ;/dev/sda3;/dev/sda4 分别对应win的CDEF盘。
可以划一个延伸分区(101400),在其基础上做逻辑分区,分出更多区域。(当然,此时primary分区就是0100)
2.GPT磁盘分区表:
在Linux系统下使用的是目录树系统
挂载:
2.BIOS and UEFI开机程序
- BIOS:开机首先主动执行,会认识第一个可开机的硬盘,找到其MBR:第一个可开机设备的第一个扇区内的主要开机记录区块,内含开机管理程序(boot loader);每个分区都拥有自己的开机扇区(boot sector)ex:切换win和linux
- if搭配BPT分区格式呢?则使用UEFI替代BIOS.
关机:
将数据同步写入硬盘中的指令: sync
重新开机: shutdown
关机: reboot, halt, poweroff
3.文件
(1)权限
“User, Group及Others,root
第一个字符代表这个文件是“目录、文件或链接文件等等”:
-
当为[ d ]则是目录,例如上表文件名为“.config”的那一行;
-
当为[ - ]则是文件,例如上表文件名为“initial-setup-ks.cfg”那一行;
-
若是[ l ]则表示为链接文件(link file);
-
若是[ b ]则表示为设备文件里面的可供储存的周边设备(可随机存取设备);
-
若是[ c ]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设备)。
-
[ s ]数据接口文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1smfnvrd-1655366425885)(C:\Users\a\AppData\Roaming\Typora\typora-user-images\image-20220522194240499.png)]
-
第二栏表示有多少文件名链接到此节点(i-node)
-
第三栏表示这个文件(或目录)的“拥有者帐号”
-
第四栏表示这个文件的所属群组
-
第五栏为这个文件的容量大小,默认单位为Bytes;
-
第六栏为这个文件的创建日期或者是最近的修改日期:
-
第七栏为这个文件的文件名
修改权限(root下):
-
chgrp :改变文件所属群组
-
chown :改变文件拥有者
-
chmod :改变文件的权限,1.数字法:> r:4 > w:2 > x:1
目录所需权限:使用者对这个目录至少需要具有 x 的权限
/(root, 根目录):与开机系统有关;
/usr (unix software resource):与软件安装/执行有关;
/var (variable):与系统运行过程有关。
路径:
绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;
相对路径:相对于目前路径的文件名写法。 例如 ./home/dmtsai 或 …/…/home/dmtsai/ 等 等。反正开头不是 / 就属于相对路径的写法
. :代表当前的目录,也可以使用 ./ 来表示;
… :代表上一层目录,也可以 …/ 来代表。
-:代表前一个工作目录
pwd:显示目前的目录
mkdir:创建一个新的目录
rmdir:删除一个空的目录
修改文件时间为最新或创建新文件: touch
查看文件内容:cat
目前使用者在创建文件或目录时候的权限默认值(该默认值需要减掉的权限!):umask,后三位分别代表u g o权限,r、w、x 分别是 4、2、1 分。文件默认属性 666 与目录默认属性 777
额外权限:
chattr (设置文件隐藏属性)
lsattr (显示文件隐藏属性)
文件特殊权限:当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID, SGID
SUID:用户拥有root权限
SGID:
SBIT:只对目录有用,作用是:当使用者对于此目录具有 w, x 权限,亦即具有写入的权限时;当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
搜寻文件:
which (寻找“可执行文件”也就是命令)
whereis (由一些特定的目录中寻找文件文件名),find locate
(2)文件系统为 Ext2
索引式文件系统
- superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量以及文件系统的格式与相关信息等;
- inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;
- block:实际记录文件的内容,若文件太大时,会占用多个 block 。
区分为多个区块群组 (block group) ,每个区块群组都有独立的 inode/block/superblock 系统
新建一个文件或目录
-
先确定使用者对于欲新增文件的目录是否具有 w 与 x 的权限,若有的话才能新增;
-
根据 inode bitmap 找到没有使用的 inode 号码,并将新文件的权限/属性写入;
-
根据 block bitmap 找到没有使用中的 block 号码,并将实际的数据写入 block 中,且更 新 inode 的 block 指向数据;
-
将刚刚写入的 inode 与 block 数据同步更新 inode bitmap 与 block bitmap,并更新 superblock 的内容。
日志式文件系统
-
预备:当系统要写入一个文件时,会先在日志记录区块中纪录某个文件准备要写入的信息;
-
实际写入:开始写入文件的权限与数据;开始更新 metadata 的数据;
-
结束:完成数据与 metadata 的更新后,在日志记录区块当中完成该文件的纪录。
将文件系统与目录树结合的动作我们称为挂载,挂载点一定是目录,该目录为进入该文件系统的入口。
(3)磁盘与目录容量
df:列出文件系统的整体磁盘使用量;
du:评估文件系统的磁盘使用量(常用在推估目录所占容量)
Hard Link :实体链接
Symbolic Link (符号链接,亦即是捷径)
lsblk:列出系统上的所有磁盘列表
blkid 列出设备的 UUID 等参数,UUID 是全域单一识别码
parted 列出磁盘的分区表类型与分区信息
MBR 分区表使用 fdisk 分区, GPT 分区表使用 gdisk 分区
常见的压缩指令就是 gzip(常用,时间快), bzip2,xz(压缩比高)
xfsdump:备份,完整备份与累积备份
(4)Vim
编辑模式 (insert mode):按下“i, I, o, O, a, A, r, R”等任何一个字母之后才会进入编辑模式,在画面的左下方会出现“ INSERT 或 REPLACE ”的字样。“Esc”即可退出编辑模式。
命令行命令模式 (command-line mode):输入“ : / ? ”三个中的任何一个按钮,就可以将光标移动到最下面那一列。
命令行 :wq 保存离开,:wq!强制保存离开
$或G:移动到最后一行,列
/word :搜索word
u 复原前一个动作。(常用)
[Ctrl]+r 重做上一个动作。(常用)
DOS 与 Linux 的断行字符可能需要转换
4.bash
[Tab] 接在一串指令的第一个字的后面,则为命令补全; [Tab] 接在一串指令的第二个字以后时,则为“文件补齐”
命令别名设置功能: (alias)
取用变量:echo $PATH
echo ${myname} 变量尚未被设置!是空的!
myname=VBird 变量赋值
变量内容若有空白字符可使用双引号““”或单引号“'”将变量内容结合起来
可用跳脱字符“ \ ”将特殊符号(如 [Enter],
,
空
白
字
符
,
′
等
)
变
成
一
般
字
符
若
该
变
量
为
扩
增
变
量
内
容
时
,
则
可
用
"
, \, 空白字符, '等)变成一般字符 若该变量为扩增变量内容时,则可用 "
,空白字符,′等)变成一般字符若该变量为扩增变量内容时,则可用"变量名称” 或
变
量
累
加
内
容
,
如
下
所
示
:
“
P
A
T
H
=
"
{变量} 累加内容,如下所示: “PATH="
变量累加内容,如下所示:“PATH="PATH":/home/bin”或“PATH=${PATH}:/home/bin”
取消变量的方法为使用 unset :“unset 变量名称”例如取消 myname 的设置: “unset myname”
若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量: “export PATH”
单引号与双引号的最大不
同在于双引号仍然可以保有变量的内容,但单引号内仅能是一般字符 ,而不会有特殊符号。
env 观察环境变量与常见环境变量说明
用 set 观察所有变量 (含环境变量与自订变量)
export+变量: 自订变量转成环境变量.仅下达 export 而没有接变量时,那么此时将会把所有的“环境变量”秀出来
read 变量名 :要读取来自键盘输入的变量
declare [-aixr] variable 设定变量数据类型
选项与参数:
-a :将后面名为 variable 的变量定义成为阵列 (array) 类型
-i :将后面名为 variable 的变量定义成为整数数字 (integer) 类型:declare -i sum=100+300+50
-x :用法与 export 一样,就是将后面的 variable 变成环境变量;
-r :将变量设置成为 readonly 类型,该变量不可被更改内容,也不能 unset
阵列 (array) 变量类型:var[index]=content
echo ${var[1]} :echo时要用{}
ulimit [-SHacdfltu] [配额]:设置限制配额
history [n]
history [-c]
history [-raw] histfiles
选项与参数:
n:数字,意思是“要列出最近的 n 笔命令列表”的意思!
-c :将目前的 shell 中的所有 history 内容全部消除
-a :将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles ,则默认写入 ~/.bash_history
-r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
-w :将目前的 history 记忆内容写入 histfiles 中!
^ 表示 [Ctrl]
Ctrl + C 终止目前的命令
Ctrl + D 输入结束 (EOF),例如邮件结束的时候;
Ctrl + M 就是 Enter 啦!
Ctrl + S 暂停屏幕的输出
Ctrl + Q 恢复屏幕的输出
Ctrl + U 在提示字符下,将整列命令删除
Ctrl + Z “暂停”目前的命令
- 代表“ 0 个到无穷多个”任意字符
? 代表“一定有一个”任意字符
[ ] 同样代表“一定有一个在括号内”的字符(非任意字符)。例如 [abcd] 代表“一定有一个字符, 可能是 a, b, c, d 四个任何一个
[ -] 若有减号在中括号内时,代表“在编码顺序内的所有字符”。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的!
[^] 若中括号内的第一个字符为指数符号 (^) ,那表示“反向选择”,例如 [^abc] 代表一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。
cmd1&&cmd2 1. 若 cmd1 执行完毕且正确执行(
?
=
0
)
,
则
开
始
执
行
c
m
d
2
。
2.
若
c
m
d
1
执
行
完
毕
且
为
错
误
(
?=0),则开始执行 cmd2。 2. 若 cmd1执行完毕且为错误 (
?=0),则开始执行cmd2。2.若cmd1执行完毕且为错误(?≠0),则 cmd2 不执行。
cmd1 ||cmd2 1. 若 cmd1 执行完毕且正确执行(
?
=
0
)
,
则
c
m
d
2
不
执
行
。
2.
若
c
m
d
1
执
行
完
毕
且
为
错
误
(
?=0),则 cmd2 不执行。 2. 若 cmd1 执行完毕且为错误 (
?=0),则cmd2不执行。2.若cmd1执行完毕且为错误(?≠0),则开始执行cmd2。
(1)正则表达式
[:alnum:] 代表英文大小写字符及数字,亦即 0-9, A-Z, a-z
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:blank:] 代表空白键与 [Tab] 按键两者
[:cntrl:] 代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del… 等等
[:digit:] 代表数字而已,亦即 0-9
grep [-A] [-B] [–color=auto] ‘搜寻字串’ filename
选项与参数:
-A :后面可加数字,为 after 的意思,除了列出该行外,后续的 n 行也列出来;
-B :后面可加数字,为 befer 的意思,除了列出该行外,前面的 n 行也列出来;
–color=auto 可将正确的那个撷取数据列出颜色
RE 字符
利用中括号 [] 来搜寻集合字符:([] 里面不论有几个字符,他都仅代表某“一个”字符)
grep -n ‘t[ae]st’ regular_express.txt
8:I can’t finish the test. 9:Oh! The soup taste good.
让 the 只在行首列出呢? 这个时候就得要使用定位字符了!我们可以这样做:[dmtsai@study ~]$ grep -n ‘^the’ regular_express.txt 12:the symbol ‘*’ is represented as start.
word$ 意义:待搜寻的字串(word)在行尾!范例:将行尾为 ! 的那一行打印出来,并列出行号 > grep -n ‘!$’ regular_express.txt
^ 符号,在字符集合符号(括号[])之内与之外是不同的! 在 [] 内代表“反向选择”,在 [] 之外则代表定位在行首的意义
. (小数点):代表“一定有一个任意字符”的意思;ex: ‘g…d’
*(星星号):代表“重复前一个字符, 0 到无穷多次”的意思,为组合形态
限定连续 RE 字符范围 {}:grep -n ‘go{2,5}g’ regular_express.txt
sed:
[dmtsai@study ~]$ sed [-nefr] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到屏幕上。
但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令行界面上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以执行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正则表达式的语法。(默认是基础正则表达式语法)
-i :直接修改读取的文件内容,而不是由屏幕输出。
动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表“选择进行动作的行数”,举例来说,如果我的动作
是需要在 10 到 20 行之间进行的,则“ 10,20[动作行为] ”
function 有下面这些咚咚:
a:新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c:取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d:删除,因为是删除啊,所以 d 后面通常不接任何咚咚;ex:sed ‘2,5d’
i:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p:打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s:取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式!
例如 1,20s/old/new/g 就是啦!
(2)shell scripts:
1.以 bash 程序来执行:通过“ bash shell.sh ”或“ sh shell.sh ”来执行
2.用 source 来执行脚本:在父程序中执行:source showname.sh
程序第一行 #!/bin/bash
可以利用“
(
(
计
算
式
)
)
”
来
进
行
数
值
运
算
:
v
a
r
=
((计算式)) ”来进行数值运算:var=
((计算式))”来进行数值运算:var=((运算内容));echo $(( 13 % 3 ))
计算含有小数点的数据时,可以通过 bc 这个指令:echo “123.123*55.9”; bc
test 指令的测试功能
利用判断符号 [ ] ,中括号的两端 需要有空白字符来分隔:[□" H O M E " □ = = □ " HOME"□==□" HOME"□==□"MAIL"□]
function fname() { 程序段 } 要放在最前面
循环:
while [ condition ] <==中括号内的状态就是判断式
do <==do 是循环的开始!
程序段落 done <==done 是循环的结束
5.Linux 帐号管理
每个登陆的使用者至少都会取得两个 ID ,一个是使用者 ID (User ID ,简称 UID)、一个是群组 ID (Group ID ,简称 GID)
一般使用者转变身份成为 root 主:
1.以“ su - ”直接将身份变成 root 即可,但是这个指令却需要 root 的密码,也就是说,如果 你要以 su 变成 root 的话,你的一般使用者就必须要有 root 的密码才行;
- 以“ sudo 指令 ”执行 root 的指令串,由于 sudo 需要事先设置妥当,且 sudo 需要输入使 用者自己的密码, 因此多人共管同一部主机时, sudo 要比 su 来的好喔!至少 root 密码 不会流出去!
段落 done <==done 是循环的结束
5.Linux 帐号管理
每个登陆的使用者至少都会取得两个 ID ,一个是使用者 ID (User ID ,简称 UID)、一个是群组 ID (Group ID ,简称 GID)
一般使用者转变身份成为 root 主:
1.以“ su - ”直接将身份变成 root 即可,但是这个指令却需要 root 的密码,也就是说,如果 你要以 su 变成 root 的话,你的一般使用者就必须要有 root 的密码才行;
- 以“ sudo 指令 ”执行 root 的指令串,由于 sudo 需要事先设置妥当,且 sudo 需要输入使 用者自己的密码, 因此多人共管同一部主机时, sudo 要比 su 来的好喔!至少 root 密码 不会流出去!