第零章:计算器概论
- CPU(Central Processing Unit, 中央处理器):是一个具有特定功能的芯片,里头包含微指令集。CPU 主要包含两部分:算数逻辑单元与控制单元。
- CPU 架构:
- 精简指令集(Reduced Instruction Set Computer, RISC),如 ARM CPU,多用在手机等设备。
- 复杂指令集(Complex Instruction Set Computer, CISC),如 x86 CPU,多用于计算机。
- 操作系统的位,如32位、64位,是指CPU一次数据读取的最大值。32位的CPU所能读写的最大数据两大概是4GB。
- 所谓外频指的是CPU与外部组件进行数据传输时的速度,倍频则是CPU内部用来加速工作效能的一个倍数,两者相乘才是CPU的频率速度(内频)。
- 超频:CPU 的倍频是在出厂时锁定的,超频是更改计算机的外频。(现在不用自己设置了。)
第一章:Linux是什么
第二章:主机与磁盘划分
第三章:安装CentOS7.x
第四章:首次登入与在线求助
- 通过
who命令查询哪些用户在线 - 通过
netstat -a查询网络的联机状态netstat -tuln查看当前系统开启的网络服务,常见端口及其特定服务如下- 80 www
- 22 ssh
- 21 ftp
- 25 mail
- 111 RPC
- 631 CUPS(打印服务功能)
- 通过
ps -aux查看背景执行程序
正确的关机顺序:
- 将数据同步写入硬盘中的指令:
sync(将内存中数据同步到硬盘) - 最正确的关机指令:
shutdown - 重新开机:
reboot - 关机:
halt
第五章:Linux的文件全选与目录配置
如果一个文件的权限为drwxr--r--,那么对于非root用户该文件是否夹是否可读?答案是不可以的,因为对于文件夹来说,只有具备了可执行权限,才能执行cd等命令,也就是说对于该文件,其他用户连进入都进入不了,更别说阅读了。
drwxr-xr-x. 19 root root 3280 Jul 31 19:26 dev
- 第一栏代表这个档案的属性,其中第一个属性
d表示目录-表示档案l表示连接b表示为装置文件里的可供存储的接口设备c表示装置文件里的串行端口设备,如键盘、鼠标等
- 第二栏表示连接占用的节点(i-node)
- 第三栏表示这个档案或目录的拥有人
- 第四栏表示拥有人的群组,第五栏为这个档案的大小
- 第六栏为这个打南的建档日期或者最近的修改日期
- 第七栏为档案的名称。
Linux正式的档案格式是etx2,目前正升级到etx3。windows用来存取硬盘的数据格式为FAT(或FAT16)
一个linux文档能不能被执行,与其文件名毫无关系。只要其属性栏中有x即可。
相关命令:
chgrp改变档案所属群组chown改变档案所属人chown [-R] 账号名称 档案或目录,-R表示更改目录下的所有文件chown [-R] 账号名称:群组名称 档案或目录,同时修改所属人和群组
chmod改变档案的属性、SUID、等等的特性chmod a+w filename为所有用户添加写权限,a代表所有用户,u代表user,g代表group,o代表otherchmod o-xchmod g=rwxchmod og=rwx
第六章:Linux文件与目录管理
什么是 inodes
block 是磁盘可以记录的最小单位,是由数个 sector 所组成,所以他的大小通常为 n*512 bytes。block 是记录档案内部数据的地区,而 inode 则是记录该档案属性、及该档案放置在哪一个 block 之内的信息。
ln link 分为 hadr link 和 symbolic link:
-
Hard Links:当系统读取某一个档案的时候,就会先去读取 inode table,然后再根据 inode 的信息到 block area 去将数据取出来,而 hard link 就是直接建立一个 inode 连结到档案放置的 block 区,也就是说,进行 hard link 时,实际上,你的档案内容不会改变,只是你在查询的时候,利用原来的 inode 与后来的 inode 均可被指定到该档案放置的地点,因此两个档案的内容会是一样的。所以读取任何一个 inode 的结果都是存取在同一个档案的内容。不过这样一来就有问题拉,因为 inode 是会连结到 block 区域去的,而目录本身仅消耗 inode 而已,这样 hard link 就不能连结目录。(hard links 不能跨 filesystem 和 link 目录)
-
Symbolic Links , 他相当于一个独立的档案
-
SUID(4), 如
-rwsr-xr-x- SUID 权限仅对二进制程序(binary program)有效
- 执行者需要对该程序就有
x的可执行权限 - 本权限在该程序的执行过程(run-time)中有效
- 执行者将具有该程序所有者(owner)的权限
-
SGID(2):目录具有 SGID 的特殊权限时,代表用户在这个目录下新建的文件之群组都会与该目录的组名相同
-
SBIT(1): 代表在该目录下用户建立的文件只有自己与root能够删除,如加入 SBIT 权限
chmod 1755 test
相关命令
mkdir,语法mkdir [-mp] [目录名称]-m设置档案的权限,如mkdir -m 711 test-p递归创建目录,如mkdir -p test1/test2/test3
rmdir [-p] [目录名称]-p将上层的目录也删除
echo $PATH打印当前环境变量,$表示变量PATH="$PATH":/root把 root 目录加入环境变量,:为linux文件分隔符
ls [-ailS]-a全部档案都列出,包括隐藏档-i列出 inode 的值-l列出详细信息-S按档案大小排序--color=never不要显示颜色--color=always均显示yanse--color=auto由系统自行判断
cp [-drsu] [来源档] [目的档],cp /usr/bin/psswd ., 复制文件到当前目录。-d在进行 copy 的时候,如果是 copy 到 link 档,若不加任何参数,则预设情况中会将 link 到的源文件 copy 到目的地,若加-d时,则link档案可原封不动得将link这个快捷方式拷贝到目的地。-r可以进行目录得 copy-s做成连接档,而不是 copy,与 ln 指令相同。-u, --update如果来源档比较新,或者是没有目的档,那么才会进行 copy 动作。可用于备份得动作中。
rm [-fir] [档名]-i提供使用者确实(这是默认值)-r递归-f“force” 强力杀掉
mv [-u] [来源档] [目的档]-u为 update 的简写,当来源档比目的档还新是才会动作,也可以用来变更档名。
basename [目录]将目录或档案的最后一部分展示出来,如basename /usr/local/etc的输出为etcdirname [目录],与basename命令刚好相反,展示目录的前部分,如dirname /usr/local/etc的输出为/usr/local- 观看档案内容
cat由第一行开始显示档案内容tac从最后一行开始显示,可以看作是cat倒着写more一页一页的显示档案内容。less与more类似,但是比more更好的是可以向前翻页。head只看头几行tail只看尾巴几行tail [-n number] [档名]number 表示显示最后几行。tail -f [档名]动态的查看日志
nl显示的时候,顺道输出行号od以二进制的方式读取档案内容
ln [-s] [来源档] [目的档]- 如果不加
-s参数,使用的 hard link
- 如果不加
du -k查看该目录下占用的磁盘空间umask- 不加参数,直接使用,显示当前目录的默认属性,如显示为
0002,则表示为在该目录下创建的目录或文件的 other 没有写权限 - 加参数,使用三位数字,如
umask 002设置 umask。
- 不加参数,直接使用,显示当前目录的默认属性,如显示为
chattr [+-=][ASacdistu] [档案目录名称]设置档案属性lsattr [-aR]显示档案属性- 搜寻文件或目录
which [文件名]查看可执行文件的位置whereis [-bmsu] [目录名称]查看文件的位置,会搜寻数据库locate [目录名称]配合数据库查看文件位置find [路径] [参数] [名称]实际搜寻硬盘去查询文件名称
file [文件名]用于查看文件信息
第七章:磁盘与文件系统管理
/etc/passwd文件和 /etc/shadow文件
- passwd :每一行代表一个账号,构造如:
beau:x:1000:1000:centos:/home/beau:/bin/bash,以:分隔- 第一部分是账号名称
- 第二部分是密码,用
x代替,密码存在/etc/shadow文件中 - 第三部分UID, 0 为系统管理员,1
500为保留给系统用的ID,50065535给一般使用者 - 第四部分GID
- 第五部分说明,没有实际意义
- 第六部分,家目录
- 第七部分,Shell
- shadow,构造如:
beau:$1$D5QzZ6M/$5fHFE1ohNnmBZ4/Q8Y6nd1:17725:0:99999:7:::- 第一部分, 账号名称
- 第二部分,密码
- 第三部分,上次更更改密码的日期
- 第四部分,密码不可被更动得天数
- 第五部分,密码需要重新变更得天数
- 第六部分,密码需要变更期限前得警告期限
- 第七部分,账号失效期限
- 第八部分,账号取消日期
- 第九部分,保留字段
相关指令
groupadd [-g GID] groupname- 如
groupadd -g 55 testing设定一个 testing 群组,GID 为55.
- 如
groupdel groupname删除群组,需要先删除用户。useradd [-u UID] [-g GID] [-d HOME] [-mM] [-s shell] username-d直接将他的家目录指向已经存在的目录-M不建立家目录-s定义其使用的 shell
userdel [-r] username-r将该账号的 [home directory] 和 [/var/spool/mail/username]一并删除
chsh [-l] [-s shellname]-l列出目前这部机器上面能用的 shell 名称-s改变目前的 shell 成为 shellname
su将一般用户切换成 root 用户,su beau直接将用户切换为beausudo [-u username] [commond]- 为用户添加 sudo 命令步骤如下
- 使用root用户,使用
visudo命令,该命令会编辑/etc/sudoers文件,不可以直接用vi编辑该文件。 - 加入一行,如
test ALL=(ALL) ALL。 使 test 用户可以使用 sudo。
- 使用root用户,使用
- 系统默认,只要在
wheel这个用户组的用户,都可以使用sudo命令。
- 为用户添加 sudo 命令步骤如下
- 使用者查询
id [username]查询使用者的 UID, GID 及所拥有的群组groups查询使用者能够支持的群组finger [-s] username使用者的一些信息,-s长的列出
第八章:文件系统的压缩、打包与备份
相关命令
tar [-zxcvfpP] filename- 常用解压命令
tar -zxvf - 常用压缩命令
tar -zcvf filename.tar.gz directory -z是否同时具备 gzip 属性-x解开一个压缩文件-t查看 tarfile 里的文件-c建立一个压缩文件-v压缩的过程中显示档案-f使用文件,注意,在 f 之后要立即接文件名,不要加参数- 如
tar -zcvfP tfile sfile要写成tar -zcvPf tfile sfile
- 如
-p使用档案原来的属性,属性不会依据使用者而变-P(大写的P)可以使用绝对路径-N比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新文件中-exclude FILE在压缩过程中,不要将FILE打包
- 常用解压命令
- 文件备份和还原
cpio -covB > [file|device]备份cpio -icduv < [file|device]还原- 参数说明;
-o将资料 copy 到输出文件上-i将数据从文件或装置上 copy 到系统当中-t查看 cpio 建立的档案或装置的内容-c一种较新的 portable format 存储方式-v让存储的过程中文件名称可以在屏幕上显示-B让预设的 Blocks 可以增加至 5120 bytes,预设是 512 bytes-d自动建立目录-u自动将较新的文件覆盖较旧的文件
第九章:vim程序编辑器
vi 三种模式:
- 一般模式:可以使用上下左右来移动光标,可以使用删除字符,删除整行来处理文档内容,也可以使用复制、粘贴。
- 编辑模式,输入[i , I , o, O, a, A, r, R] 等字符,进入编辑模式,按下
esc退出编辑模式 - 指令列命令模式:在一般模式中式如
:或/进入。 - 在使用 vim 时,若不小心按了
ctrl+s则画面会被冻结,可以使用ctrl+q来解除冻结
常用操作
第十章:认识与学习Bash
echo $PATH或者echo ${PATH}打印环境变量env显示目前系统中主要的预设变量内容set显示所有变量(包含汉奸变量和自定义变量)soruce 配置文件名读入环境配置文件,如source ~/.bashrc等价于. ~/.bashrc
注意:执行当前文件夹下的指令需要使用./command。
系统启动会加载/etc/profile文件,为系统配置一些变量,同时该文件会将/etc/profile.d/*.sh所有文件加载。
变量的设置规则
- 变量与变量内容以等号
=来连接 - 等号两边不能直接接空格
- 变量名称只能是引文字母与数字,但数字不能是开头字符
- 若有空格符可以使用双引号
"或'单引号来将变量内容结合起来,但需要特别留意,双引号内的特殊字符可以保持变量特性,但是单引号内的特殊字符则仅为一般字符 - 必要时需要以跳脱字符
\来将特殊符号如enter,$,\,空格等变成一般符号 - 在一串指令的执行中,还需要藉由其他额外的指令所提供的信息时,可以使用反单引号加指令的方式或者使用
$(指令)。如version=$(uname -r),再使用echo $version即可得到操作系统的内核。 - 若该变量为扩展变量内容时,则需要以双引号及
$变量名称,如PATH="$PATH":/home - 若该变量需要在其他子程序执行,则需要以
export来使变量可以使用,如export PATH - 通常大写字符为系统预设变量,自行设定变量可以使用小写字符,方便判断
- 取消变量的方法为:
unset 变量名
在变量的设定中,双引号可以保有变量的内容,但单引号内仅能使一般字符,而不会有特殊符号。
# 变量设置默认值
username=${username-root} # 如果 username 没有指定,则其默认值为 root
username=${username:-root} # 如果 username 没有指定,或者为空串,则默认值为 root
相关指令
read 变量名读取键盘输入- array ,如
a[索引]=内容,echo ${a[索引]} echo $RANDOM输出随机数eval主要是用来作变量迭代的。- 如
days=365;years=days,使用echo \$$yeas会输出$days,而使用eval echo \$$yeas才会输出365。
- 如
- 命令别名
alias lm='ls -al'unalias lm
history显示历史指令,!number执行历史命令中哪一条。source 文件名重新载入变量配置文件last | grep beau | wc -l统计beau这个用户近期登陆的次数cut,多用于日志分析。cut -d"分隔字符" [-cf] fiels-d后面接的时用来分隔的字符,预设时空格符-c后面接的是第几个字符-f后面接的是第几个区块
sort [-t 分隔符] [(+起始)(-结束)] [-nru]排序-t分隔符,使用分隔符来隔开不同的区间,预设是 tab+start -end由 start 区间排序到 end 区间-n使用纯数字排序(否则就会以文字排序)-r反向排序-u相同的出现一行,只列出一次
wc [-lmw],-l统计行,-m统计字符,-w统计字uuiq去除重复行,如last | cut -d" " -f1 | sort | uniqtee使用命令重导向>时,如果输入到文件中,屏幕就不会显示内容,使用该命令,可以同时向文件输出,且在屏幕上显示tr [-ds] SET1,也常用在正则表示法里面-d删除 SET1 这个字符串-s取代掉重复的字符
split [-bl] 输入文件 输出文件前导字符-b以文件 size 来分-l以行数来分
bash shell 的设定文件
- 系统设定值:每个使用者进入到 bash shell 之后,会先读取的文件
/etc/profile这个文件设定了几个最重要的变量,如PATH\USER\MAIL\HOSTNAME\HISTSIZE\umask等,也同时规划出了/etcinputrc这个针对键盘热键设定的数据内容。你可以在这里设定总体的PATH等信息!同时,这个file也规划出/etc/profile.d及/etc/inputrc这两个文件,其中inputrc是用在history(历史指令)的作用上的。/etc/bashrc这个文件在规划umask的功能,也同时规划出提示符的内容。不同的 Linxu distribution 该文件位置可能不同。etc/man.conf规范了使用 man 时, man page 的路径去哪里寻找
- 个人设定值:个人的设定,相关文件放在该用户的家目录下面,是隐藏文件
~/.bash_profile定义了个人化的路径(PATH)与环境变量的文件名称~/.bashrc可以在该文件中设置个人化变量~/bash_history记录历史使用命令,离开 shell 后才会写入该文件,之前存在内存当中。~/.bash_logout定义在注销 shell 时,BASH 会为你做的事
命令重导向
-
标准输入
< -
标准输出
1>,1>>, 两个>>表示以追加的方式。 -
错误输出
2>,2>>将显示结果输出到 list.txt 文件中,若该文件存在则取代。
ls -al > list.txt
将显示结果输出导 list.txt 文件中,若文件存在,则累加
ls -al >> list.txt
将显示的结果,正确的输出到 list.txt 中,错误的输出到 list.err
ls -al 1> list.txt 2> list.err
将显示的数据,不论正确错误都输出到list.txt 中
ls -al 1> list.txt 2> &1 ls -al l>> list.txt 2> &1
将显示的结果正确的输出到 list.txt 中,错误的丢弃
ls -al 1> list.txt 2> /dev/null
第十一章:正则表示法与文件格式化处理
相关命令
grep [-acinv] '搜寻字符串' filename以整行为单位截取,将包含查询结果的行显示-a将 binary 文件以 text 文件的方式搜寻数据-c计算找到搜寻字符串的次数-i忽略大小写-n顺便输出行号-v反向选择,亦即显示处没有搜寻字符串内容的那一行
diff file1 file2比较两个文件的不同
第十二章:学习 Shell scripts
变量的设定规则:变量与变量的内容以一个等号连结,等号两边不能有空格符。变量的内容若有空格,可以使用单引号或双引号将变量内容括起来。双引号内的特俗字符如 $ 等,可以保持原有特性。单引号内的特殊字符仅为一般字符(纯文本)。
declare [-afirx]声明变量,变量不声明,默认我字符串类型,declare +x将-变成+可以进行取消动作-a定义数组-f定义函数-i定义整数-r定义为只读-x定义为透过环境输出变量
- bash 默认计算只能到整数,需要计算小数,使用
bc命令,如echo "123.123*55.9" | bc
var[1]="small main"
var[2]="big main"
var[3]="nice main"
echo "${var[1]},${var[2]},${var[3]}"
script 逻辑判断与表达式
# 通过 test 命令判断文件是否存在
# test 命令有诸多用法,注意通过 man test 命令查看
# 在中括号中可以直接使用,而不要 test, 如 [ -e /home/beau ] 注意两端空格
test -e /home/beau && echo "exist" || echo "Not exist"
注意: 括号[]内的每个组件都需要有空格来分隔;在括号内的变数,最好都以双引号括起来;在括号内的常数,最好都用单或双引号括起来。
#!/bin/bash # 指定所使用的 shell
#set -x # 相当于 sh -x ?(测试失败) 需确认
if [ ! -e logical ]; then # -e 判断文件或目录是否存在
touch logical
echo "Just make a file logical"
exit 1
elif [ -e logical ] && [ -f logical ]; then # -f 判断文件是否存在
rm logical
mkdir logical
echo "remove file ==> logical"
echo "and make directory logical"
exit 1
elif [ -e logical ] && [ -d logical ]; then # -d 判断目录是否存在
rm -rf logical
echo "remove directory ==> logical"
exit 1
else
echo "Dose here hava anything?"
fi
一个指令的执行成功与否可以使用$?这个变量来观察,那么我们也可以使用 exit 这个指令来让程序中断,并且回传一个数值给系统。如,使用exit 1,代表离开该 scripte 并回传一个 1 给系统,所以执行完这个 script 后,若接着下达 echo $? 则可得到 1 的值!利用这个 exit n 的功能,还可以自定义错误信息。
shell script 的默认变数
$0代表 script 的文件名$1, $2, $3...代表执行的时候,输入的参数$#代表参数的个数,不包含$0$@代表"$1" "$2" "$3",每个变量时独立的,用双引号括起来。$*代表"$1c$2c$3c",其中c为分隔符,默认为空格。
条件判断:if...then...fi, case......esac
注意中括号两端的空格
# 运行 sh test08-ifthen.sh hello
if [ "$1" = "hello" ]; then
echo "Hello ! How are you?"
elif [ "$1" = "" ]; then
echo "You MUST input parameters"
else
echo "The only accept parameter is hello"
fi
echo "This program will print your selection!"
case $1 in
one)
echo "your choice is one"
;;
two)
echo "your choice is two"
;;
three)
echo "your choice is thress"
;;
*)
echo "Usage {one|tow|thress}"
exit 1
esac
for...do..done, while...do...done, until...do...done
declare -i s # 声明变量
for ((i=1; i<=100; i=i+1)) # 注意双重括号
do
s=s+i
done
echo "The count is ==> $s"
declare -i i
declare -i s
while [ "$i" != "101" ] # 空格
do
s=s+i
i=i+1
done
echo "The count is ==> $s"
declare -i i
declare -i s
until [ "$i" = "101" ]
do
s=s+i
i=i+1
done
echo "The count is ==> $s"
LIST="Tomy Jony Mary Geoge"
for i in $LIST # 默认以空格分隔
do
echo $i
done
script debug
sh [-nvx] scripts-n不要执行 scripts,查询 scripts 内的语法,若有错误则予以列出-v在执行 scripts 之前,先将 scripts 的内容显示在屏幕上-x将有使用到的 scripts 内容显示在屏幕上
函数
function printit(){
echo "Your choice is ${1}" # 函数也可以使用 $1 $2 这种,获取参数
}
case ${1} in
one)
printit 1
;;
two)
printit 2
;;
three)
printit 3
;;
*)
echo "Usage ${0} {one|two|three}"
;;
esac