声明
本文为学习Linux的笔记,主要内容来自鸟哥的Linux私房菜,也有一些视频和各处零零碎碎的文章,随着学习和使用内容也会慢慢的更新,笔记里面的内容主要是对学到知识点的梳理和备忘,建议大家查看原版,这样会对Linux有个更清晰完整的认识。
文件操作命令
touch 修改文件的访问时间和修改时间 也可用来创建文件
chown 改变文件拥有者和所在用户组
chgrp 改变文件所属群组
chmod 改变文件的权限, SUID, SGID, SBIT等等的特性
chattr 配置文件隐藏属性
lsattr 显示文件隐藏属性
dd 转换和复制文件命令 可用来复制iso到U盘
if input file 也可以是装置喔!
of output file 也可以是装置;
bs 规划的一个 block 的大小,若未指定则默认是 512 bytes(一个 sector 的大小)
count 多少个 bs 的意思
dd if=input_file of=output_file bs=block_size count=number
time dd if=/dev/zero of=test.dbf bs=1M count=100 oflag=direct 测试IO写入速度
文件查看命令
file 查看文件类型
cat 由第一行开始显示文件内容
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
nl 显示的时候,顺道输出行号!
more 一页一页的显示文件内容
space 代表向下翻一页;
Enter 代表向下翻『一行』;
/str 代表在这个显示的内容当中,向下搜寻str这个关键字;
:f 立刻显示出档名以及目前显示的行数;
q 代表立刻离开 more ,不再显示该文件内容。
b or [ctrl]-b 代表往回翻页,不过这动作只对文件有用,对管线无用。
less 与more类似,但是比more更好的是,他可以往前翻页!
space 向下翻动一页
[pagedown] 向下翻动一页
[pageup] 向上翻动一页
/str 向下搜寻str的功能
?str 向上搜寻str的功能
n 重复前一个搜寻 (与 / 或 ? 有关!)
N 反向的重复前一个搜寻 (与 / 或 ? 有关!)
q 离开 less 这个程序
printf 格式化输出内容
\a 警告声音输出
\b 倒退键(backspace)
\f 清除萤幕 (form feed)
\n 输出新的一行
\r 亦即 Enter 按键
\t 水平的 [tab] 按键
\v 垂直的 [tab] 按键
\xNN NN 为两位数的数字,可以转换数字成为字节。关於 C 程序语言内,常见的变量格式
%ns 那个 n 是数字, s 代表 string ,亦即多少个字节;
%ni 那个 n 是数字, i 代表 integer ,亦即多少整数码数;
%N.nf 那个 n 与 N 都是数字, f 代表 floating (浮点),如果有小数码数,
假设我共要十个位数,但小数点有两位,即为 %10.2f !
printf '%s\t %s\t %s\t %s\t %s\t \n' $(cat printf.txt)
awk 逻辑运算字节
head 只看头几行
tail 只看尾巴几行
od 以二进位的方式读取文件内容!
diff 文件比较工具 以行来比对
-b 忽略一行当中,仅有多个空白的差异(例如 "about me" 与 "about me" 视为相同
-B 忽略空白行的差异。
-i 忽略大小写的不同。
patch 命令可以将旧版数据升级到新版 (主要亦由 diff 创建 patch 的补丁来源文件)
cmp 以位组来比对文件 通常比对二进制文件
通配符
* 代表 0 个到无穷多个任意字符
? 代表一定有一个任意字符
[ ] 例如 [abcd] 代表a, b, c, d 这四个任何一个
[-] [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的!
[^ ] 反向选择,例如 [^abc] 代表非 a, b, c 的其他字符就接受的意思。
ll -d /etc/cron* /etc/底下以 cron 为开头的档名
ll -d /etc/????? /etc/底下文件名『刚好是五个字母』的文件名
ll -d /etc/*[0-9]* /etc/底下文件名含有数字的文件名
ll -d /etc/[^a-z]* /etc/底下,档名开头非为小写字母的文件名:
echo [选项] [输出内容] 把指定内容输出到屏幕上
-e 支持控制字符
\a 警告音
\b 退格键
\n 换行键
\r 回车键
\t 制表键
\v 垂直制表键
\0nnn 按照8进制ASCII码输出字符 nnn是三位8进制数字
\xhh 按照16进制ASCII码输出字符 hh是两位16进制数
echo -e "\e[1;34m 天上掉下个林妹妹!\e[0m" 通过颜色输出字符
目录处理命令
mkdir 创建目录 -p 可创建子目录
ls 查看目录
-l 详细内容
-h 人性化文件大小
/etc/DIR_COLORS or ~/.dir_colors 颜色配置文件
其中第一个字符的含义
d 目录
- 文件
l 示为连结档(link file);
b 示为装置文件里面的可供储存的接口设备(可随机存取装置);
c 示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
s 数据接口文件(sockets):
p 数据输送文件(FIFO, pipe) first-in-first-out 主要的目的在解决多个程序同时存取一个文件所造成的错误问题
tree 以树形借口显示文件
rm 删除目录 -rf 强制删除子目录和文件
mv 移动目录,可以重命名目录或文件
ln 创建链接文件, -s创建软链接, 硬链接指向同一i节点盒block数据块, 软链接和windows的快捷方式类似
文件搜索命令
locate 搜索后台数据库中的文件 数据库每天一更新 /var/lib/mlocate
updatedb 更新locate命令的数据库
whereis 搜索命令的命令所在位置和帮助文件 可搜索命令的文字
which 搜索命令所在位置 和 别名
find 搜索文件,可按 时间 所有者 大小 i节点等
find /var/log -size -1k -exec ls -lh {} \; 对搜索结果使用第二条命令来处理 -exec {} \; 为固定组合
帮助命令
man 查看命令的帮助文档 manual的缩写
/-d 搜索帮助文档中包含-d的行 n下一个 N 上一个
man man 可查看帮助级别的意义
man -f passwd 查看passwd命令的帮助级别 相当于 whatis passwd
man 1 passwd 获取命令级别为1的帮助
man -k passwd 查看所有帮助文档中包含passwd关键字的命令的帮助 相当于 apropos passwd
--help 获取选项帮助
help 获取内部命令的帮助,可通过whereis来判断命令是否内部命令,无执行文件则内部命令
info 在系统帮助文档内检索命令的帮助信息
压缩和解压缩命令
zip 压缩后的文件名 源文件
zip example.zip example
-r 压缩目录
unzip 解压目录
gzip 压缩文件为gz格式 压缩完文件会消失
gzip example
gzip -c example > example.gz 压缩文件不让原文件消失
gzip -r example 压缩目录内的全部子文件
gzip -d example.gz 解压缩文件
gunzip example.gz 解压缩文件
bzip2 压缩文件为bz2文件格式 不能压缩目录
bzip2 example 压缩example文件不保留原文件
bzip2 -k example 压缩example文件,保留原文件
bzip2 -d example.bz2 解压缩文件
bunzip2 example.bz2 解压缩文件
bunzip2 -k example.bz2 解压缩文件 保留原文件
tar 打包命令
-c 打包
-v 显示过程
-f 指定打包后的文件名
-x 解打包
-z 压缩为 .tar,gz 格式
-j 压缩或者解压为.tar.bz2格式
-t 测试压缩包 只查看 不解压
-C 指定解压目录
tar -cvf example.tar example 打包文件或目录为一个文件包
tar -xvf example.tar 解打包一个包文件
tar -zcvf example.tar.gz example 打包并压缩文件为.tar.gz格式的压缩文件包
tar -zcvf /tmp/example.tar.gz example example2 打包并压缩example example1两个文件到/tmp/目录
tar -zxvf example.tar.gz 解压缩一个.tar.gz的文件压缩包
tar -jcvf example.tar.bz2 example 打包并压缩文件为.tar.gz格式的压缩文件包
tar -jxvf example.tar.bz2 解压缩一个.tar.bz2的文件压缩包
tar -jxvf example.tar.bz2 -C /tmp/ 解压缩一个.tar.bz2的文件压缩包到/tmp/目录下
关机和重启命令
shutdown [选项] 时间 关机或者重启命令
-h 关机
-r 重启
-c 取消前一个关机命令
shutdown -r 05:30 凌晨05:30重启
shutdown -r 05:30 & 在后台执行重启命令
其他关机命令 不如shutdown安全 shutdown可在关机重启前保存服务
halt
poweroff
init 0
其他重启命令
reboot
init 6 调用系统运行级别
0 关机
1 单用户 启动最小程序 类似安全模式
2 不完全多用户 不含NFS服务 NFS为文件共享服务
3 完全多用户 正常字符界面
4 未分配
5 图形界面
6 重启
runlevel 查看当前系统级别 N 3 N是当前级别之前的级别为null 3为当前级别
/etc/inittab 可定义系统默认启动级别
logout 退出登入
挂载命令
mount 挂载命令 查看挂载设备
-a 依据配置文件 /etc/fstab 的内容,自动挂载
mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载名
umount [设备文件名 或 挂载点] 卸载设备
挂载光盘
mkdir /mnt/cdrom 建立挂载点
mount -t iso9660 /dev/sr0 /mnt/cdrom 挂载命令
挂载ISO镜像文件
mount -o loop /root/centos5.2_x86_64.iso /mnt/centos_dvd
卸载光盘
umount /mnt/cdrom
挂载U盘
fdisk -l 查看系统中已经存在的硬盘
mount -t vfat /dev/sda1 /mnt/usb/ vaft:fat32系统 sda1:通过fdisk查出来的
ntfs-3g 安装后支持ntfs 只读不可写入数据
系统启动自动挂载
vi /etc/fstab
# Device Mount point filesystem parameters dump fsck
Device 磁盘装置文件名或该装置的Label
Mount point 挂载点 为目录
filesystem 磁盘分区槽的文件系统
parameters 文件系统参数
async/sync 异步/同步
auto/noauto 自动/非自动
rw/ro 可擦写/只读
exec/noexec 可运行/不可运行
user/nouser 允许/不允许使用者挂载
suid/nosuid 具有/不具有 suid 权限
usrquota 启动 filesystem 支持磁盘配额模式
grpquota 启动 filesystem 对群组磁盘配额模式的支持。
defaults 同时具有 rw, suid, dev, exec, auto, nouser, async 等参数。
dump 0代表不做dump备份, 1代表要每天进行dump备份。 2代表其他不定日期的 dump 备份动作。
fsck 是否要以fsck检验该filesystem喔。 0是不检验, 1 表示最早检验, 2也是要检验,
用户登入查看命令
w 查看用户登入信息
USER : 登入的用户名
TTY : 登入终端
FROM : 从哪个IP地址登入
LOGIN@ : 登入时间
IDLE : 用户闲置时间
JCPU : 和该终端连接的所有进程占用的时间,不包括过去后台作业时间,但包括当前正在运行的后台作业所占用时间
PCPU : 当前进程所占用的时间
WHAT : 当前正在运行的命令
who 查看当前登入用户 无法查看系统占用
last 查看当前登入和过去登入的用户信息 (实际是查看 /var/log/wtmp 文件 二进制文件 不可直接操作)
命令输出 用户名,登入终端,登入IP,登入时间,退出时间
lastlo 查看系统所有用户的登入时间 读取/var/log/lastlog 文件
命令输出 用户名,登入终端,登入IP,最后一次登入时间
SHELL 基础
echo $SHELL 打印出来当前使用的shell版本
vi /ect/shells 查看当前系统支持的shell
sh 切换成sh shell,通过exit 退出
执行脚本
bash xxx.sh 未设置权限时候可通过bash命令执行脚本
chmod 755 xxx.sh 设置脚本的权限为可执行
./xxx.sh 或 /xxx/xxx.sh 绝对路径或相对路径来执行脚本
bash基本功能
alias 查看系统中默认已经生效的别名
alias ls=“ls -color=never” 设置命令的别名 临时生效
unalias 删除别名 临时删除
历史命令
history 查看历史命令
history -w 保存历史命令到历史命令保存文件中
history -c 清空历史命令
vi ~/.bash_history 查看历史纪录命令的保存文件 保存有上次正确注销前的历史命令
历史命令默认保存1000条 可在环境变量配置文件/etc/profile中修改
!n 执行第n条历史命令
!! 重复执行上一条命令
!xx 重复执行最后一次以xx开头的命令
输出重定向
> 以覆盖的方法将 正确的数据 输出到指定的文件或装置上
>> 以追加的方法将 正确的数据 输出到指定的文件或装置上
2> 以覆盖的方法将 错误的数据 输出到指定的文件或装置上
2>> 以追加的方法将 错误的数据 输出到指定的文件或装置上
命令 >> 文件 2>&1 正确和错误输出都追加写入到文件中
命令 &>> 文件 正确和错误输出都追加写入到文件中
命令 >> 文件1 2>>文件2 正确命令保存到文件1 错误输出保存到文件2
ls > example.log ls输出的内容写到example文件中
ls >> example.log 2>&1 正确和错误日志都追加写入到文件中
输入重定向
wc 统计输入字符 ctrl+d 结束统计
wc < example.log 统计文件内容
wc << mark 当再次输入mark标记时 统计输入的内容
多命令顺序执行
; 命令1 ; 命令2 多个命令顺序执行
&& 命令1 && 命令2 逻辑与 命令1正确执行 命令2才执行
|| 命令1 || 命令2 逻辑或 命令1正确执行 命令2不执行
命令 && echo yes || echo no 如果命令正确执行 输出yes 否则输出no
管道符
| 命令1 | 命令2 命令1正确执行的结果作为命令2的操作对象
netstat -an | grep ESTABLISHED | wc -l 统计当前链接计算机的用户数
通配符
? 匹配任意一个字符
* 匹配0个或多个字符
[] 匹配中括号内的字符
其他特殊符号
'' 单引号内的的所有特殊符号 如$ `,都没有特殊含义
"" 双引号中特殊符号没有特殊含义,但是 $ ` \ 是例外
$name 调用或得到变量的值
var=`ls` 先执行命令,再把命令结果赋值给变量
var=$(ls) 先执行命令,再把命令结果赋值给变量
# #开头的行代表注释
\ 转义符 让特殊符号失去作用
管线命令(pipe)
cut 将一段信息中每行 切出来符合规则的副本
-d 后面接分隔字符。与 -f 一起使用;
-f 依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
-c 以字符 (characters) 的单位取出固定字符区间;
grep 匹配获取文件或信息中的包含特定字符串的行
grep "display" README.md 搜索README.md中"display”字符串
-a 将 binary 文件以 text 文件的方式搜寻数据
-c 计算找到 '搜寻字符串' 的次数
-i 忽略大小写的不同,所以大小写视为相同
-n 顺便输出行号
-v 反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
-An 后面可加数字,为after的意思,除了列出该行外,后续的 n 行也列出来;
-Bn 后面可加数字,为befer的意思,除了列出该行外,前面的 n 行也列出来;
--color=auto 可以将找到的关键词部分加上颜色的显示喔!
sort 对一段数据进行排序
-f 忽略大小写的差异,例如 A 与 a 视为编码相同;
-b 忽略最前面的空格符部分;
-M 以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n 使用『纯数字』进行排序(默认是以文字型态来排序的);
-r 反向排序;
-u 就是 uniq ,相同的数据中,仅出现一行代表;
-t 分隔符,默认是用 [tab] 键来分隔;
-k 以那个区间 (field) 来进行排序的意思
uniq 将重复的数据去重
-i 忽略大小写字符的不同;
-c 进行计数
wc 统计数据中的行数和字符数
-l 仅列出行;
-w 仅列出多少字(英文单字);
-m 多少字符;
tee 把数据同时输出的标准输出和文件
tr 删除或替换一段信息当中的文字
-d 删除信息当中的 SET1 这个字符串;
-s 取代掉重复的字符!
col 可将tab转换为空格键
-x 将 tab 键转换成对等的空格键
-b 在文字内有反斜杠 (/) 时,仅保留反斜杠最后接的那个字符
join 将两个文件当中,有"相同数据"的那一行加在一起
paste 将两行贴在一起,且中间以tab键隔开
expand 将tab转换为空格键
-t 一个 tab 按键可以用多少个空格替代。默认为8
split 切割文件 将一个大文件切割为多个小文件
-b 后面可接欲分割成的文件大小,可加单位,例如 b, k, m 等;
-l 以行数来进行分割。
xargs 处理参数
sed 可分析standard input! 还可以将数据进行取代、删除、新增、撷取特定行等等的功能呢
-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 后面通常不接任何咚咚;
i 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p 列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s 取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配
正规表示法!例如 1,20s/old/new/g 就是啦!
正则表达式
特殊符号(可避免编码对匹配的影响)
[:alnum:] 代表英文大小写字节及数字,亦即 0-9, A-Z, a-z
[:alpha:] 代表任何英文大小写字节,亦即 A-Z, a-z
[:blank:] 代表空白键与 [Tab] 按键两者
[:cntrl:] 代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等
[:digit:] 代表数字而已,亦即 0-9
[:graph:] 除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键
[:lower:] 代表小写字节,亦即 a-z
[:print:] 代表任何可以被列印出来的字节
[:punct:] 代表标点符号 (punctuation symbol),亦即:" ' ? ! ; : # $...
[:upper:] 代表大写字节,亦即 A-Z
[:space:] 任何会产生空白的字节,包括空白键, [Tab], CR 等等
[:xdigit:] 代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字节
变量
a=123 echo $a 输出一个变量的值
a=$(ls) 先执行ls命令,再把命令结果赋值给变量
var="$LANG" echo $var 得到 en_US 双引号内的保留原有特性
var='$LANG' echo $var 得到 $LANG 单引号内的特殊字符则仅为一般字符
\ 将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;
export PATH 若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量:
unset myname 取消 myname 的配置:
var[index]=content 定义数组
${var#pattern} 删除var变量左边开始匹配pattern最短的字符
${var##pattern} 删除var变量左边开始匹配pattern最长的字符
${var%pattern} 删除var变量后面开始匹配pattern最短的字符
${var%%pattern} 删除var变量后面开始匹配pattern最长的字符
${var/oldStr/newStr} 替换变量内第一个oldStr为newStr
${var//oldStr/newStr} 替换变量内所有的oldStr为newStr
var=${oldVar-content} 当oldVar不存在时 var为content的值
var=${oldVar:-content} 当oldVar不存在或oldVar=""时 var为content的值
环境变量
env 列出目前的 shell 环境下的所有环境变量与其内容。
HOME 代表用户的家目录。
SHELL 目前这个环境使用的 SHELL,默认使用 /bin/bash
HISTSIZE 历史记录的数量
MAIL 当我们使用 mail 这个命令在收信时,系统会去读取的邮件信箱文件 (mailbox)。
PATH 就是运行文件搜寻的路径啦~目录与目录中间以冒号(:)分隔。
LANG 语系数据 通常为 zh_CN.UTF-8 或 en_GB.UTF-8
RANDOM 随机数 介于 0~32767 之间
set 配置配置整个命令输出/输入的环境
-u 默认不激活。若激活后,当使用未配置变量时,会显示错误信息;
-v 默认不激活。若激活后,在信息被输出前,会先显示信息的原始内容;
-x 默认不激活。若激活后,在命令被运行前,会显示命令内容(前面有 ++ 符号)
-h 默认激活。与历史命令有关;
-H 默认激活。与历史命令有关;
-m 默认激活。与工作管理有关;
-B 默认激活。与刮号 [] 的作用有关;
-C 默认不激活。若使用 > 等,则若文件存在时,该文件不会被覆盖。
set 显示所有变量 (含环境变量与自定义变量)
PS1 提示字符的配置
$ 本 shell 的 PID echo $$
? 上个运行命令的返回值 成功运行命令为返回0 错误返回错误代码
HOSTNAME 记录了主机名
HOSTTYPE 记录系统的硬件架构
MACHTYPE 也是记录系统的硬件架构
OSTYPE 记录的是操作系统的类型
echo $- 所有的 set 配置值 $- 变量内容就是 set 的所有配置! bash 默认 himBH
locale 获取语言环境信息
LANG=en_US 主语言的环境
LC_CTYPE="en_US" 字符(文字)辨识的编码
LC_NUMERIC="en_US" 数字系统的显示信息
LC_TIME="en_US" 时间系统的显示数据
LC_COLLATE="en_US" 字符串的比较与排序等
LC_MONETARY="en_US" 币值格式的显示等
LC_MESSAGES="en_US" 信息显示的内容,如菜单、错误信息等
LC_ALL= 整体语系的环境
locale -a 列出支持的语言环境
read 获取键盘输入的值 赋值给变量
-p 后面可以接提示字符
-t 后面可以接等待的秒数
declare 定义变量类型
typeset 定义变量类型
-a 将后面名为 variable 的变量定义成为数组 (array) 类型
-i 将后面名为 variable 的变量定义成为整数数字 (integer) 类型
-x 用法与 export 一样,就是将后面的 variable 变成环境变量;
-r 将变量配置成为 readonly 类型,该变量不可被更改内容,也不能 unset
ulimit 与文件系统及程序的限制关系
-H hard limit ,严格的配置,必定不能超过这个配置的数值;
-S soft limit ,警告的配置,可以超过这个配置值,但是若超过则有警告信息。
在配置上,通常 soft 会比 hard 小,举例来说,soft 可配置为 80 而 hard
配置为 100,那么你可以使用到 90 (因为没有超过 100),但介于 80~100 之间时,
系统会有警告信息通知你!
-a 后面不接任何选项与参数,可列出所有的限制额度;
-c 当某些程序发生错误时,系统可能会将该程序在内存中的信息写成文件(除错用),
这种文件就被称为核心文件(core file)。此为限制每个核心文件的最大容量。
-f 此 shell 可以创建的最大文件容量(一般可能配置为 2GB)单位为 Kbytes
-d 程序可使用的最大断裂内存(segment)容量;
-l 可用于锁定 (lock) 的内存量
-t 可使用的最大 CPU 时间 (单位为秒)
-u 单一用户可以使用的最大程序(process)数量。
ulimit -a 列出你目前身份(假设为root)的所有限制数据数值
ulimit -f 10240 限制用户仅能创建 10MBytes 以下的容量的文件
bash 配置文件
source ~/.bashrc 调用文件内容 不须重启使起生效
. ~/.bashrc 调用文件内容 不须重启使起生效
/etc/issue 登入时显示的信息(无论登录成功与否都会显示)
\d 本地端时间的日期;
\l 显示第几个终端机接口;
\m 显示硬件的等级 (i386/i486/i586/i686...);
\n 显示主机的网络名称;
\o 显示 domain name;
\r 操作系统的版本 (相当于 uname -r)
\t 显示本地端时间的时间;
\s 操作系统的名称;
\v 操作系统的版本。
/etc/motd 登入时显示的信息(只有登录成功了才能显示)
/etc/profile 整体环境配备文件(login shell)读取,一般会设置如下变量:
PATH 会依据 UID 决定 PATH 变量要不要含有 sbin 的系统命令目录
MAIL 依据账号配置好使用者的 mailbox 到 /var/spool/mail/账号名
USER 根据用户的账号配置此一变量内容
HOSTNAME 依据主机的 hostname 命令决定此一变量内容
HISTSIZE 历史命令记录笔数。CentOS 5.x 配置为 1000;
此文件中一般会呼叫如下配置文件
/etc/sysconfig/i18n 这个文件用来设置终端的语言信息
/etc/inputrc 这个文件主要设置终端的输入方式,比如Ctrl+C之类的情况
/etc/profile.d/ 全局的bash环境p配置文件目录,包括颜色、语系、别名等。
~/.bash_profile 个人配置文件(login shell) 按照顺序第一个读取
~/.bash_login 个人配置文件(login shell) 如果.bash_profile不存在读取此文件
~/.profile 个人配置文件(login shell) 如果.bash_login不存在读取此文件
可针对用户配置环境变量 export PATH=$PATH:/root/bin
~/.bashrc (non-login shell) 配置用户的命令别名
/etc/bashrc(CentOS独有)
依据不同的 UID 规范出 umask 的值;
依据不同的 UID 规范出提示字符 (就是 PS1 变量);
呼叫 /etc/profile.d/*.sh 的配置
/etc/manpath.config (CentOS) 使用man命令时,帮助文档的路径
/etc/man.config (Debian) 使用man命令时,帮助文档的路径
~/.bash_history 命令的历史纪录 数量取决于HISTFILESIZE变量
~/.bash_logout 配置系统关机前执行的动作
stty (setting tty 终端机的意思)
-a 列出当前系统中所有按键列表
eof End of file 的意思,代表『结束输入』。
erase 向后删除字符,
intr 送出一个 interrupt (中断) 的讯号给目前正在 run 的程序;
kill 删除在目前命令列上的所有文字;
quit 送出一个 quit 的讯号给目前正在 run 的程序;
start 在某个程序停止后,重新启动他的 output
stop 停止目前屏幕的输出;
susp 送出一个 terminal stop 的讯号给正在 run 的程序。
stty erase ^h 设置[ctrl]+h 来进行字符的删除
shell script
注意事项
1,命令的运行是从上而下、从左而右的分析与运行;
2,命令、选项与参数间的多个空白都会被忽略掉;
3,空白行也将被忽略掉,并且 [tab] 按键所推开的空白同样视为空白键;
4,如果读取到一个 Enter 符号 (CR) ,就尝试开始运行该行 (或该串) 命令;
5,至於如果一行的内容太多,则可以使用『 \[Enter] 』来延伸至下一行;
6,『 # 』可做为注解!任何加在 # 后面的数据将全部被视为注解文字而被忽略!
运行脚本方式
直接命令下达: shell.sh 文件必须要具备可读与可运行 (rx) 的权限,然后:
绝对路径:使用 /home/dmtsai/shell.sh 来下达命令;
相对路径:假设工作目录在 /home/dmtsai/ ,则使用 ./shell.sh 来运行
变量『PATH』功能:将 shell.sh 放在 PATH 指定的目录内,例如: ~/bin/
以 bash 程序来运行:透过『 bash shell.sh 』或『 sh shell.sh 』来运行
基本语法
第一行 #!/bin/bash 在宣告这个 script 使用的 shell 名称
exit 0 这代表离开 script 并且回传一个 0 给系统
判断
test 可检测文件和相关属性
例: test -e /etc && echo "exist" || echo "Not exist" 检测/etc是否存在
1. 关於某个档名的"文件类型"判断,如 test -e filename 表示存在否
-e 该"档名"是否存在?(常用)
-f 该"档名"是否存在且为文件(file)?(常用)
-d 该"档名"是否存在且为目录(directory)?(常用)
-b 该"档名"是否存在且为一个 block device 装置?
-c 该"档名"是否存在且为一个 character device 装置?
-S 该"档名"是否存在且为一个 Socket 文件?
-p 该"档名"是否存在且为一个 FIFO (pipe) 文件?
-L 该"档名"是否存在且为一个连结档?
2. 关於文件的权限侦测,如 test -r filename 表示可读否 (但 root 权限常有例外)
-r 侦测该档名是否存在且具有"可读"的权限?
-w 侦测该档名是否存在且具有"可写"的权限?
-x 侦测该档名是否存在且具有"可运行"的权限?
-u 侦测该档名是否存在且具有"SUID"的属性?
-g 侦测该档名是否存在且具有"SGID"的属性?
-k 侦测该档名是否存在且具有"Sticky bit"的属性?
-s 侦测该档名是否存在且为"非空白文件"?
3. 两个文件之间的比较,如: test file1 -nt file2
-nt (newer than)判断 file1 是否比 file2 新
-ot (older than)判断 file1 是否比 file2 旧
-ef 判断 file1 与 file2 是否为同一文件,可用在判断 hard link 的判定上。 主要意义在判定,两个文件是否均指向同一个 inode 哩!
4. 关於两个整数之间的判定,例如 test n1 -eq n2
-eq 两数值相等 (equal)
-ne 两数值不等 (not equal)
-gt n1 大於 n2 (greater than)
-lt n1 小於 n2 (less than)
-ge n1 大於等於 n2 (greater than or equal)
-le n1 小於等於 n2 (less than or equal)
5. 判定字串的数据
test -z string 判定字串是否为 0 ?若 string 为空字串,则为 true
test -n string 判定字串是否非为 0 ?若 string 为空字串,则为 false。
注: -n 亦可省略
test str1 = str2 判定 str1 是否等於 str2 ,若相等,则回传 true
test str1 != str2 判定 str1 是否不等於 str2 ,若相等,则回传 false
6. 多重条件判定,例如: test -r filename -a -x filename
-a (and)两状况同时成立!例如 test -r file -a -x file,则 file 同时具有 r 与 x 权限时,才回传 true。
-o (or)两状况任何一个成立!例如 test -r file -o -x file,则 file 具有 r 或 x 权限时,就可回传 true。
! 反相状态,如 test ! -x file ,当 file 不具有 x 时,回传 true
[ == ] 判断符号
例: [ "$HOME" == "$MAIL" ] 是test $HOME = $MAIL的意思 注意[]里面需要有空格
命令行参数
$0 : 代表当前执行脚本的文件名
$1 : 第一个命令行参数 $2为第二个 等
$# : 代表命令后接的参数的个数;
$@ :代表『 "$1" "$2" "$3" "$4" 』之意,每个变量是独立的(用双引号括起来);
$* :代表『 "$1c$2c$3c$4" 』,其中 c 为分隔字节,默认为空白键, 所以本例中代表『 "$1 $2 $3 $4" 』之意。
shift 从前面开始删除参数
条件判断语句
单个条件判断式
if [ 条件判断式 ]; then
当条件判断式成立时,可以进行的命令工作内容;
fi <==将 if 反过来写,就成为 fi 啦!结束 if 之意!
多个条件判断 (if ... elif ... elif ... else) 分多种不同情况运行
if [ 条件判断式一 ]; then
当条件判断式一成立时,可以进行的命令工作内容;
elif [ 条件判断式二 ]; then
当条件判断式二成立时,可以进行的命令工作内容;
else
当条件判断式一与二均不成立时,可以进行的命令工作内容;
fi
&& 代表 AND ;
|| 代表 or ;
[ "$yn" == "Y" ] || [ "$yn" == "y" ] 代表$yn为Y或y
case ..... esac 判断
case $var in
"value1")
progrom1
;;
"value2")
progrom2
;;
*)
default progrom
exit 1
;;
esac
function 函数功能
定义函数
function fname() {
program...
}
执行函数
fname pram1 pram2 ...
参数
函数名称代表示 $0 ,而后续接的变量也是以 $1, $2...
循环 loop
当 condition 成立时,就进行循环
while [ condition ]
do
program...
done
当 condition 成立时,终止循环
until [ condition ]
do
program...
done
for...in...do...done 遍历循环 每次循环var的值分别为con1,con2,con3...
for var in con1 con2 con3 ...
do
program...
done
for...do...done 按次数循环
for (( i=0; i<$num; i=i+1 ))
do
program...
done
debug 调试
sh [-nvx] scripts.sh
-n 不要运行 script,仅查询语法的问题;
-v 再运行 sccript 前,先将 scripts 的内容输出到萤幕上;
-x 将使用到的 script 内容显示到萤幕上,这是很有用的参数!
Linux 的账号与群组
/etc/passwd 文件结构
账号名称:如root
密码:早期 Unix 系统的密码!现将密码数据改放到/etc/shadow,用x占位。
UID:用户的User ID,通常 Linux 对于 UID 的几个限制:
0 系统管理员,需其他的账号有 root 的权限,可将该账号的 UID 改为 0,不建这样做。
1~499 系统账号,保留给系统使用的 ID,除了 0 之外,其他的 UID 权限与特性并没有不一样。
由于系统上面启动的服务希望使用较小的权限去运行,因此不希望使用 root 的身份去运行这些服务,
所以我们就得要提供这些运行中程序的拥有者账号才行。这些系统账号通常是不可登陆的,
所以才会有我们在第十一章提到的 /sbin/nologin 这个特殊的 shell 存在。
1~99 由 distributions 自行创建的系统账号;
100~499 若用户有系统账号需求时,可以使用的账号 UID。
500~65535 可登陆账号,给一般使用者用的。linux核心2.6.x以上已可以支持到 4294967295 (2^32-1)。
GID: 用户组ID,与 /etc/group 有关
用户信息说明栏:用来解释这个账号的意义!提供使用 finger 的功能时,可以提供很多的信息呢!
家目录:这是用户的家目录,移动用户家目录可修改此字段,默认/home/yourIDname
Shell:用户默认shell,/sbin/nologin 可让用户无法用shell 环境的登陆
/etc/shadow 文件结构
账号名称:如root
密码:经过加密后的密码,避免密码被泄露破解,勿修改此文件权限!
因编码方式不同,这个字段的长度不相同。
最近修改密码的日期:修改密码的日期。1970年1月1日作为1
密码不可被修改的天数:密码在最近一次修改后需要经过几天才可以再被修改!0表示随时可以更动的意思。
密码需要重新变更的天数:99999表示无需变动密码。
密码需要变更期限前的警告天数:7表示密码到期7天内系统会警告该用户修改密码。
密码过期后的账号宽限时间:是在口令过期几天后,可用旧密码登入,系统会强制修改密码。
账号失效日期:账号在此字段规定的日期之后,将无法再使用。
保留:最后一个字段是保留的,看以后有没有新功能加入。
/etc/group 文件结构
组名:
群组密码:通常不需要配置,是给『群组管理员』使用的,很少用到!密码已经移动到/etc/gshadow,x占位;
GID:群组的ID。我们 /etc/passwd 第四个字段使用的 GID 对应的群组名,就是由这里对应出来的!
此群组支持的账号名称:那某个账号想要加入此群组时,将该账号加入这个字段。如root:x:0:root,caozheng
/etc/gshadow 文件结构
组名
密码:同样的,开头为 ! 表示无合法密码,所以无群组管理员
群组管理员的账号 (相关信息在 gpasswd 中介绍)
该群组的所属账号 (与 /etc/group 内容相同!)
有效群组(effective group)与初始群组(initial group)
初始群组:当用户一登陆系统,立刻就拥有这个群组的相关权限的意思
有效群组:创建新文件时的群组
groups 查看支持的群组
groups user 查看其它用户支持的群组 其中第一个为有效群组
newgrp 切换有效群组
newgrp groupname 切换当前用户的有效群组,群组必须是该用户支持的
/etc/default/useradd 文件结构
GROUP=100 新建账号的GID为100,RHEL,Fedora,CentOS等为私有群组机制,默认创建同名群组,不参考此值。
HOME=/home 用户家目录的基准目录(basedir)
INACTIVE=-1 密码过期后是否会失效,0立刻失效,-1永不失效,如果是数字,30 天后才失效。
EXPIRE= 账号失效的日期
SHELL=/bin/bash 默认使用的 shell 程序文件名
SKEL=/etc/skel 用户家目录参考基准目录,新创见用户的家目录会复制此目录
CREATE_MAIL_SPOOL=yes 创建使用者的 mailbox
/etc/login.defs 文件结构 用来配置创建用户时的UID/GID 还有口令参数等
MAIL_DIR /var/spool/mail 用户默认邮件信箱放置目录
PASS_MAX_DAYS 99999 /etc/shadow 内的第 5 栏,多久需变更口令日数
PASS_MIN_DAYS 0 /etc/shadow 内的第 4 栏,多久不可重新配置口令日数
PASS_MIN_LEN 5 口令最短的字符长度,已被 pam 模块取代,失去效用!
PASS_WARN_AGE 7 /etc/shadow 内的第 6 栏,过期前会警告的日数
UID_MIN 500 使用者最小的 UID,意即小于 500 的 UID 为系统保留
UID_MAX 60000 使用者能够用的最大 UID
GID_MIN 500 使用者自定义组的最小 GID,小于 500 为系统保留
GID_MAX 60000 使用者自定义组的最大 GID
CREATE_HOME yes 在不加 -M 及 -m 时,是否主动创建用户家目录?
UMASK 077 用户家目录创建的 umask ,因此权限会是 700
USERGROUPS_ENAB yes 使用 userdel 删除时,是否会删除初始群组
MD5_CRYPT_ENAB yes 口令是否经过 MD5 的加密机制处理
/etc/sudoers 与 visudo 配置哪些用户可以使用sudo和权限
root ALL=(ALL) ALL
1,系统的哪个账号可以使用 sudo 这个命令的意思,默认为 root 这个账号;
2,当这个账号由哪部主机联机到本,可以指定客户端计算机。默认值 root 可来自任何一部网络主机
3,这个账号可以切换成什么身份来下达后续的命令,默认 root 可以切换成任何人;
4,可用该身份下达什么命令?这个命令请务必使用绝对路径撰写。
%admin ALL=(ALL) ALL
%groupname 为群组的意思
%admin ALL=(ALL) NOPASSWD: ALL
NOPASSWD 表示免除口令输入的意思喔!
user ALL=(root) /usr/bin/passwd
user用户仅能以root身份运行passwd命令
user ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
限制user用户不能使用passwd密令修改root用户的密码
user ALL=(root) /bin/su -
只执行一次sudo 后面皆可通过root身份执行命令
User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2
Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*
ADMPW ALL=(root) ADMPWCOM
通过用户别名和命令别名来配置
ACL Access Control List 的缩写,针对特定用户特定群组来配置权限
查看是否启动ACL
dumpe2fs -h /dev/sda2 中的 Default mount options 字段是否包含acl
启动ACL
vi /etc/fstab
LABEL=/1 / ext3 defaults,acl 1 1
setfacl 配置某个目录/文件的 ACL 规范
-m 配置后续的 acl 参数给文件使用,不可与 -x 合用;
-x 删除后续的 acl 参数,不可与 -m 合用;
-b 移除所有的 ACL 配置参数;
-k 移除默认的 ACL 参数,关于所谓的『默认』参数于后续范例中介绍;
-R 递归配置 acl ,亦即包括次目录都会被配置起来;
-d 配置『默认 acl 参数』的意思!只对目录有效,在该目录新建的数据会引用此默认值
setfacl -m u:user:rx file 对file文件user用户设置acl属性
setfacl -m g:groupname:rx file 对file文件groupname用户组设置acl属性
setfacl -m m:r file 设置mask(最大允许的权限)的acl属性
getfacl 取得某个文件/目录的 ACL 配置项目
用户管理
配置文件
/etc/group 存储当前系统中所有用户组信息
Group: x:0:user1,user2,user3 分别为 组名:组密码占位符:组编号:组中用户名列表
组编号: 0固定为root 1~499为系统预留 500开始为用户手动创建的用户组
/etc/gshadow 存储当前系统中用户组密码的信息
Group: *::user1,user2,user3 分别代表 组名:组密码:组管理者:组中用户名列表
组密码: * ! 或者 空 为没有密码
组管理者:一般情况下为空 表示组内所有用户都可以管理用户组
/etc/passwd 存储当前系统中用户的信息
root:x:0:0:xxx:/root:/bin/bash
用户名:密码占位符:用户编号:用户组编号:用户注释信息:用户目录:shell类型
用户注释信息:添加用户信息时 可添加用户备注信息
/etc/shadow 存储用户密码的配置文件
用户组管理
groupadd groupname 创建用户组
-g 后面接某个特定的 GID ,用来直接给予某个 GID
-r 创建系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。
groupmod -n oldname modifyname 修改用户组名为modifyname
groupmod -g 888 groupname 修改name用户组的编号为666
groupdel groupname 删除名字为name的用户组(必须先删除组内用户)
gpasswd 群组管理员功能 可以管理哪些账号可以加入/移出该群组
-A (root)将 groupname 的主控权交由后面的使用者管理(该群组的管理员)
-M (root)将某些账号加入这个群组当中!
-r (root)将 groupname 的口令移除
-R (root)让 groupname 的口令栏失效
-a 将某位使用者加入到 groupname 这个群组当中!
-d 将某位使用者移除出 groupname 这个群组当中。
用户管理
useradd 创建新的用户
-u 后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个账号;
-g 后面接groupname,该群组的GID会被放置到 /etc/passwd 的第四个字段内。
-G 后面接的组名则是这个账号还可以加入的群组。此参数会修改 /etc/group 内的相关数据!
-M 强制!不要创建用户家目录!(系统账号默认值)
-m 强制!要创建用户家目录!(一般账号默认值)
-c 账户说明信息,/etc/passwd 的第五字段
-d 指定某个目录成为家目录,而不要使用默认值。务必使用绝对路径!
-r 创建一个系统的账号,这个账号的 UID 会有限制 (参考 /etc/login.defs)
-s 后面接一个 shell ,若没有指定则默认是 /bin/bash
-e 账号失效日期,格式YYYY-MM-DD,此项目可写入 shadow 第八字段,
-f 后面接 shadow 的第七字段,指定口令是否会失效。0为立刻失效,-1 为永远不失效
-D 查看useradd的参数默认值,读取自/etc/default/useradd
passwd 修改用户密码
--stdin 可以透过来自前一个管线的数据,作为口令输入,对 shell script 有帮助!
-l 是 Lock 的意思,会将 /etc/shadow 第二栏最前面加上 ! 使口令失效;
-u 与 -l 相对,是 Unlock 的意思!
-S 列出口令相关参数,亦即 shadow 文件内的大部分信息。
-n 后面接天数,shadow 的第 4 字段,多久不可修改口令天数
-x 后面接天数,shadow 的第 5 字段,多久内必须要更动口令
-w 后面接天数,shadow 的第 6 字段,口令过期前的警告天数
-i 后面接『日期』,shadow 的第 7 字段,口令失效日期
chage [-ldEImMW] username 更详细的口令参数显示功能
-l 列出该账号的详细口令参数;
-d 后面接日期,修改 shadow 第三字段(最近一次更改口令的日期),格式 YYYY-MM-DD
-E 后面接日期,修改 shadow 第八字段(账号失效日),格式 YYYY-MM-DD
-I 后面接天数,修改 shadow 第七字段(口令失效日期)
-m 后面接天数,修改 shadow 第四字段(口令最短保留天数)
-M 后面接天数,修改 shadow 第五字段(口令多久需要进行变更)
-W 后面接天数,修改 shadow 第六字段(口令过期前警告日期)
usermod 修改用户信息
-c 后面接账号的说明,即 /etc/passwd 第五栏的说明栏,可以加入一些账号的说明。
-d 后面接账号的家目录,即修改 /etc/passwd 的第六栏;
-e 后面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 内的第八个字段数据啦!
-f 后面接天数,为 shadow 的第七字段。
-g 后面接初始群组,修改 /etc/passwd 的第四个字段,亦即是 GID 的字段!
-G 后面接次要群组,修改这个使用者能够支持的群组,修改的是 /etc/group 啰~
-a 与 -G 合用,可『添加次要群组的支持』而非『配置』喔!
-l 后面接账号名称。亦即是修改账号名称, /etc/passwd 的第一栏!
-s 后面接 Shell 的实际文件,例如 /bin/bash 或 /bin/csh 等等。
-u 后面接 UID 数字啦!即 /etc/passwd 第三栏的数据;
-L 暂时将用户的口令冻结,让他无法登陆。其实仅改 /etc/shadow 的口令栏。
-U 将 /etc/shadow 口令栏的 ! 拿掉,解冻啦!
userdel username 删除用户
-r 删除用户的同时删除用户文件
touch /etc/nologin 禁止除了root之外的用户登入服务器
用户相关其他命令
passwd -l username 锁定用户 禁止用户使用
passwd -u username 解锁用户
passwd -d username 取消用户密码
gpasswd -a username groupname 修改用户的附属用户组 可用,链接多个附属组
gpasswd -d username groupname 移除用户附属组
newgrp groupname 临时切换用户组为groupname
其他用户命令
su 切换到root用户
- 使用 su - 代表login-shell的变量文件读取方式登陆系统;否则为non-login shell。
-l 与 - 类似,但后面需要加欲切换的使用者账号!也是 login-shell 的方式。
-m -m 与 -p 是一样的,表示『使用目前的环境配置,而不读取新使用者的配置文件』
-c 仅进行一次命令,所以 -c 后面可以加上命令喔!
whoami 显示当前登入的用户名
id username 显示指定用户信息 包括用户编号主要组编号附属组列表
groups username 显示用户所在的组 包括附属组
chfn username 设置用户详细资料 包括性别生日等 实际为修改etc/passwd第5字段
-f 后面接完整的大名;
-o 您办公室的房间号码;
-p 办公室的电话号码;
-h 家里的电话号码!
chsh 修改用户的shell
-l 列出目前系统上面可用的 shell ,其实就是 /etc/shells 的内容!
-s 配置修改自己的 Shell
finger username 显示用户的详细资料
-s 仅列出用户的账号、全名、终端机代号与登陆时间等等;
-m 列出与后面接的账号相同者,而不是利用部分比对 (包括全名部分)
Login:为使用者账号,亦即 /etc/passwd 内的第一字段;
Name:为全名,亦即 /etc/passwd 内的第五字段(或称为批注);
Directory:就是家目录了;
Shell:就是使用的 Shell 文件所在;
Never logged in.:figner 还会调查用户登陆主机的情况喔!
No mail.:调查 /var/spool/mail 当中的信箱数据;
No Plan.:调查 ~vbird1/.plan 文件,并将该文件取出来说明!
w 或 who 查看目前已登陆在系统上面的用户呢
lastlog 读取 /var/log/lastlog 查看每个账户最后登入时间
write 给其他用户发送信息
write username port port可用who命令查看
mesg [y|n] 是否接受其他人发送的信息
wall 对系统中所有用户发送信息
wall "message"
pwck 检查 /etc/passwd,与对应的家目录是否存在,/etc/passwd /etc/shadow 的信息是否一致等。
pwconv 将 /etc/passwd 内的账号与口令,移动到 /etc/shadow 当中
pwunconv 将 /etc/shadow 内的口令栏数据写回 /etc/passwd 当中, 并且删除 /etc/shadow 文件
chpasswd 读入未加密前的口令,并且经过加密后, 将加密后的口令写入 /etc/shadow 中
文件系统管理
df 查看磁盘分区的使用情况
-l 仅显示本地磁盘(默认)
-a 显示所有文件系统的磁盘使用情况,包含/proc/
-h 以1024进制用最合适的单位显示磁盘容量
-H 以1000进制用最合适的单位显示磁盘容量
-T 显示磁盘分区类型
-t 显示指定类型文件系统的磁盘分区
-x 不显示指定类型文件系统的磁盘分区
du 统计磁盘上的文件大小
-b 以byte为单位统计文件
-k 以KB为单位统计文件
-m 以MB为单位统计文件
-h 以1024进制用最合适的单位统计文件
-H 以1000进制用最合适的单位统计文件
-s 指定统计目标(可以指定统计某个文件夹的大小)
fdisk 磁盘分区工具 分区最大容量2TB
-l 列出所有磁盘分区表
fdisk /dev/sda 进入sda硬盘的分区模式(只能MBR分区)
设置扇区大小时,可输入 +2000M 来设置分区大小
parted MBR和GPT分区工具
注:Using /dev/sda 默认分区磁盘为系统第一块硬盘
select /dev/sdb 切换目标磁盘为sdb
mklabel msdos 指定分区表类型为MBR
mklabel gpt 指定分区表类型为gpt
print 查看当前硬盘分区详情
print all 查看所有硬盘分区详情
mkpart 创建分区
start 从第几MB开始分区,可输入1,如输入0会有分区对齐的警告,对磁盘性能有影响
end 可输入2000MB
mkpart NAME 20 30 命令模式创建分区
rm NUMBER 删除分区
unit 修改分区单位
quit 退出分区工具
分区模式区别
MBR
主分区数量最大4个
单个分区容量最大2TB
GPT
主分区数量最大128个
单个分区容量最大18EB 1EP=1024PB=1024TB=1024GB
不适合安装X86架构 32位操作系统
硬盘格式化工具
mkfs 格式化分区
mkfs.ext3 /dev/sda1 格式化sda1分区
mkfs -t ext4 /dev/sda1 格式化sda1分区
添加SWAP交换分区
建立一个普通的linux分区 修改分区类型的16位编码
fdisk /dev/sda 进入fdisk工具
t 修改编码 Hex Code 为82 L可查看编码列表
mkswap /dev/sda1 格式化sda1为交换分区
swapon /dev/sda1 启用sda1为交换分区
swapoff /dev/sda1 关闭sda1交换分区
free可查看swap分区
文件系统备份 dump [-Suvj] [-level] [-f 备份档] 待备份数据
-S 仅列出后面的待备份数据需要多少磁碟空间才能够备份完毕;
-u 将这次 dump 的时间记录到 /etc/dumpdates 文件中;
-v 将 dump 的文件过程显示出来;
-j 加入 bzip2 的支持!将数据进行压缩,默认 bzip2 压缩等级为 2
-level 就是我们谈到的等级,从 -0 ~ -9 共十个等级;
-f 有点类似 tar 啦!后面接产生的文件,亦可接例如 /dev/st0 装置档名等
-W 列出在 /etc/fstab 里面的具有 dump 配置的 partition 是否有备份过?
文件系统还原 restore
restore -t [-f dumpfile] [-h] 用来察看 dump 档
restore -C [-f dumpfile] [-D 挂载点] 比较dump与实际文件
restore -i [-f dumpfile] 进入互动模式
restore -r [-f dumpfile] 还原整个文件系统
-t :此模式用在察看 dump 起来的备份档中含有什么重要数据!类似 tar -t 功能;
-C :此模式可以将 dump 内的数据拿出来跟实际的文件系统做比较,
最终会列出『在 dump 文件内有记录的,且目前文件系统不一样』的文件;
-i :进入互动模式,可以仅还原部分文件,用在 dump 目录时的还原!
-r :将整个 filesystem 还原的一种模式,用在还原针对文件系统的 dump 备份;
其他较常用到的选项功能:
-h :察看完整备份数据中的 inode 与文件系统 label 等资讯
-f :后面就接你要处理的那个 dump 文件罗!
-D :与 -C 进行搭配,可以查出后面接的挂载点与 dump 内有不同的文件!
##进程管理
任务管理
ctrl + z 将一个正在前台执行的命令放到后台,并且暂停
jobs 查看后台任务状态
-l 除了列出 job number 与命令串之外,同时列出 PID 的号码;
-r 仅列出正在背景 run 的工作;
-s 仅列出正在背景当中暂停 (stop) 的工作
fg 将放置到后台的任务拿到前台处理
%number :number 为后台任务数字。% 是选!默认打开油 + 的任务
bg 让后台暂停的任务在后台运行
nohup 让命令在终端离线后不会中断,继续运行。
ps 查看当前时间进程快照
-A 所有的 process 均显示出来,与 -e 具有同样的效用;
-a 不与 terminal 有关的所有 process ;
-u 有效使用者 (effective user) 相关的 process ;
x 通常与 a 这个参数一起使用,可列出较完整资讯。
l 较长、较详细的将该 PID 的的资讯列出;
j 工作的格式 (jobs format)
-f 做一个更为完整的输出。
-l 仅观察自己的 bash 相关程序
F 代表这个程序旗标 (process flags),说明这个程序的总结权限,常见号码有:
若为 4 表示此程序的权限为 root ;
若为 1 则表示此子程序仅进行复制(fork)而没有实际运行(exec)。
S 代表这个程序的状态 (STAT),主要的状态有:
R (Running)该程序正在运行中;
S (Sleep)该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。
D 不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>列印)
T 停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态;
Z (Zombie)僵尸状态,程序已经终止但却无法被移除至内存外。
UID 此程序被该 UID 所拥有
PID 程序的 PID 号码
PPID 程序的父程序 PID 号码
C 代表 CPU 使用率,单位为百分比;
PRI/NI Priority/Nice 的缩写,代表此程序被 CPU 所运行的优先顺序,数值越小该程序越快被 CPU 运行。
ADDR 是 kernel function,指出该程序在内存的哪个部分,如果是个 running 的程序,一般就会显示 -
SZ 代表此程序用掉多少内存
WCHAN 表示目前程序是否运行中,同样的, 若为 - 表示正在运行中。
TTY 登陆者的终端机位置,若为远程登陆则使用动态终端介面 (pts/n);
TIME 使用掉的 CPU 时间,注意,是此程序实际花费 CPU 运行的时间,而不是系统时间;
CMD 就是 command 的缩写,造成此程序的触发程序之命令为何。
aux 观察系统所有程序
USER 属於哪个使用者帐号的
PID 的程序识别码
%CPU 使用掉的 CPU 资源百分比
%MEM 所占用的实体内存百分比
VSZ 使用掉的虚拟内存量 (Kbytes)
RSS 占用的固定的内存量 (Kbytes)
TTY 是在那个终端机上面运行,若与终端机无关则显示 ?
tty1-tty6 是本机上面的登陆者程序,pts/0 等则表示为由网络连接进主机的程序。
STAT 该程序目前的状态,状态显示与 ps -l 的 S 旗标相同 (R/S/T/Z)
START 被触发启动的时间;
TIME 实际使用 CPU 运行的时间。
COMMAND 该程序的实际命令
prtree 显示进程树
-p 并同时列出每个 process 的 PID;
-u 并同时列出每个 process 的所属帐号名称。
-A 各程序树之间的连接以 ASCII 字节来连接;
-U 各程序树之间的连接以万国码的字节来连接。在某些终端介面下可能会有错误;
top 动态观察进程的变化
-d 后面可以接秒数,就是整个程序画面升级的秒数。默认是 5 秒;
-b 以批量的方式运行 top ,还有更多的参数可以使用喔!
通常会搭配数据流重导向来将批量的结果输出成为文件。
-n 与 -b 搭配,意义是,需要进行几次 top 的输出结果。
-p 指定某些个 PID 来进行观察监测而已。
在 top 运行过程当中可以使用的按键命令
? 显示在 top 当中可以输入的按键命令;
P 以 CPU 的使用资源排序显示;
M 以 Memory 的使用资源排序显示;
N 以 PID 来排序喔!
T 由该 Process 使用的 CPU 时间累积 (TIME+) 排序。
k 给予某个 PID 一个讯号 (signal)
r 给予某个 PID 重新制订一个 nice 值。
q 离开 top 软件的按键。
头部6行状态栏意义
top 目前时间,系统启动时间,已登入系统用户数,系统在 1, 5, 15 分钟的平均工作负载。
Tasks 显示的是目前程序的总量与个别程序在什么状态(running, sleeping, stopped, zombie)
Cpus 显示的是 CPU 的整体负载,可按数字1,来显示多核心CPU负载
us: (user CPU time) 用户态使用的cpu时间比
sy: (system CPU time) 系统态使用的cpu时间比
ni: (nice CPU time) 用做nice加权的进程分配的用户态cpu时间比
id: (idle) 空闲的cpu时间比
wa: (iowait) cpu等待磁盘写入完成时间
hi: (hardware irq) 硬中断消耗时间
si: (software irq) 软中断消耗时间
st: (steal time) 虚拟机偷取时间
Mem 物理内存的使用情况
Swap 虚拟内存的使用情况,需注意如果 swap 被用的很多,表示系统的物理内存不足
other 这个是当在 top 程序当中输入命令时,显示状态的地方。
进程状态的意义
PID 进程的ID
USER 进程所有者
PR 进程的优先级别,越小越优先被执行
NI nice值
VIRT 进程占用的虚拟内存
RES 进程占用的物理内存
SHR 进程使用的共享内存
S 进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU 进程占用CPU的使用率
%MEM 进程使用的物理内存和总内存的百分比
TIME+ 该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND 进程启动命令名称
进程的优先级
名词概念
PRI (Priority)优先运行序,PRI值越低代表越优先的意思。PRI值由核心动态调整,使用者无法直接调整PRI
NI (Nice)使用者可修改NI值来影响PRI,范围-20~19,非root用户只能调整自己进程的NI值,且只能调高
nice 以所设置的nice值运行新的命令
-n number command 以所设置的nice值运行新的命令
renice 调整已经运行的程序的nice值
[number] PID 把该PID的process的nice值调整为number
kill
PID 杀掉指定PID的进程
-l 这个是 L 的小写,列出目前 kill 能够使用的讯号 (signal) 有哪些?
signal 代表给予后面接的那个工作什么样的指示罗!用 man 7 signal 可知:
-1 重新读取一次参数的配置档 (类似 reload);
-2 代表与由键盘输入 [ctrl]-c 同样的动作;
-9 立刻强制删除一个工作;
-15 以正常的程序方式终止一项工作。与 -9 是不一样的。
screen 终端模拟器
screen -S name 新建一个会画
screen -dmS name 建立一个处于断开模式下的会话(并指定其会话名)。
screen -list 列出所有会话。
screen -r name 重新连接指定会话。
CTRL + a d 暂时断开当前会话。
exit 终止当前会画
CTRL + d 终止当前会画
fuser 找出正在使用指定文件或文件夹的程序
-u 除了程序的 PID 之外,同时列出该程序的拥有者;
-m 后面接的那个文件会主动的上提到该文件系统的最顶层,对 umount 不成功很有效!
-v 可以列出每个文件与程序还有命令的完整相关性!
-k 找出使用该文件/目录的 PID ,并试图以 SIGKILL 这个讯号给予该 PID;
-i 必须与 -k 配合,在删除 PID 之前会先询问使用者意愿!
-signal 例如 -1 -15 等等,若不加的话,默认是 SIGKILL (-9) 罗!
-uv . 找出目前所在目录的使用 PID/所属帐号/权限 是什么
fuser -mvu /proc 找到所有使用到 /proc 这个文件系统的程序
ACCESS 的意义:
c 此程序在当前的目录下(非次目录);
e 可被触发为运行状态;
f 是一个被开启的文件;
r 代表顶层目录 (root directory);
F 该文件被开启了,不过在等待回应中;
m 可能为分享的动态函式库;
lsof 查看正在被进程所开启的文件
-a 多项数据需要『同时成立』才显示出结果时!
-U 仅列出 Unix like 系统的 socket 文件类型;
-u 后面接 username,列出该使用者相关程序所开启的文件;
+d 后面接目录,亦即找出某个目录底下已经被开启的文件!
pidof 找出某个正在运营程序的PID
-s 仅列出一个 PID 而不列出所有的 PID
-x 同时列出该 program name 可能的 PPID 那个程序的 PID
定时任务
at [-mldv] TIME 新增,查看,修改定时任务
-m 当 at 的工作完成后,即使没有输出信息,亦以 email 通知使用者该工作已完成。
-l at -l 相当於 atq,列出目前系统上面的所有该使用者的 at 排程;
-d at -d 相当於 atrm ,可以取消一个在 at 排程中的工作;
-v 可以使用较明显的时间格式列出 at 排程中的工作列表;
-c 可以列出后面接的该项工作的实际命令内容。
TIME:时间格式,这里可以定义出『什么时候要进行 at 这项工作』的时间,格式有:
HH:MM 在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此工作。
HH:MM YYYY-MM-DD 强制规定在某年某月的某一天的特殊时刻进行该工作!
HH:MM[am|pm] + number [minutes|hours|days|weeks] 在某个时间点『再加几个时间后』才进行。
相关文件
/var/spool/at/ 被安排在队列中的任务
/etc/at.allow 允许使用at的用户,如果at.allow不存在,则取at.deny配置。
/etc/at.deny 不允许使用at的用户,如果两个都不存在,则只有root可以运行at。
atq 查询目前主机上面有多少的 at 工作计划
atrm num 移除当前主机第num号 at 任务计划
batch 在CPU工作负载小于0.8时,执行所下达的工作计划
crontab [-u username] [-l|-e|-r] 定时计划任务
-u 只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;
-e 编辑 crontab 的工作内容
-l 查阅 crontab 的工作内容
-r 移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑。
相关文件
/var/spool/cron/ 已经被crontab安排的工作记录
/var/log/cron crontab的工作日志
/etc/cron.allow 允许使用crontab的用户,如果cron.allow不存在,则取cron.deny配置。
/etc/cron.deny 允许使用crontab的用户,如果两个都不存在,则只有root可以运行crontab。
/etc/crontab 系统的定时任务设置
anacron 检测关机期间没有运行的定时任务并运行
-s 开始一连续的运行各项工作 (job),会依据时间记录档的数据判断是否进行;
-f 强制进行,而不去判断时间记录档的时间戳记;
-n 立刻进行未进行的任务,而不延迟 (delay) 等待时间;
-u 仅升级时间记录档的时间戳记,不进行任何工作。
job 由 /etc/anacrontab 定义的各项工作名称。
查看系统信息
uptime 查看系统启动时间与工作负载
cal 显示日历 也可显示其他月份
date 显示或者设置系统时间
dumpe2fs partition 查看分区的文件系统信息
/proc/cpuinfo cpu信息
lsblk 列出块设备 以树状格式输出
-a 以列表模式输出
free 显示内存占用信息
属性意义
Mem 那一行显示的是实体内存的量
Swap 则是虚拟内存的量
total 是总量
used 是已被使用的量
free 则是剩余可用的量
shared/buffers/cached 则是在已被使用的量当中,用来作为缓冲及缓存的量
uname 显示机器名 操作系统 及内核详细信息
-a 所有系统相关的资讯,包括底下的数据都会被列出来;
-s 系统核心名称
-r 核心的版本
-m 本系统的硬件名称,例如 i686 或 x86_64 等;
-p CPU 的类型,与 -m 类似,只是显示的是 CPU 的类型!
-i 硬件的平台 (ix86)
netstat 查看网络信息
-r 列出路由表(route table),功能如同 route 这个指令;
-a 将目前系统上所有的连线、监听、Socket 数据都列出来
-t 列出 tcp 网络封包的数据
-u 列出 udp 网络封包的数据
-n 不以程序的服务名称,以端口 (port number) 来显示;
-l 列出目前正在网络监听 (listen) 的服务;
-p 列出该网络服务的程序 PID
-c 可以设定几秒钟后自动更新一次,例如 -c 5 每五秒更新一次网络状态的显示;
netstat -tlnp 列出目前系统中已开启的网络服务及PID
网络连接相关状态:
Proto 网络的封包协议,主要分为 TCP 与 UDP 封包,相关数据请参考服务器篇;
Recv-Q 非由使用者程序连结到此 socket 的复制的总 bytes 数;
Send-Q 非由远程主机传送过来的 acknowledged 总 bytes 数;
Local Address 本地端的 IP:port 情况
Foreign Address 远程主机的 IP:port 情况
State 连线状态;
ESTABLISED 已建立联机的状态;
SYN_SENT 发出主动联机 (SYN 标志) 的联机封包;
SYN_RECV 接收到一个要求联机的主动联机封包;
FIN_WAIT1 该插槽服务(socket)已中断,该联机正在断线当中;
FIN_WAIT2 该联机已挂断,但正在等待对方主机响应断线确认的封包;
TIME_WAIT 该联机已挂断,但 socket 还在网络上等待结束;
LISTEN 通常用在服务的监听 port !可使用『 -l 』参数查阅。
本机进程相关状态:
Proto 一般就是 unix 啦;
RefCnt 连接到此 socket 的程序数量;
Flags 连线的旗标;
Type socket 存取的类型。主要有确认连线的 STREAM 与不需确认的 DGRAM 两种;
State 若为 CONNECTED 表示多个程序之间已经连线创建。
Path 连接到此 socket 的相关程序的路径!或者是相关数据输出的路径。
hdparm 查看硬盘的相关信息或对硬盘进行测速、优化、修改硬盘相关参数设定。
-a 表示是否关闭磁盘预读取功能。对于大文件读取,这个显然能提高性能。
-A 设置硬盘驱动器缓存读取特性。可能就是硬盘缓存开关
-g 显示硬盘的磁轨,磁头,磁区等参数。
-i 显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供。
-I 直接读取硬盘所提供的硬件规格信息。
-p 设定硬盘的PIO模式。
-t 测试硬盘的读取效率。
-T 测试硬盘缓存读取效率。
-u 在硬盘存取时,允许其他中断要求同时执行。
-v 显示硬盘的相关设定。
hdparm /dev/sda 显示硬盘相关设置
hdparm -g /dev/sda 显示硬盘的柱面、磁头、扇区数
hdparm -t /dev/xvda 测试硬盘的读取速度
hdparm -C /dev/sda 检测硬盘的电源管理模式
/proc/*
process 已 /porc/PID 目录的形式保存在/porc中
cmdline 这个程序被启动的命令串;
environ 这个程序的环境变量内容。
/proc/cmdline 加载 kernel 时所下达的相关参数!查阅此文件,可了解系统是如何启动的!
/proc/cpuinfo 本机的 CPU 的相关资讯,包含时脉、类型与运算功能等
/proc/devices 这个文件记录了系统各个主要装置的主要装置代号,与mknod有关!
/proc/filesystems 目前系统已经加载的文件系统罗!
/proc/interrupts 目前系统上面的 IRQ 分配状态。
/proc/ioports 目前系统上面各个装置所配置的 I/O 位址。
/proc/kcore 这个就是内存的大小啦!好大对吧!但是不要读他啦!
/proc/loadavg 还记得 top 以及 uptime 吧?没错!上头的三个平均数值就是记录在此!
/proc/meminfo 使用 free 列出的内存资讯,嘿嘿!在这里也能够查阅到!
/proc/modules 目前我们的 Linux 已经加载的模块列表,也可以想成是驱动程序啦!
/proc/mounts 系统已经挂载的数据,就是用 mount 这个命令呼叫出来的数据啦!
/proc/swaps 到底系统挂加载的内存在哪里?呵呵!使用掉的 partition 就记录在此啦!
/proc/partitions 使用 fdisk -l 会出现目前所有的 partition 吧?在这个文件当中也有纪录喔!
/proc/pci 在 PCI 汇流排上面,每个装置的详细情况!可用 lspci 来查阅!
/proc/uptime 就是用 uptime 的时候,会出现的资讯啦!
/proc/version 核心的版本,就是用 uname -a 显示的内容啦!
/proc/bus/* 一些汇流排的装置,还有 U盘 的装置也记录在此喔!
硬件信息
dmidecode 查询硬件信息
-t type 查询指定类型信息,常用type如下:
1 详细系统信息,主板型号及硬件基础信息
4 CPU相关信息,包括倍频,外频,核心数量,核心数据等
9 系统相关插槽格式,包括PCI,PCI-E等接口规格说明
17 内存插槽规格,若已经插上内存,则显示该内存的容量及型号
dmesg 查看开机和系统运行过程中,核心产生的信息
lspci 列出系统中的PCI设备
-v 显示更多的 PCI 设备的详细信息
-vv 比 -v 相信的内部信息;
-n 直接查看 PCI 的 ID 而不是厂商名称
update-pciids 更新PCI设备ID厂商对应表
lsusb 列出系统中各USB接口的状态
-t 适用树状解构显示各USB设备的相关性
iostat 与vmstat类似,即时查看整个CPU与周边设备的Input/Output状态
-c 仅显示 CPU 状态
-d 仅显示存储设备状态
-k 默认显示的是 block ,可改成 K bytes 的大小显示
-m 与 -k 类似,以 MB 的单位显示结果
-t 显示日期日
状态值意义:
tps 平均每秒传送次数,只与次数相关,非容量
kB_read/s 开机到现在平均每秒读取单位
kB_wrtn/s 开机到现在平均每秒写入单位
kB_read 开机到现在,移动读取的数据大小
kB_wrtn 开机到现在,移动写入的数据大小
smartctl 查询设备的SMART信息
-a /dev/sda 查看/dev/sda设备的SMART信息
-t short /dev/sda 硬盘检查
系统备份
需要备份的文件目录
/etc/ 配置文件目录,可整个目录备份
/root/ root家目录,可整个目录备份
/home/ 用户家目录,可整个目录备份
/var/spool/mail/ 用户邮件,可整个目录备份
/var/spool/at/ 定时任务文件夹
/var/spool/cron/ 定时任务文件夹
/boot/ 如果修改过核心或启动文件,可整个目录备份
/usr/local/ 自己安装过软件,可整个目录备份
/opt 自行安装过软件,可整个目录备份
备份相关命令
dd
if=/dev/sda of=/dev/sdb 将/dev/sda到完全备份至/dev/sdb,速度较慢
cpio
find / -print | cpio -covB > /dev/st0 备份根目录下所有文件至设备st0
cpio -iduv < /dev/st0 从备份中还原
xfsdump
xfsdump -l 0 -L 'full' -M 'full' -f /backu/home.dump /home 第一次完整备份
xfsdump -l 1 -L 'full-1' -M 'full-1' -f /backup/home.dump1 /home 第一次增量备份
tar
tar --exclude /proc --exclude /backup -jcvp -f /backup/system.tar.bz2 / 除proc外完整备份
tar -jpcvf mysql.`date +%Y-%m-%d`.tar.bz2 /var/lib/mysql 备份mysql,并以时间命名
rsync
rsync -av /home /backupdata/ 保持两个目录文件一致,第一次为完全备份,第二次增量备份
软件安装
Tarball源码方式
安装步骤
1,获取原始文件,将 tarball 文件在 /usr/local/src 目录下解压缩。
2,查看源码提供的说明文件,如 INSTALL 与 README 等文件内容。
3,依照 INSTALL/README 的内容安装依赖软件
4,建立makefile,通过自动检测程序configure或config检测环境,并建立Makefile 文件。
5,编译,通过make程序并以Makefile文件为参数设定文件进行编译。
6,安装,通过make程序并以Makefile文件为参数设定,依据install这个target 的指定路径安装。
安装相关命令
./configure 检测环境建立 Makefile 文件。
make clean 读取 Makefile 中关于 clean 的内容,删除上一次编译的残留文件。
make 依据 Makefile 编译。
make install 依据 Makefile 中关于 install 的内容,将编译好的文件安装到指定目录。
安装路径
系统预装软件
/etc/httpd
/usr/lib
/usr/bin
/usr/share/man
源码编译安装通常默认安装位置
/usr/local/etc
/usr/local/bin
/usr/local/lib
/usr/local/man
建议安装位置(利于删除程序,需指定path)
/usr/local/software/etc
/usr/local/software/bin
/usr/local/software/lib
/usr/local/software/man
md5sum/sha1sum/sha256sum 校验文件是否正确
-b 使用 binary 的读取方式,默认为 Windows/DOS 文件类型的读取方式
-c 检查文件指纹
-t 以文字形态读取文件指纹
函数库
静态
扩展名:.a
编译行为:函数库在编译时整合进可执行文件中,相对动态函数库编译后文件较大。
独立执行:不依赖外部函数库内容,可独立执行
升级难度:函数库升级,程序须重新编译。
动态
扩展名:.so
编译行为:程序编译时(Pointer)指向动态函数库目标,相对静态函数库编译后文件较小。
独立执行:不可独立执行,依赖外部函数库,函数库文件位置不可改变
升级难度:函数库升级,程序不须重新编译。
在内存中载入函数库
1,在 /etc/ld.so.conf 中写入希望在内存中载入的函数库目录
2,通过 ldconfig 程序将 /etc/ld.so.conf 中的资料载入到内存中
3,同时将内容复制一份至 /etc/ld.so.cache 文件中
ldd 查看函数所使用的函数库
-v 列出所有内容信息
-d 重新将信息遗失的 link 显示出来
-r 将 ELF 相关的错误显示出来
dpkg
目录说明
/var/lib/dpkg/ 通过dpkg安装的软件的相关信息库
RPM - RedHat Package Manager 本地包升级
目录说明
/var/lib/rpm/ 通过RPM安装的软件的相关信息库
/etc 软件相关设置文件
/usr/bin 一些可执行文件
/usr/lib 一些程序所使用的动态函数库
/usr/share/doc 一些基本软件使用手册及说明书
/usr/share/man 一些 man page 文件
安装升级相关命令选项
-i install 的意思
-v 查看更详细的安装信息
-h 以安装信息列显示安装进度
-U 安装过则升级,否则安装
-F 只是升级,没有安装过不安装
-e 删除软件
--nodeps 当放生两个软件相互依赖时可使用
--replacefiles 当出现文件已存在或confilcting files时
--replacepkgs 当软件已经安装过,需要重新安装时
--force 强制安装,是 --replacefiles 与 --replacepkgs 的综合体!
--test 测试软件是否能被安装到使用者的linux中
--justdb 由于RPM的资料库破损或某些原因产生错误,可用来个更新软件在资料库中的信息
--nosignature 略过软件的数字签名检查
--prefix 指定软件安装路径
--noscripts 不想软件在安装过程中执行某些系统指令
查询相关命令选项
-q 查询指定软件是否安装
-qa 列出系统已安装的所有软件
-qi 列出指定软件详细资讯
-ql 列出指定软件所有的文件和目录名
-qc 列出指定软件的所有设置文件
-qd 列出指定软件的所有man相关说明文件
-qR 列出與指定软件依赖软件
-qf 由文件名找出属于哪个软件的文件
-q --scripts 列出是否有安装好需要执行的脚本
-qp[icdlR] 找出某个软件信息,非已经按照的
验证相关命令选项
-V 验证指定软件是否被修改过
修改状态
S (file Size differs) 文件大小是否有变化
M (Mode differs) 文件属性(rwx)是否有改变
5 (MD5 sum differs) MD5 指纹是否有变化
D (Device major/minor number mis-match) 设备代码是否变化
L (readLink(2) path mis-match) Link 路径是否变化
U (User ownership differs) 文件拥有者是否变化
G (Group ownership differs) 文件所属群组是否变化
T (mTime differs) 文件建立时间是否被改变
P (caPabilities differ) 功能是否被修改
修改的文件类型
c (config file) 配置文件
d (documentation) 文档文件
g (ghost file) 不属于该软件的档案
l (license file) 授权信息档案
r (read me) 说明档案
-Va 列出目前系统商所被可能被改动过的文件
-Vp 列出该软件内的可能被修改过的文件
-Vf 查看某个文件是否被修改过
SRPM - 包含源的RPM
rpmbuild
-ba 编译并同时生成RPM和SRPM文件
-ba 仅编译成RPM文件
--rebuild 进行编译打包操作,最终生成.rpm文件
--recompile 进行编译打包的操作,完成后安装到系统中
相关目录
/root/rpmbuild/SPECS 软件设置文件
/root/rpmbuild/SOURCES 软件原始文件 (*.tar.gz) 以及 config 设置文件
/root/rpmbuild/BUILD 编译过程中的临时文件
/root/rpmbuild/RPMS 编译成功后,打包完成的文件,包含x86_64,noarch等子目录
/root/rpmbuild/SRPMS 编译成功后,打包完成的文件,以SRPM封装的文件
配置文件内容 *.spec
Summary 软件的主要说明
Name 软件的名称,最终生成的RPM的文件名
Version 软件版本,RPM文件名组成部分
Release 软件打包次数,RPM文件名组成部分
License 软件授权方式
Group 软件所属的软件组
URL 源码的主要官网
SourceN 软件来源网站
PatchN 作为补丁的patch file
BuildRoot 临时文件的保存目录
Requires 所依赖的软件
BuildRequires 编译过程中需要的软件
%description 软件相关的描述说明
%prep 编译之前需要做的事情
%build 编译相关指令
%install 编译完成后的安装指令
%files 软件包括的文件和目录
%changelog 软件的变更记录
YUM - 线上升级
相关选项和命令
-y 当yum 需要输入时,自动选 Yes
--installroot= 指定软件安装的目录
install 安装软件
update 升级软件
remove 删除软件
search 搜索某个软件名或描述中的关键字
list 列出目前 yum 所管理的所有的软件名称和版本
info 列出目前 yum 所管理的所有的软件,并显示更详细信息
provides 由文件名找出属于哪个软件的文件
repolist all 列出目前所有使用的软件仓库
clean all 删除所有本机缓存的软件仓库相关文件
grouplist 查询目前已经安装的和软件仓库中的软件组
groupinstall 安装软件组
修改相关设置
设置文件地址
/etc/yum.repos.d/*
相关字段
[base] 软件库名字,中括号必须存在,名字可自定义,不可重复
name 软件库的说明,非必须
mirrorlist= 软件仓库的更新列表网址,非必须
baseurl= 软件库地址
enable= 此软件库状态,1为启动,0为关闭
gpgcheck= 是否检查数字签名
gpgkey= 数字签名文件位置
系统服务
System V (init)启动服务
相关文件
/etc/services 服务和端口对应的配置文件(不建议修改)
/etc/init.d/* 启动脚本放置的地方
/etc/sysconfig/* 各服务的初始化环境配置文件
/etc/xinetd.conf super daemon 配置文件
/etc/* 各服务各自的配置文件
/var/lib/* 各服务产生的数据库
/var/run/* 各服务的程序之 PID 记录处
service
service_name [ command | --full-restart ] 管理某个服务,如start|stop|restart|...
--status-all 将系统所有的 stand alone 的服务状态通通列出来
/etc/init.d/service_name 查看service_name服务所能执行的命令
/etc/init.d/service_name [start|stop|restart|status...] 开启停止重启服务等
systemd 启动服务
相关文件和目录
/usr/lib/systemd/system/ 系统内置的服务启动脚本设置,类似以前的 /etc/init.d
/run/systemd/system/ 系統执行过程中所产生的服务脚本,优先级比/usr/lib/systemd/system/高
/etc/systemd/system/ 管理员自己编写的服务启动腳本, 优先级比/run/systemd/system/高
/etc/sysconfig/* 大部分服务的初始化设置
/var/lib/ 各服务产生的数据库
/run/* 各服务的暂存文件,包括 lock file 及 PID file 等等
/usr/lib/systemd/system/vsftpd.service 服务官方默认配置文件
/etc/systemd/system/vsftpd.service.d/custom.conf 个人定制配置文件
/etc/systemd/system/vsftpd.service.wants/* 启动后建起启动此目录下的服务
/etc/systemd/system/vsftpd.service.requires/* 启动前需要启动此目录下的服务
配置文件字段说明
[Unit] unit 本身说明及依赖设置
Description 服务说明
Documentation 相关说明文档
After 此服务在哪个服务之后启动,不强制
Before 与After相反,在哪个服务启动前最好启动此服务,不强制
Requires 依赖某个服务启动后才能启动
Wants 与Requires相反,此服务启动后还需启动哪些服务
Conflicts 互相冲突的服务,不能同时启动
[Service],[Socket],[Timer],[Mount],[Path].. 启动脚本,环境变量,重启方式等设置
Type 此服务的启动方式,会影响到ExecStart,通常有如下类型
simple 默认值,这个服务主要由 ExecStart 指定的指令启动,启动后常驻内存。
forking 由ExecStart启动的程序通过spawns延伸出其他子程序作为服务,子程序启动后终止父程序
oneshot 与simple类似,但工作完成后结束,不常驻内存
dbus 与simple类似,但必须获取一个D-Bus后才继续运行,设置此值通常须设定BusName=
idle 与simple类似,此服务须其他所有程序都顺利执行后才会执行,通常是开机到最后才执行
EnvironmentFile 环境设置文件
ExecStart 执行服务的指令,除Type=oneshot不支持 <, >, >>, |, & 等特殊字符
ExecStartPre 开启服务前执行的指令
ExecStartPost 开启服务后执行的指令
ExecStop 与systemctl stop有关,关闭此服务执行的指令。
ExecReload 与systemctl reload有关的指令
Restart 当此值为1时,服务终止后会自动重启服务,只能用systemctl关闭
RemainAfterExit 当此值为1时,服务所属程序全部终止后,此服务重启。
TimeoutSec 当此服务无法正常启动或关闭时,多久进入强制结束的状态
KillMode 关闭模式
process 服务终止后,只终止主要程序(ExecStart后面的指令)
control-group 由此服务所产生的其他程序也会关闭
none 不关闭程序
RestartSec 当服务因Restart重启,需要sleep多少时间再重启,默认100ms
[Install] 将此unit安装到哪个target里面
WantedBy 此服务属于哪个target unit,通常为multi-user.target
Also 服务设置enable时,指定的unit也需设置enable
Alias 别名
systemd 常见服务类型(根据文件名可大概判断)
.service 一般服务类型 (service unit):主要是系統服務,经常使用,最常见!
.socket 内部程序资料交换的通信服务 (socket unit):较少用到
.target 执行环境类型 (target unit):通常为一堆服务unit的集合
.mount 文件系统挂载服务(mount unit)
.automount 文件系统自动挂载服务 (automount unit):例如来自网络的自动挂载、NFS等
.path 检测特定文件类型 (path unit):某些服务需要侦测特定目录来提供服务,需.path服务支持
.timer 循环执行的服务 (timer unit):类似anacrontab,由systemd提供的,更有弹性!
常见target unit说明
graphical.target 文字+图形界面 已包含multi-user.target 項目
multi-user.target 純文字模式
rescue.target 无法使用root登入系统的情况时,systemd开机时的格外系统
emergency.target 需要root登入的紧急处理错误,无法使用rescue.target时可尝试
shutdown.target 开机流程
getty.target 可设定需要几个tty等,如需要降低tty的項目,可以修改此设定
systemctl 管理服务
start unit_name 立即启动所指定的服务
stop unit_name 立即停止所指定的服务
restart unit_name 立即重启所指定的服务
reload unit_name 不关闭服务的情况下,重新加载配置,让配置生效
enable unit_name 开机时,服务自动启动
disable unit_name 开机时,服务不自动启动
is-active unit_name 目前是否在运行
is-enable unit_name 是否已设置开机启动
list-sockets 查看本机所用到的socket file
status unit_name 显示服务的状态,如是否正在执行、是否开机启动等!
Loaded 开机时是否启动
enabled 为启动
disabled 为不启动
static 不可设置为开机启动,但可被其他开机启动的服务唤醒
mask 已被禁止开机启动,可通过systemctl unmask 方式修改
Active 当前服务是否已经启动
active (running) 服务已启动,有一个或多个程序在运行
active (exited) 服务已启动,仅运行一次就正常结束的服务,目前没有在系统中运行
active (waiting) 服务已启动,但需登台其他事件才能继续运行
inactive (dead) 这个服务目前没有启动
Docs 服务的文档文件
Main PID 服务对应的PID
systemctl 查看当前系统中所有启动的服务,不加参数等同与 list-units
UNIT 服务的名称
LOAD 是否开机启动,默认显示的是启动的
ACTIVE 目前的状态
DESCRIPTION 详细描述
list-units 查看当前系统中所有开机启动的服务
--type=TYPE -all 列出类型为TYPE的服务,TYPE包括 service, socket, target等
list-unit-files 显示当前系统中所有服务
list-dependencies 显示系统间各服务的依赖
get-default 获取当前目前的 target
set-default target_name 设定 target 为默认的操作模式
isolate target_name 切换到指定 target
list-dependencies [target] 查看指定的target的依赖关系,默认default.target
-reverse 查看谁用到了指定的target,默认default.target
poweroff 系统关机
reboot 系统重启
suspend 进入睡眠模式,所有资料保存在内存中,关闭其他大部分硬件
hibernate 进入休眠模式,资料保存在硬盘中并关机,开机后从硬盘恢复
rescue 强制进入救援模式
emergency 强制进入紧急救援模式
systemd.timer 定时任务设置
系统需求
timer.target 需要启动
name.service 需自定义名字的服务
name.timer 需要自定义名字的时间启动服务存在,可放在/etc/systemd/system中
name.timer 设置
OnActiveSec 当timers.target启动多久后执行此unit
OnBootSec 当开机后多久执行
OnStartupSec 当systemd第一次启动后多久执行
OnUnitActiveSec 此timer配置所管理的unit服务在最后一次启动后隔多久再执行一次
OnUnitInactiveSec 此timer配置所管理的unit服务在最后一次停止后隔多久再执行一次
OnCalendar 使用绝对时间来启动服务
Unit 一般不需要設定,会自动找同名对应服务,不存在可指定
Persistent 当使用OnCalendar时,该功能是否继续执行,通常为yes
OnCalendar时间设置
绝对时间
格式 英文周名 YYYY-MM-DD HH:MM:SS
例 Thu 2015-08-13 13:40:00
时间间隔
单位
us 或 usec:微秒 (10-6 秒)
ms 或 msec:毫秒 (10-3 秒)
s, sec, second, seconds
m, min, minute, minutes
h, hr, hour, hours
d, day, days
w, week, weeks
month, months
y, year, years
简称对应时间
now Thu 2015-08-13 13:50:00
today Thu 2015-08-13 00:00:00
tomorrow Thu 2015-08-14 00:00:00
hourly *-*-* *:00:00
daily *-*-* 00:00:00
weekly Mon *-*-* 00:00:00
monthly *-*-01 00:00:00
+3h10m Thu 2015-08-13 17:00:00
2015-08-16 Sun 2015-08-16 00:00:00
相关资源
http://www.jinbuguo.com/systemd/systemd.service.html
http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html
系统日志
常见日志文件
/var/log/boot.log 开机时的启动日志,只保存最近一次记录
/var/log/cron crontab定时任务执行日志
/var/log/dmesg 开机核心检测过程日志
/var/log/lastlog 记录系统中所有帐号最近一次登入系统的相关信息
/var/log/maillog 记录SMTP 和 POP3 产生的信息
/var/log/messages 记录各类系统错误或重要信息
/var/log/secure 记录系统中的登入操作,包括su,sudo,ssh,telnet等
/var/log/wtmp 记录正确登入系统的帐号信息
/var/log/faillog 记录错误登入系统时使用的帐号信息
/var/log/httpd/* 记录http服务产生的日志
/var/log/samba/* 记录samba服务产生的日志
日志相关服务
systemd-journald.service 由systemd提供的日志接收者,信息保存在内存中,可通过/run/log/查看
rsyslog.service 统一管理日志文件的服务,主要记录系统与网络服务等信息
logrotate 日志文件备份保存工具,备份重命名旧文件,生成新文件
rsyslog.service
配置文件 /etc/rsyslog.conf
服务分类
0 kern(kernel) kernel所产生的信息,多为硬件检测和核心功能启用
1 user 用户产生的日志,如 logger 的使用
2 mail 邮件收发相关日志;
3 daemon 系统服务产生的日志
4 auth 认证授权相关信息,如login, ssh, su 等
5 syslog rsyslogd 程序所产生的信息
6 lpr 打印相关的日志
7 news 新闻服务器相关的信息
8 uucp Unix to Unix Copy Protocol,早期用于 unix 系统间的信息通信
9 cron 定时任务 cron/at 等产生的日志
10 authpriv 与 auth 相似,多记录帐号私有信息,如 pam 模块的运行等!
11 ftp,FTP FTP通信协议有关的日志
16~23 local0 ~ 7 保留给用户使用的信息,通常和终端互动。
日志级别
7 debug debug信息
6 info 信息说明
5 notice 比info更需要引起注意的信息
4 warning 警告信息,可能存在问题,但不至于影响服务正常运行
3 err 错误信息,如服务无法启动等
2 crit 严重错误信息,比error更加严重,critical 的缩写
1 alert 警告信息,比crit更加严重
0 emerg 最严重的级别,如硬件出现问题,核心无法正常工作
连接符
. 代表小于等于该级别,更加严重的都记录下来
.= 代表只记录.=后面的级别
.! 除.!后面的级别都记录
.none 不记录
日志保存位置
本机绝对路径 如/var/log
打印机等设备 如/dev/lp0
用户名称,显示给指定用户
远程主机,如 @study.vbird.tsai,需远程主机支持
* 代表目前线上所有人
服务名称
syslog Linux核心提供的日志函数
rsyslogd 具有日志分类等功能的程序, 是最基本的daemon
rsyslog.service 加入 systemd 的控制,由rsyslogd开发的启动服务脚本设置!
logrotate
配置文件
/etc/logrotate.conf
/etc/logrotate.d/
logrotate
-v 在logrotate运行时显示过程信息
-f 无论是否符合设定,强制执行 rotate
journalctl
配置文件
/etc/systemd/journald.conf
命令及选项
-n 展示最近的几行信息
-r 反向输出
-p 按照重要性排序展示信息
-f 类似 tail -f 的功能,持续展示 journal 日志内容
-u 输入指定的unit的日志
--since 设定开始时间
--until 设定结束时间
_COMM=bash 只输出 bash 相关的日志
_PID=pid 只输出指定 PID 进程的日志
_UID=uid 只输出指定 UID 用户的日志
_SYSTEMD_UNIT=unit.service 输出 unit.service 的日志
SYSLOG_FACILITY=[0-23] 使用 syslog.h 规范服务序号显示日志
logger 保存信息至日志文件
dmesg 打印开机过程保存的日志
logwatch 日志分析工具
启动流程模块管理 Loader
开机过程
1,读取Bios进行硬件自检,并根据Bios设置获取第一个启动设备
2,读取并执行设备MBR(Master boot record,主引导记录)的boot loader(grub2,spfdisk等)
3,根据boot loader设定载入Kernel ,Kernel 开始检测硬件并加载驱动
4,硬件驱动成功后,Kernel 主动启动 systemd 程序,并以 default.target 流程开机;
systemd 执行 sysinit.target 初始化系统及 basic.target 准备操作系统
systemd 启动 multi-user.target 下的本机与服务器服务
systemd 执行 multi-user.target 下的 /etc/rc.d/rc.local 文件
systemd 执行 multi-user.target 下的 getty.target 及登入服务
systemd 执行 graphical 需要的服务
boot loader功能
提供选择不同loader的选项
加载操作系统核心
将开机管理功能交给其他loader负责
/boot/相关文件
config 内核编译时的功能和模块设置文件
grub/ 旧版 grub1 相关文件
grub2/ 启动管理程序 grub2 相关文件
initrd.gz 内存虚拟磁盘映像
initramfs-0-rescue.img 救援模式用到的系像文件
initramfs.img 正常开机用到的系统文件
initramfskdump.img 内核题时用到的系统文件
System.map 内核功能放置到内存的地址对应表
vmlinuz-0-rescue* 救援模式用到的内核文件
vmlinuz* 内核二进制文件
开机过程中的配置文件
/etc/modules-load.d/*.conf 核心模块加载配置
/etc/modprobe.d/*.conf 可附加参数的模块配置
/etc/sysconfig/authconfig 规范用户身份认证机制,如是否可用/etc/passwd, /etc/shadow等
/etc/sysconfig/cpupower cpupower.service服务的配置,规定系统如何高效利用CPU
/etc/sysconfig/firewalld firewalld系统防火墙配置
/etc/sysconfig/iptables-config iptables系统防火墙配置
/etc/sysconfig/network-scripts/ 网卡设定
核心 & 核心模块
文件位置
/boot/vmlinuz[-version] 核心文件
/boot/initramfs[-version] 核心解压缩RAM Disk
/lib/modules/version/kernel 核心模块
/lib/modules/$(uname -r)/kernel 核心模块
/usr/src/linux 核心源码
/usr/src/kernels/ 核心源码
/proc/version 核心版本
/proc/sys/kernel/ 系统核心功能
新硬件安装驱动
重新编译内核,并加入最新的硬件驱动
将该硬件驱动编译为模块,开机载入该模块
核心模块
模块目录
arch 硬件平台相关模块,如CPU等级等
crypto 内核支持的加密基数,如 md5 des 等
drivers 硬件驱动,如显卡,网卡,PCI 等
fs 内核所支持的 filesystems ,如 vfat, reiserfs, nfs 等
lib 一些函数库;
net 网络相关协议资料,防火墙模块 (net/ipv4/netfilter/*) 等
sound 音效相关模块
模块依赖文件
/lib/modules/$(uname -r)/modules.dep
depmod 生成模块依赖文件
-n :不写入 modules.dep ,而是将结果输出到屏幕上(standard out);
-e :显示出目前已加载的不可执行的模块名
lsmod 查看已加载的模块
字段意义
Module 模块名称
size 模块大小
Used by 被哪些模块使用
modinfo 看看模块信息
-a [module_name] 仅列出作者名称
-d [module_name] 仅列出该 modules 的说明 (description);
-l [module_name] 仅列出授权 (license);
-n [module_name] 仅列出该模块的的詳細路径。
modprobe 依据modules.dep依赖关系加载模块
-c 列出目前系统中所有模块
-f module_name 强制加载模块
-r module_name 删除模块 类似 rmmod
insmod 根据文件名加载模块,不依据modules.dep
rmmod 删除模块
核心模块额外参数设置 /etc/modprobe.d/*conf
Boot Loader: Grub2
Grub2文件
/grub2/device.map grub2 的设备对应文件
/grub2/fonts 开机画面的字体
/grub2/grub.cfg grub2 主设置文件,重要,不建议修改
/grub2/grubenv 环境区块文件
/grub2/i386-pc 针对x86PC所需要的grub2的相关模块
/grub2/locale 语系相关文件
/grub2/themes 开机主题画面相关文件
/grub2/i386-pc/acpi.mod 電源管理相关模块
/grub2/i386-pc/ata.mod 磁盘相关模块
/grub2/i386-pc/chain.mod 进行 loader 控制权限移交相关模块
/grub2/i386-pc/command.lst 指令相关性列表
/grub2/i386-pc/efiemu32.o uefi BIOS 32位相关模块
/grub2/i386-pc/efiemu64.o uefi BIOS 64位相关模块
/grub2/i386-pc/efiemu.mod uefi BIOS 64位相关模块
/grub2/i386-pc/ext2.mod EXT 文件系统家族模块
/grub2/i386-pc/fat.mod FAT 文件系统模块
/grub2/i386-pc/gcry_sha256.mod sha256加密模块
/grub2/i386-pc/gcry_sha512.mod sha512加密模块
/grub2/i386-pc/iso9660.mod 光盘文件系统模块
/grub2/i386-pc/lvm.mod LVM文件系统模块
/grub2/i386-pc/mdraid09.mod 软磁盘阵列模块
/grub2/i386-pc/minix.mod MINIX相关文件系统模块
/grub2/i386-pc/msdospart.mod 一般 MBR 分区表
/grub2/i386-pc/part_gpt.mod GPT 分区表
/grub2/i386-pc/part_msdos.mod MBR 分区表
/grub2/i386-pc/scsi.mod SCSI 相关模块
/grub2/i386-pc/usb_keyboard.mod USB键盘相关模块
/grub2/i386-pc/usb.mod USB相关模块
/grub2/i386-pc/vga.mod VGA 显卡相关模块
/grub2/i386-pc/xfs.mod XFS 文件系统模块
Grub2优点
支持较多文件系统,可由Grub2程序直接在文件系统中搜索系统内核文件
可自定义开机选项
动态载入设置文件,修改设置文件后不需要重新安装Grub2,重启后生效
/etc/default/grub 主要环境配置文件
GRUB_TIMEOUT 默认倒数描述
GRUB_DEFAULT 默认开机选项菜单
GRUB_TIMEOUT_STYLE 是否隐藏选单
GRUB_DISABLE_SUBMENU 是否隐藏子菜单
GRUB_TERMINAL_OUTPUT 指定信息输出终端格式,默认是文字终端机
GRUB_CMDLINE_LINUX 核心启动时的格外参数
GRUB_DISABLE_RECOVERY 关闭救援模式菜单
grub2-mkconfig 依据/etc/default/grub重建grub.cfg
grub2 菜单生产脚本 /etc/grub.d/*
00_header 主要建立初始显示信息,包括终端机格式显示秒数等
10_linux 分析/boot下文件,尝试找到正确的linux核心读取核心文件和模块
30_os-prober 默认到其他partition里面的操作系统并添加到菜单中
40_custom 可在这里手动添加其他的启动项目
dracut 生成新的initramfs文件
-f 强制编译initramfs,如果initramfs文件已经存在则覆盖
-v 显示dracut运营过程
--add-drivers 在文件中增加驱动核心模块
--modules 将dracut所提供的模块载入,usr/lib/dracut/modules.d/
--gzip|--bzip2 选择压缩方式对initramfs压缩。默认gzip
--filesystems 加入格外的文件系统资支持
系统设置
网络设置
网卡名称
eno1 主板内置网卡
ens1 主板内置的PCI-E网卡
enp2s0 PCI-E独立网卡,多个插槽会有s0, s1... 等编号
eth0 (Ethernet) 上述名称都不适用时,恢复默认网卡编号
hostnamectl 查看或修改主机名称
set-hostname [host-name] 修改主机名称
日期时间设置
timedatectl 查看或设置系统日期时区
list-timezones 列出系統上所有支持时区
set-timezone 设置时区
set-time 设置时间
set-ntp 设置网络校时
ntpdate 设定网络校时服务器
hwclock 手动依据网络校时服务器更新时间
语言设置
locale 当前环境语系
localectl 查询设置系统语言
set-locale 设置系统语言
核心编译
核心目录
arch 与硬件平台相关内容,通常为是 CPU 的类别,如 x86, x86_64, Xen 虚拟支持等等;
block 与存储设备和文件系统相关的内容,文件系统是否允许等
crypto 核心支持的加密技术,如 md5,des 等
Documentation 与核心相关的文档说明
drivers 硬件相关的驱动程序,如网卡,显卡,PCI设备等
firmware 旧式硬件的微指令码 (固件) 资料
fs 核心支持的文件系统 filesystems ,如 vfat, reiserfs, nfs 等
include 一些可让其他程序呼叫的头(header)定义资料
init 核心初始化的内容,包括挂载与 init 程序的呼叫等
ipc 定义 Linux 系统各程序的通信
kernel 定义核心的程序、核心状态、执行序、程序的排程(schedule)、程序的信号(signle)等
lib 一些函数库;
mm 与内存单元有关的各项资料,包括 swap 与虚拟内存等;
net 与网络有关的各项设定资料,还有防火墙模块 (net/ipv4/netfilter/*) 等
security 包括 selinux 等在内的安全性设定;
sound 与音效有关的各项模块;
virt 与虚拟机有关的信息,目前核心支持的是 KVM (Kernel base Virtual Machine)
生成config编译配置文件
make menuconfig 最常用,终端图形界面核心功能设置界面
make oldconfig 以已经存在的./.config文件内容作为默认值,提供新功能的选项
make xconfig Qt图形设置界面,需 X window 支持,如 KDE
make gconfig Gtk图形设置界面,需 X window 支持,如 GNOME
make config 旧版命令行设置方式,每个设置独立选择
编译
make vmlinux 编译未经过压缩的核心
make modules 仅编译核心模块
make bzImage 编译经过压缩的核心(默认)
make all 进行如上三种动作
make -j 4 clean 先清楚临时文件
make -j 4 bzImage 编译核心
make -j 4 modules 编译核心模块
安装
make modules_install 安装模块
硬件设备名
IDE硬盘机 /dev/hd[a-d]
SCSI/SATA/U盘硬盘机 /dev/sd[a-p]
U盘 /dev/sd[a-p](与SATA相同)
软盘机 /dev/fd[0-1]
打印机 25针: /dev/lp[0-2]
打印机 USB: /dev/usb/lp[0-15]
鼠标 USB: /dev/usb/mouse[0-15]
鼠标 PS2: /dev/psaux
当前CDROM/DVDROM /dev/cdrom
当前的鼠标 /dev/mouse
磁带机 IDE: /dev/ht0
磁带机 SCSI: /dev/st0
apt-get包管理工具
apt-cache search package 搜索包
apt-cache show package 获取包的相关信息,如说明、大小、版本等
apt-cache depends package 了解使用依赖
apt-cache rdepends package 查看该包被哪些包依赖
sudo apt-get install package 安装包
sudo apt-get install package --reinstall 重新安装包
sudo apt-get -f install package 修复安装包
sudo apt-get remove package 删除包
sudo apt-get remove package --purge 删除包,包括删除配置文件等
sudo apt-get update 更新源
sudo apt-get upgrade 更新已安装的包
sudo apt-get dist-upgrade 升级系统
sudo apt-get dselect-upgrade 使用 dselect 升级
sudo apt-get build-dep package 安装相关的编译环境
apt-get source package 下载该包的源代码
sudo apt-get clean && sudo apt-get autoclean 清理无用的包
sudo apt-get check 检查是否有损坏的依赖
常用快捷键
ctrl + c 强行终止
ctrl + l 清屏 相当于clear命令
ctrl + a 光标移动到命令行首
ctrl + e 光标移动到命令行尾
ctrl + u 从光标所在位置删除到行首
ctrl + z 把命令放入后台
ctrl + r 在历史命令中搜索
ctrl + d 输入结束 (eof),例如邮件结束的时候;
ctrl + m 就是 enter 啦!
ctrl + s 暂停屏幕的输出
ctrl + q 恢复屏幕的输出
目录作用
/bin/ 系统所需要的任意用户可执行的命令
/sbin/ 系统所需要的超级用户才可以执行的命令
/usr/ 系统软件资源目录 unix software resources
/usr/ 存放Unix系统商(比如IBM和HP)开发的程序
/usr/bin/ 任意用户可执行的命令
/usr/sbin/ 超级用户才可以执行的命令
/usr/include linux下开发和编译应用程序所需要的头文件
/usr/lib 常用的动态链接库和软件包的配置文件
/usr/local/ 存放用户自己安装的程序
/usr/local/bin 本地增加的命令
/usr/local/lib 本地增加的库
/usr/doc linux文档,实际是 /usr/share/doc 的软链接
/usr/etc 一个极少用到的配置文件存放地
/usr/games 曾经包含游戏等文件,现在很少用到
/usr/info 系统相关信息,是 /usr/share/info 的软链接
/usr/man man 手册,已经移至 /usr/share/man
/usr/share 它包含了各种程序间的共享文件,如字体,图标,文档等
/usr/share/doc 类似应用程序的 man 手册。它包含程序的说明文件,默认配置文件等
/usr/share/info 不常用,已经被 man 代替
/usr/share/man app 的 manual
/usr/share/icons 应用程序的图标等文件,分为 png,svg 等多种格式
/usr/share/fonts 字体文件,系统范围内可使用,~/.fonts 仅当前用户可用
/usr/src linux 内核的源码和说明文档等
/usr/tmp 已经被众多发行版抛弃的临时文件夹
/usr/X11R6 存放X window的目录
/boot/ 启动目录,保存启动数据
/dev/ 设备特殊文件,保存硬件文件
/ect/ 系统管理和配置文件
/home/ 普通用户主目录
/root/ 系统管理员的主目录
/lib/ 函数库文件保存目录
/misc/ 挂载磁带机目录(不常用 因老版linux不存在此目录)
/media/ 挂载光盘目录(不常用 因老版linux不存在此目录)
/mnt/ 让用户临时挂载其他的文件系统,如移动硬盘和U盘
/proc/ 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息
/sys/ 内存挂载点目录,不可直接操作,数据直接写在目录中
/tmp/ 公用的临时文件存储点
/var/ 某些大文件的溢出区,比方说各种服务的日志文件
/opt/ option-选装,存放第三方厂商开发的程序,软件所有的数据在同一文件夹
/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件
网络基础
OSI七层网络协议
1.物理层 Physical Layer
一个(不一定可靠的)点对点数据直链。定义机械特性;电气特性;功能特性;规程特性
例如:线路、无线电、光纤
2.数据链路层 Data-Link Layer
一个可靠的点对点数据直链。检错与纠错(CRC码);多路访问;寻址
例如:以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP
3.网络层 Network Layer
在网络的各个节点之间进行地址分配、路由和(不一定可靠的)分发报文。路由( IP寻址);拥塞控制。
例如:IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、X.25
4.传输层 Transport Layer
在网络的各个节点之间可靠地分发数据包。所有传输遗留问题;复用;流量;可靠
例如:TCP、UDP、TLS、RTP、SCTP、SPX、ATP、IL
5.会话层 Session Layer
主机间通讯,管理应用程序之间的会话。规定通信时序 ;数据交换的定界、同步,创建检查点等
例如:ASAP、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets
6.表示层 Presentation Layer
数据表示形式,加密和解密,把机器相关的数据转换成独立于机器的数据。规定数据的格式化表示 ,数据格式的转换等
例如:XDR、ASN.1、SMB、AFP、NCP
7.应用层 Application Layer
网络进程到应用程序。针对特定应用规定各层协议、时序、表示等,进行封装 。在端系统中用软件来实现,如HTTP等
例如:HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP
TCP/IP参考模型
1 网络接口层 link layer
例如:以太网、Wi-Fi、MPLS等。
2 网络互连层 internet layer
对于TCP/IP来说这是因特网协议(IP)
3 传输层 transport layer
例如:TCP、UDP、RTP、SCTP
4 应用层 application layer
例如:HTTP、FTP、DNS
网络配置
配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0 IP相关参数配置
DEVICE="eth0" 网络卡代号,必须要 ifcfg-eth0 相对应
HWADDR="08:00:27:71:85:BD" 就是网络卡地址,若只有一张网卡,可省略此项目
NM_CONTROLLED="no" 不要受到其他软件的网络管理!
ONBOOT="yes" 是否默认启动此接口的意思
BOOTPROTO=none 取得IP的方式,其实关键词只有dhcp,手动可输入none
IPADDR=192.168.1.100 IP地址
NETMASK=255.255.255.0 子网掩码
GATEWAY=192.168.1.254 预设路由
NETWORK=192.168.1.0 该网段的第一个 IP,可省略
BROADCAST=192.168.1.255 广播地址啰,可省略
MTU=1500 最大传输单元的设定值,若不更改则 可省略
/etc/resolv.conf DNS配置文件
/etc/sysconfig/network 主机名相关配置
/etc/hosts hosts配置
网络配置和查询命令
dig 检查DNS设置
host 查看某个域名对应的IP
nslookup 互相查询域名和IP的对应
hostname 查看主机名
ifup 开启网络接口
ifdown 关闭网络接口
iwconfig 查看设置无线网卡
iwlist 利用无线网卡进行无线 AP 的侦测与取得相关的数据
dhclient 手动使用 DHCP 取得IP
ping
-c 后面接的是执行 ping 的次数,例如 -c 5 ;
-n 在输出数据时不进行 IP 与主机名的反查,直接使用 IP 输出(速度较快);
-s 发送出去的 ICMP 封包大小,预设为 56bytes,不过你可以放大此一数值;
-t TTL 的数值,预设是 255,每经过一个节点就会少一;
-W 等待响应对方主机的秒数。
-M 主要在侦测网络的 MTU 数值大小,两个常见的项目是:
do 代表传送一个 DF (Don't Fragment) 旗标,让封包不能重新拆包与打包;
dont 代表不要传送 DF 旗标,表示封包可以在其他主机上拆包与打包
状态意义
64 bytes ICMP的封包大小为64 bytes,这是默认值。可修改此值测试网络内最大的MTU
icmp_seq ICMP 所侦测进行的次数,第一次编号为 1 ;
ttl= 默认255或64,每经过一个带MAC的节点时,TTL减1
time= 响应时间,越小的响应时间,表示两部主机之间的网络联机越良好!
traceroute 分析两个主机之间的节点
-n 可以不必进行主机的名称解析,单纯用 IP ,速度较快!
-U 使用 UDP 的 port 33434 来进行侦测,这是默认的侦测协议;
-I 使用 ICMP 的方式来进行侦测;
-T 使用 TCP 来进行侦测,一般使用 port 80 测试
-w 若对方主机在几秒钟内没有回声就宣告不治...预设是 5 秒
-p port 若不想使用 UDP 与 TCP 的默认端口来侦测,可在此改变端口。
-i device 当前有多台设备,可指定其中一个
-g gate 与 -i 的参数相仿,只是 -g 后面接的是 gateway 的 IP 就是了。
netstat 查看网络信息
-r 列出路由表(route table),功能如同 route 这个指令;
-a 将目前系统上所有的连线、监听、Socket 数据都列出来
-t 列出 tcp 网络封包的数据
-u 列出 udp 网络封包的数据
-n 不以程序的服务名称,以端口 (port number) 来显示;
-l 列出目前正在网络监听 (listen) 的服务;
-p 列出该网络服务的程序 PID
-c 可以设定几秒钟后自动更新一次,例如 -c 5 每五秒更新一次网络状态的显示;
netstat -tlnp 列出目前系统中已开启的网络服务及PID
网络连接相关状态:
Proto 网络的封包协议,主要分为 TCP 与 UDP 封包,相关数据请参考服务器篇;
Recv-Q 非由使用者程序连结到此 socket 的复制的总 bytes 数;
Send-Q 非由远程主机传送过来的 acknowledged 总 bytes 数;
Local Address 本地端的 IP:port 情况
Foreign Address 远程主机的 IP:port 情况
State 连线状态;
ESTABLISED 已建立联机的状态;
SYN_SENT 发出主动联机 (SYN 标志) 的联机封包;
SYN_RECV 接收到一个要求联机的主动联机封包;
FIN_WAIT1 该插槽服务(socket)已中断,该联机正在断线当中;
FIN_WAIT2 该联机已挂断,但正在等待对方主机响应断线确认的封包;
TIME_WAIT 该联机已挂断,但 socket 还在网络上等待结束;
LISTEN 通常用在服务的监听 port !可使用『 -l 』参数查阅。
本机进程相关状态:
Proto 一般就是 unix 啦;
RefCnt 连接到此 socket 的程序数量;
Flags 连线的旗标;
Type socket 存取的类型。主要有确认连线的 STREAM 与不需确认的 DGRAM 两种;
State 若为 CONNECTED 表示多个程序之间已经连线创建。
Path 连接到此 socket 的相关程序的路径!或者是相关数据输出的路径。
nmap 扫描主机和开启的服务和端口
-sT 扫瞄 TCP 封包已建立的联机 connect() !
-sS 扫瞄 TCP 封包带有 SYN 卷标的数据
-sP 以 ping 的方式进行扫瞄
-sU 以 UDP 的封包格式进行扫瞄
-sO 以 IP 的协议 (protocol) 进行主机的扫瞄
-PT 使用 TCP 里头的 ping 的方式来进行扫瞄,可以获知目前有几部计算机存活(较常用)
-PI 使用实际的 ping (带有 ICMP 封包的) 来进行扫瞄
-p 这个是 port range ,例如 1024-, 80-1023, 30000-60000 等等的使用方式
[Hosts 地址与范围]:这个有趣多了,有几种类似的类型
192.168.1.100 :直接写入 HOST IP 而已,仅检查一部;
192.168.1.0/24 :为 C Class 的型态,
192.168.*.* :嘿嘿!则变为 B Class 的型态了!扫瞄的范围变广了
192.168.1.0-50,60-100,103,200 :这种是变形的主机范围
ifconfig 查询、设定网卡与 IP 网域等相关参数
up, down 启动 (up) 或关闭 (down) 该网络接口(不涉及任何参数)
mtu 可以设定不同的 MTU 数值,例如 mtu 1500 (单位为 byte)
netmask 就是子屏蔽网络
broadcast 就是广播地址啊
查询状态意义
eth0 网络卡的代号,也有 lo 这个 loopback ;
HWaddr 网络卡的硬件地址,俗称的 MAC 地址;
inet addr IPv4 的 IP 地址,后续的 Bcast, Mask 分别代表的是 Broadcast 与 netmask
inet6 addr 是 IPv6 的版本的 IP
MTU 每次MAC封包数据的最大字节数
RX 网络由启动到目前为止的封包接收量,packets封包数、errors错误量、dropped丢弃封包量
TX 与 RX 相反,为网络由启动到目前为止的传送情况;
collisions 代表封包碰撞的情况,如果发生太多次, 表示你的网络状况不太好;
txqueuelen 代表用来传输数据的缓冲区的储存长度;
RX bytes 总接收节总量
TX bytes 总发送字节总量
route 查看路由表
-n 不要使用通讯协议或主机名,直接使用 IP 或 port number;
-ee 使用更详细的信息来显示
add 新增路由
del 删除路由
-net 表示后面接的路由为一个网域;
-host 表示后面接的为连接到单部主机的路由;
netmask 与网域有关,可以设定 netmask 决定网域的大小;
gw gateway 的简写,后续接的是 IP 的数值喔,与 dev 不同;
dev 如果只是要指定由那一块网络卡联机出去,则使用这个设定,后面接 eth0 等
状态意义
Destination 其实就是 Network 的意思;
Gateway 该接口的 Gateway 那个 IP 啦!若为 0.0.0.0 表示不需要额外的 IP;
Genmask Netmask!与 Destination 组合成为一部主机或网域;
Flags 共有多个旗标可以来表示该网域或主机代表的意义:
U 该路由是启动的;
H 目标是一部主机 (IP) 而非网域;
G 需要透过外部的主机 (gateway) 来转递封包;
R 使用动态路由时,恢复路由信息的旗标;
D 已经由服务或转 port 功能设定为动态路由
M 路由已经被修改了;
! 这个路由将不会被接受(用来抵挡不安全的网域!)
Iface Interface (接口) 的意思。
ip 查询修改网络设置,比ifconfig route 更加全面
link 关于装置 (device) 的相关设定,包括 MTU, MAC 地址等等
addr/address 关于额外的 IP 协议,例如多 IP 的达成等等;
route 与路由有关的相关设定
arp 查看本机 MAC/IP 对应表
-n 将主机名以 IP 的型态显示
-d 将 hostname 的 hardware_address 由 ARP table 当中删除掉
-s 设定某个 IP 或 hostname 的 MAC 到 ARP table 当中
远程联机相关命令
telnet 通过telnet连接远程主机
lftp 自动化脚本FTP
ftp 从FTP服务器下载文件
连接主机后可执行的命令
help 提供需要的指令说明,可以常参考!
dir 显示远程服务器的目录内容 (文件名列表)
cd /pub 变换目录到 /pub 当中
get filename 下载单一档案,档名为 filename
mget filename* 下载多个档案,可使用通配符 *
put filename 上传 filename 这个档案到服务器上
delete file 删除主机上的 file 这个档案
mkdir dir 建立 dir 这个目录
lcd /home 切换『本地端主机』的工作目录
passive 启动或关闭 passive 模式
binary 数据传输模式设定为 binary 格式
bye 结束 ftp 软件的使用
links 文本网页浏览
进入程序后的快捷键
h history ,曾经浏览过的 URL 就显示到画面中
g Goto URL,按 g 后输入网页地址(URL) 如 :http://www.abc.edu/等
d download,将该链接数据下载到本机成为档案;
q Quit,离开 links 这个软件;
o Option,进入功能参数的设定值修改中,最终可写入 ~/.elinks/elinks.conf 中
wget 文本接口下载工具
--http-user 设置用户名
--http-password 设置密码
--quiet 不要显示 wget 在抓取数据时候的显示讯息
/etc/wgetrc 配置文件
tcpdump 抓包工具
-A 封包的内容以 ASCII 显示,通常用来捉取 WWW 的网页封包资料。
-e 使用资料连接层 (OSI 第二层) 的 MAC 封包数据来显示;
-n 直接以 IP 及 port number 显示,而非主机名与服务名称
-q 仅列出较为简短的封包信息,每一行的内容比较精简
-X 可以列出十六进制 (hex) 以及 ASCII 的封包内容,对于监听封包内容很有用
-i 后面接要『监听』的网络接口,例如 eth0, lo, ppp0 等等的界面;
-w 如果你要将监听所得的封包数据储存下来,用这个参数就对了!后面接文件名
-r 从后面接的文件将封包数据读出来。这个文件是由 -w 所制作出来的。
-c 监听的封包数,如果没有这个参数, tcpdump 会持续不断的监听。
nc 启动 TCP/UDP 封包的端口联机
-l 作为监听之用,亦即开启一个 port 来监听用户的联机;
-u 不使用 TCP 而是使用 UDP 作为联机的封包状态
路由
相关概念
静态路由:类似route指令来直接设定路由表到核心功能当中,网域有变化时需重新设定;
动态路由:透过类似Quagga或zebra软件的功能,动态的侦测网域的变化修改路由表信息。
NAT:(Network Address Translation)除了路由,多出Public IP与Private IP转换功能。
相关文件
/proc/sys/net/ipv4/ip_forward 查看是否启用数据包传递,1开启,0未开启
/etc/sysctl.conf 系统变量设置,可启动数据包传递功能
quagga 动态路由功能,相当于zebra + ripd
相关服务
zebra 这个 daemon 的功能在更新核心的路由规则;
RIP 这个 daemon 则是在向附近的其他 Router 沟通协调路由规则的传送与否。
配置文件
/etc/quagga/*.conf
防火墙设置
TCP wrappers
配置文件
/etc/hosts.allow
/etc/hosts.deny
语法
<service(program_name)> : <IP, domain, hostname>
<服务(亦即程序名称)> : <IP 或 域名 或 主机名>
例
ALL: 127.0.0.1 这就是本机全部的服务都接受
rsync: 192.168.1.0/255.255.255.0 10.0.0.100 多个IP可用空格相加
iptables
Linux核心默认包含的表格
raw 用于配置数据包,raw 中的数据包不会被系统跟踪。
filter 过滤器,主要跟进入 Linux 本机的封包有关,这个是默认的 table
INPUT 主要与想要进入我们 Linux 本机的封包有关
OUTPUT 与我们 Linux 本机所要送出的封包有关
FORWARD 可以转递数据包到后端的计算机中,与下列 nat table 相关性较高。
nat 是用于存放所有与防火墙相关操作的默认表。
PREROUTING 在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
POSTROUTING 在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
OUTPUT 与发送出去的封包有关
mangle 破坏者,这个表格主要是与特殊的封包的路由旗标有关
security 用于 强制访问控制 网络规则。
选项与参数
-t 后面接 table ,例如 nat 或 filter ,若省略此项目,则使用默认的 filter
-L 列出目前的 table 的规则
-n 不进行 IP 与 HOSTNAME 的反查,显示讯息的速度会快很多!
-v 列出更多的信息,包括通过该规则的封包总位数、相关的网络接口等
-F 清除所有的已订定的规则;
-X 杀掉所有使用者 "自定义" 的 chain (应该说的是 tables )啰;
-Z 将所有的 chain 的计数与流量统计都归零
-P 定义政策( Policy )
修改相关的选项与参数
-A 新增一条规则至最后
-I 插入一条规则至最前
-i 封包所进入的那个网络接口,例如 eth0, lo 等接口。需INPUT链配合;
-o 封包所传出的那个网络接口,需与 OUTPUT 链配合;
-p 协议:设定此规则适用于哪种封包格式,有tcp, udp, icmp 及 all 。
-s 来源 IP/网域:设定此规则之封包的来源项目,可指定单纯的 IP 或包括网域,例如:
IP 192.168.0.100
网域 192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。
若规范为 不允许 时,则加上 ! 即可,例如:
-s ! 192.168.100.0/24 表示不许 192.168.100.0/24 之封包来源;
-d 目标 IP/网域:同 -s ,只不过这里指的是目标的 IP 或网域。
--syn SYN标识
--sport 端口范围:限制来源的端口号码,端口号码可以是连续的,例如 1024:65535
--dport 端口范围:限制目标的端口号码。
-m 一些外挂模块,主要常见的有:state状态模块,mac网卡物理地址
--state 一些封包的状态,主要有:
INVALID 无效的封包,例如数据破损的封包状态
ESTABLISHED 已经联机成功的联机状态;
NEW 想要新建立联机的封包状态;
RELATED 这个最常用!表示这个封包是与我们主机发送出去的封包有关
-j 后面接动作,主要的动作有接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)及记录(LOG)
状态与意义
target 代表进行的动作, ACCEPT放行,REJECT拒绝,DROP丢弃
prot 代表使用的封包协议,主要有 tcp, udp 及 icmp 三种封包格式
opt 额外的选项说明
source 代表此规则是针对哪个 来源 IP 进行限制?
destination 代表此规则是针对哪个 目标 IP 进行限制?
IPv4 的核心管理功能
防止利用TCP SYN Flooding 的 DoS 攻击
相关文件
/proc/sys/net/ipv4/tcp_syncookies
原理
当启动 SYN Cookie 时,主机在发送 SYN/ACK 确认封包前,
会要求 Client 端在短时间内回复一个序号,
这个序号包含许多原本 SYN 封包内的信息,
包括 IP、port 等。若 Client 端可以回复正确的序号,
那么主机就确定该封包为可信的,因此会发送 SYN/ACK 封包,否则就不理会此一封包。
防止数据包很大的Ping攻击 ping flooding DoS 攻击
相关文件
/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
原理
可利用防火墙取消 ICMP 类型 8 的 ICMP 封包回应就是了
也可通过核心功能禁止ping
icmp_echo_ignore_broadcasts (仅有 ping broadcast 地址时才取消 ping 的回应)
icmp_echo_ignore_all (全部的 ping 都不回应)
针对不通的网络接口实现不通的参数设置
相关文件
/proc/sys/net/ipv4/conf/网络接口/*
##远程联机与服务器
SSH联机过程
1.服务器建立公钥档,文件保存在/etc/ssh/ssh_host*
2.客户端主动联机要求
3.服务器传送公钥档给客户端,保存在客户端~/.ssh/known_hosts
4.客户端保存/对比服务器的公钥数据及随机计算自己的公私钥:
5.回传客户端的公钥数据到服务器端:
6.开始双向加解密
ssh 命令联机选项与参数
-f 需要配合后面的 [指令] ,不登入远程主机直接发送一个指令过去而已;
-o 参数项目:主要的参数项目有:
ConnectTimeout=秒数 :联机等待的秒数,减少等待的时间
StrictHostKeyChecking=[yes|no|ask]:默认 ask,若要让 public key
主动加入 known_hosts ,则可以设定为 no 即可。
-p 指定端口,非默认22端口时使用
文件位置
/etc/ssh/sshd_config sshd服务配置文件
~/.ssh/known_hosts 服务器的公钥记录文件
sftp 通过SSH上传下载文件
针对Server的行为
cd PATH 变换目录
ls 列出目前下文件名
mkdir directory 建立目录
rmdir directory 删除目录
pwd 显示目前所在的目录
chgrp groupname PATH 更改档案或目录群组
chown username PATH 更改档案或目录拥有者
chmod 644 PATH 更改档案或目录的权限
ln oldname newname 建立连结档
rm PATH 删除档案或目录
rename oldname newname 更改档案或目录名称
exit 离开远程主机
针对本机的命令前需加l(L的小写)
lcd PATH 变换目录到本机的PATH 当中
lls 列出目前本机所在目录下的文件名
lmkdir 在本机建立目录
lpwd 显示目前所在的本机目录
文件上传下载相关行为
put [LocalDir] [ServerDir] 发送文件至远程服务器
put [LocalDir] 发送文件至远程服务器
get [ServerDir] [LocalDir] 从服务器下载文件
get [ServerDir] 从服务器下载文件
scp 档案的直接复制
-p 保留原本档案的权限数据;
-r 复制来源为目录时,可以复制整个目录 (含子目录)
-l 可以限制传输的速度,单位为 Kbits/s
sshd 服务配置
关于 SSH Server 的整体设定
Port 22 SSH服务的的端口,多行此字段用来开放多个端口
Protocol 2 选择的 SSH 协议版本,2,1可支持旧版
ListenAddress 0.0.0.0:22 监听地址和端口,可通过多行监听多个地址
PidFile /var/run/sshd.pid 放置 SSHD 这个 PID 的文件
LoginGraceTime 2m 在输入密码过程中,超时自动断线时间
Compression delayed 使用压缩传输,有yes,no与登入后压缩delayed
主机的 Private Key 放置的文件
HostKey /etc/ssh/ssh_host_key SSH version 1 使用的私钥
HostKey /etc/ssh/ssh_host_rsa_key SSH version 2 使用的 RSA 私钥
HostKey /etc/ssh/ssh_host_dsa_key SSH version 2 使用的 DSA 私钥
关于日志文件的信息数据放置与 daemon 的名称!
SyslogFacility AUTHPRIV 可用[DAEMON|USER|AUTH|LOCAL0~5]
LogLevel INFO 日志级别
登入设定部分
PermitRootLogin yes 是否允许 root 登入!默认yes,建议设定成 no!
StrictModes yes 是否让 sshd 去检查用户家目录或相关档案的权限数据,
PubkeyAuthentication yes 是否允许自行使用成对的密钥登入。仅version 2
AuthorizedKeysFile .ssh/authorized_keys 公钥文件位置
PasswordAuthentication yes 密码验证当然是需要的
PermitEmptyPasswords no 是否允许以空的密码登入
认证部分
RhostsAuthentication no 是否使用.rhosts(使用不安全)
IgnoreRhosts yes 是否取消使用 ~/.ssh/.rhosts 来做为认证
RhostsRSAAuthentication no 使用rhosts配合RSA进行认证,用于version 1
HostbasedAuthentication no 与上类似,用于version 2
IgnoreUserKnownHosts no 是否忽略家目录内的 ~/.ssh/known_hosts
ChallengeResponseAuthentication no 允许任何的密码认证
UsePAM yes 利用 PAM 管理使用者认证
与Kerberos有关的参数设定!
KerberosAuthentication no
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes
KerberosTgtPassing no
在 X-Window 底下使用的相关设定
X11Forwarding yes 是否允许窗口的数据透过 ssh 信道来传送
X11DisplayOffset 10
X11UseLocalhost yes
登入后的项目:
PrintMotd yes 登入后是否显示出一些信息呢?例如上次登入的时间、地点等等
PrintLastLog yes 显示上次登入的信息
TCPKeepAlive yes 保持TCP连接,连接过程中通过TCP包检测是否掉线。
UsePrivilegeSeparation yes 是否权限较低的程序来提供用户操作
MaxStartups 10 同时允许几个尚未登入的联机画面,密码界面
关于用户限制的设定项目:
DenyUsers * 设定受限制的使用者名称
DenyGroups test 设置受限制的使用组名称
关于 SFTP 服务与其他的设定项目!
Subsystem sftp /usr/lib/ssh/sftp-server
UseDNS yes 通过DNS反查用户主机是否合法
DHCP服务
工作方式
1.客户端:播UDP数据包发送搜索 DHCP 服务器,包的目标IP为255.255.255.255
2.服务器端:提供客户端网络相关的租约以供选择,IP根据MAC是否存在和是否静态来判断
3.客户端:决定选择的 DHCP 服务器提供的网络参数租约并回报服务器
4.服务器端:记录该次租约行为并回报客户端已确认的响应封包信息
相关文件
/etc/dhcp/dhcpd.conf 配置文件
/usr/sbin/dhcpd 二进制执行文件
/var/lib/dhcp/dhcpd.leases 客户端租约到期日文件
/var/lib/dhcp/dhclient* 客户端租约所记载的信息
/var/lib/dhcpd/dhcpd.leases 服务器记录客户端租约的文件
NFS文件服务器
RPC (Remote Procedure Call)
1.客户端会向服务器端的 RPC (port 111) 发出 NFS 档案存取功能的询问要求
2.服务器端找到对应的已注册的 NFS daemon 端口后,会回报给客户端
3.客户端了解正确的端口后,就可以直接与 NFS daemon 来联机
相关服务
rpc.nfsd 主要NFS服务,管理客户端是否能够使用服务器文件系统挂载信息等
rpc.mountd 管理 NFS 的文件系统,包括用户文件权限等
rpc.lockd 非必要,这个玩意儿可以用在管理档案的锁定 (lock) 用途
rpc.statd 非必要,可以用来检查档案的一致性,与 rpc.lockd 有关
所需软件
rpcbind RPC 主程序
nfs-utils NFS 主程序,提供rpc.nfsd 及 rpc.mountd
相关文件
/etc/exports 主要配置文件
/usr/sbin/exportfs NFS文件系统维护指令
/var/lib/nfs/*tab 分享资源的日志,etab记录权限设置,xtab记录客户端数据
/usr/sbin/showmount 客户端查询服务器分享资源的指令
配置说明
格式
[分享目录] [第一部主机(权限)] [可用主机名] [可用通配符]
例子
/tmp 192.168.100.0/24(ro) localhost(rw) *.ncku.edu.tw(ro,sync)
权限规则
rw 该目录分享的权限是可擦写(read-write)
ro 该目录分享的权限是可擦写(read-only)
sync 数据会同步写入到内存与硬盘中
async 数据会先暂存于内存当中,而非直接写入硬盘!
no_root_squash 允许客户端以root身份操作文件,不转换身份
root_squash 当客户端的身份为root时,自动转换为nfsnobody
all_squash 客户端任何身份都会被压缩为匿名用户,通常是nobody(nfsnobody)
anonuid anonymous匿名UID设定
anongid anonymous匿名GID设定
rpcinfo 显示RPC服务状态
-p 针对某 IP (未写则预设为本机) 显示出所有的 port 与 porgram 的信息;
-t 针对某主机的某支程序检查其 TCP 封包所在的软件版本;
-u 针对某主机的某支程序检查其 UDP 封包所在的软件版本;
showmount 查看NFS联机状态
-a 显示目前主机与客户端的 NFS 联机分享的状态;
-e 显示某部主机的 /etc/exports 所分享的目录数据。
exportfs 重新处理设置文件
-a 全部加载(或卸除)/etc/exports 档案内的设定
-r 重新加载/etc/exports 里面的设定,同时更新 /etc/exports 及 /var/lib/nfs/xtab
-u 卸除某一目录
-v 在 export 的时候,将分享的目录显示到屏幕上!
NIS 帐号管控服务器
NIS提供的数据
/etc/passwd 提供用户账号、UID、GID、家目录所在、Shell 等等
/etc/group 提供群组数据以及 GID 的对应,还有该群组的加入人员
/etc/hosts 主机名与 IP 的对应,常用于 private IP 的主机名对应
/etc/services 每一种服务 (daemons) 所对应的端口 (port number)
/etc/protocols 基础的 TCP/IP 封包协定,如 TCP, UDP, ICMP 等
/etc/rpc 每种 RPC 服务器所对应的程序号码
/var/yp/ypservers NIS 服务器所提供的数据库
NIS环境组件
NIS Master server 将档案建置成数据库,并提供 slave server 来更新;
NIS Slave server 以 Master server 的数据库作为本身的数据库来源;
NIS client 向 master/server 要求登入者的验证数据。
NIS运行流程
NIS Server (master/slave) 的运作程序:
1.NIS Master 先将本身的账号密码相关档案制作成为数据库档案;
2.NIS Master 可以主动的告知 NIS slave server 来更新;
3.NIS slave 亦可主动的前往 NIS master server 取得更新后的数据库档案;
4.若有账号密码的异动时,需要重新制作 database 与重新同步化 master/slave。
NIS Client 有任何登入查询的需求时:
1.NIS client 若有登入需求时,会先查询其本机的 /etc/passwd, /etc/shadow 等档案;
2.若在 NIS Client 本机找不到相关的账号数据,才开始向整个 NIS 网域的主机广播查询;
3.每部 NIS server (不论 master/slave) 都可以响应,基本上是『先响应者优先』。
NIS Server 设置
NIS 服务器所需要的软件
yp-tools 提供 NIS 相关的查寻指令功能
ypbind 提供 NIS Client 端的设定软件
ypserv 提供 NIS Server 端的设定软件
rpcbind 就是 RPC 一定需要的数据啊
NIS 服务器相关的配置文件
/etc/ypserv.conf 主要配置文件,可以规范 NIS 客户端是否可登入的权限。
/etc/hosts NIS server/client 需要主机和IP的对应关系
/etc/sysconfig/network 可以在这个档案内指定 NIS 的网域 (nisdomainname)。
/var/yp/Makefile NIS 数据库相关的配置文件
NIS 服务器提供的服务
/usr/sbin/ypserv NIS 服务器的主要提供服务;
/usr/sbin/rpc.yppasswdd 提供NIS 客户端用户通过yppasswd修改密码的服务
与账号密码的数据库有关的指令
/usr/lib64/yp/ypinit 建立数据库的指令(32位的系统/usr/lib/yp/ypinit);
/usr/bin/yppasswd NIS客户端有关,主要在让用户修改服务器上的密码。
NIS server 的设定与启动
1.设定 NIS 的域名 (NIS domain name)
vim /etc/sysconfig/network
NISDOMAIN=vbirdnis 设定NIS域名
YPSERV_ARGS="-p 1011" 设定NIS每次都启动在固定的端口
2.编辑主要配置文件 /etc/ypserv.conf
3.设定主机名与 IP 的对应 (/etc/hosts)
4.启动与观察所有相关的服务
5.处理账号并建立数据库
/usr/lib64/yp/ypinit -m
NIS Client端的设定
NIS client 端所需要的软件
ypbind 与 ypserv 互相沟通的客户端联机软件
yp-tools 是提供查询的软件
相关配置文件
/etc/sysconfig/network 设置NIS的域名
/etc/hosts 设置NIS服务器的IP与主机名对应关系
/etc/yp.conf ypbind 的主要配置文件,里面主要设定 NIS 服务器所在
/etc/sysconfig/authconfig 规范账号登入时的允许认证机制;
/etc/pam.d/system-auth 需要在 PAM 模块内加入 NIS 的支持
/etc/nsswitch.conf 这个文件可以规范账号密码与相关信息的查询顺序
相关程序
/usr/bin/yppasswd 更改你在 NIS database(NIS Server 所制作的数据库)的密码
/usr/bin/ypchsh 更改你在 NIS database 的 shell
/usr/bin/ypchfn 更改你在 NIS database 的一些用户的讯息
NIS client 的设定与启动(两种方式)
1,通过Linux distributions的配置工具,如CentOS的setup
2,手动修改配置如下配置文件
/etc/sysconfig/network 加入 NISDOMAIN 项目
/etc/nsswitch.conf 修改许多主机验证功能的顺序
/etc/sysconfig/authconfig CentOS 的认证机制
/etc/pam.d/system-auth 许多登入所需要的 PAM 认证过程
/etc/yp.conf 亦即是 ypbind 的配置文件
NIS client 端的检验
yptest 可测试NIS数据库
ypwhich 可检验数据库数量
ypcat 读取数据库内
NTP服务器
相关概念
GMT 格林威治时间为标准时间 (Greenwich Mean Time, GMT 时间)
UTC Coordinated Universal Time (协和标准时间),利用原子震荡周期计时。
NTP Network Time Protocol
DTSS Digital Time Synchronization Protocol
软件时钟 由 Linux 操作系统根据 1970/01/01 开始计算的总秒数;
硬件时钟 主机硬件系统上面的时钟,例如 BIOS 记录的时间;
NTP服务运行过程
1.首先,主机当然需要启动这个 daemon ,之后,
2.Client 会向 NTP Server 发送出调校时间的 message ,
3.然后 NTP Server 会送出目前的标准时间给 Client ,
4.Client 接收了来自 Server 的时间后,会据以调整自己的时间,就达成了网络校时咯!
相关程序
ntp 就是 NTP 服务器的主要软件啦,包括配置文件以及执行档等等。
tzdata 软件名称为『 Time Zone data 』的缩写,提供各时区对应的显示格式。
配置文件
/etc/ntp.conf NTP服务器的主要配置文件,也是唯一的一个;
/usr/share/zoneinfo/ 由tzdata所提供,为各时区的时间格式对应文件。
/etc/sysconfig/clock 设定时区与是否使用UTC时间钟的配置文件。
/etc/localtime 本地端的时间配置文件,复制clock指定的zoneinfo文件
相关命令
/bin/date 用于 Linux 时间 (软件时钟) 的修改与显示的指令;
/sbin/hwclock 用于 BIOS 时钟 (硬件时钟) 的修改与显示的指令。
/usr/sbin/ntpd 主要提供NTP服务的程序!配置文件为 /etc/ntp.conf
/usr/sbin/ntpdate 用于客户端的时间校正,不启动NTP仅需要矫正时间时使用
NTP服务配置 ntp.conf
通过restrict来管理权限控制
restrict [你的IP] mask [netmask_IP] [parameter]
parameter包括:
ignore 拒绝所有类型的NTP联机
nomodify 客户端不能使用ntpc与ntpq这两支程序来修改服务器的时间参数,
但客户端仍可透过这部主机来进行网络校时的;
noquery 不提供NTP的网络校时,客户端不能使用ntpq,ntpc指令查询时间服务器
notrap 不提供trap这个远程事件登录 (remote event logging) 的功能。
notrust 拒绝没有认证的客户端。
通过server设定上层 NTP 服务器
server [IP or hostname] [prefer]
通过driftfile记录时间差异
driftfile [可以被 ntpd 写入的目录与档案]
driftfile 后面接的档案需要使用完整路径文件名;
driftfile 后面接的档案需要使用完整路径文件名;
该档案不能是连结档;
该档案需要设定成 ntpd 这个 daemon 可以写入的权限。
该档案所记录的数值单位为:百万分之一秒 (ppm)。
ntpstat 查看ntp运行状态
ntpq NTP查询程序
-p 列出目前我们的 NTP 与相关的上层 NTP 的状态
remote 亦即是 NTP 主机的 IP 或主机名,*为正在起作用,+为候选
refid 参考的上一层 NTP 主机的地址
st 就是 stratum 阶层啰!
when 几秒钟前曾经做过时间同步化更新的动作;
poll 下一次更新在几秒钟之后;
reach 已经向上层 NTP 服务器要求更新的次数
delay 网络传输过程当中延迟的时间,单位为 10^(-6) 秒
offset 时间补偿的结果,单位与 10^(-3) 秒
jitter Linux 系统时间与 BIOS 硬件时间的差异时间, 单位为 10^(-6) 秒。
date 显示或设置系统时间
时间格式 MMDDhhmmYYYY
hwclock 显示或设置Bios时间
-r 亦即 read ,读出目前 BIOS 内的时间参数;
-w 亦即 write ,将目前的 Linux 系统时间写入 BIOS 当中啊!
ntpdate 手动进行网络校时
Samba服务器
相关概念
NFS Unix Like上面可以分享档案数据的file system
CIFS Windows网上邻居所使用的文件系统 (Common Internet File System)
SAMBA 支持Unix Like和Windows数据分享的文件系统 (Server Message Block - SMB)
NetBIOS 由IBM开发 (Network Basic Input/Output System)
SAMBA使用的daemons
nmbd 用来管理工作组、NetBIOS name 等等的解析。使用UDP协议,port 137,138
smbd 管理SAMBA主机分享的目录、档案与打印机等等。使用TCP协议,port 139,445
联机模式
peer/peer (对等模式)
domain model (主控模式)
SAMBA服务器设置
所需软件
samba 提供SMB服务器所需的各项服务程序 (smbd及nmbd)文件、
以及其他与 SAMBA 相关的 logrotate 配置文件及开机默认选项档案等;
samba-client 提供当Linux做为SAMBA Client端时,所需要的工具指令,
如挂载SAMBA文件格式的 mount.cifs、获取网邻相关树形图的smbtree等;
samba-common 这个软件提供的则是服务器与客户端都会使用到的数据,
包括SAMBA的主要配置文件(smb.conf)、语法检验指令(testparm)等;
相关配置文件
/etc/samba/smb.conf Samba的主要配置文件
/etc/samba/lmhosts lmhosts的NetBIOS name对应的IP文件,非必须,早期使用
/etc/sysconfig/samba 提供启动 smbd, nmbd 时,你还想要加入的相关服务参数。
/etc/samba/smbusers Windows与Linux在管理员与访客的帐号对应文件
/var/lib/samba/private/{passdb.tdb,secrets.tdb} 帐号密码数据库文件
/usr/share/doc/samba-<版本> 这个目录包含了SAMBA的所有相关的文档手册
可执行文件
Server
/usr/sbin/smbd 权限管理
/usr/sbin/nmbd NetBIOS name查询
/usr/bin/tdbdump 查看Samba TDB数据库内容。
/usr/bin/tdbtool 进入TBD数据库操作接口直接手动修改帐密参数。
/usr/bin/smbstatus 可以列出目前 Samba 的联机状况。
/usr/bin/smbpasswd 修改Samba账户的密码
/usr/bin/pdbedit 用来管理用户账号密码
/usr/bin/testparm 检查配置文件smb.conf的语法是否正确
Client
/sbin/mount.cifs 挂载Samba远程分享的文件
/usr/bin/smbclient 查看其他计算机分享的目录
/usr/bin/nmblookup 类似 nslookup,检查 NetBIOS name
/usr/bin/smbtree 查询工作组与计算机名称的树状目录分布图
Server配置流程
1.服务器整体设定方面:在smb.conf中设定工作组、NetBIOS name、密码使用状态等
2.规划准备分享的目录参数:在smb.conf中设定要分享的目录或装置以及可供使用的账号数据
3.建立所需要的文件系统:建立好分享出去的档案或装置,以及相关的权限参数
4.建立可用Samba的账号:建立所需的Linux实体账号,再以pdbedit建立使用Samba的密码
5.启动服务:启动 Samba 的 smbd, nmbd 服务,开始运转
smb.conf设置
参数意义
workgroup 工作组的名称:注意,主机群要相同;
netbios name 主机的 NetBIOS 名称啊,每部主机均不同;
server string 主机的简易说明,这个随便写即可。
log file 日志文件位置,文件名可能会使用变量处理
max log size 日志最大仅能到多少 Kbytes ,若大于该数字,则会被rotate掉。
security [share|user|domain]三选一,这三个设定值分别代表:
share 分享的数据不需要密码,大家均可使用 (没有安全性);
user 使用 SAMBA 服务器本身的密码数据库
domain 使用外部服务器的密码,需 password server = IP 的设置
encrypt passwords 是否需要加密
passdb backend 数据库格式
comment 只是这个目录的说明而已
path 分享目录
browseable 是否让所有的用户看到这个项目
writable 是否可以写入
create mask 新文件权限
directory mask 目录权限
writelist 使用者, @群组
smb.conf 内的可用变量
%S 目前的设定项目值
%m Client 端的 NetBIOS 主机名喔!
%M Client 端的 Internet 主机名喔!就是 HOSTNAME。
%L SAMBA 主机的 NetBIOS 主机名。
%H 用户的家目录。
%U 目前登入的使用者的使用者名称
%g 登入的使用者的组名。
%h 目前这部 SAMBA 主机的 HOSTNAME!不是 NetBIOS name
%I Client 的 IP
%T 目前的日期与时间
testparm 检查smb.conf的语法设定正确性
-v 检查完整的参数设定,连同默认值也会显示出来
pdbedit 管理用户账号密码
-L 列出目前在数据库当中的账号与 UID 等相关信息;
-v 需要搭配 -L 来执行,可列出更多的讯息,包括家目录等数据;
-w 需要搭配 -L 来执行,使用旧版的 smbpasswd 格式来显示数据;
-a 新增一个可使用 Samba 的账号,后面的账号需要在 /etc/passwd 内存在者;
-r 修改一个账号的相关信息,需搭配很多特殊参数,请 man pdbedit;
-x 删除一个可使用 Samba 的账号,可先用 -L 找到账号后再删除;
-m 后面接的是机器的代码 (machine account),与 domain model 有关!
smbpasswd 修改密码
Linux客户端设置
smbclient 查看计算机分享的目录
-L //[IP|hostname] [-U username] 查看指定计算机分享的目录
mount -t cifs 挂载远程分享的Samba目录
-t cifs //IP/分享资源 /挂载点 [-o options]
options 可用参数
username=你的登入账号:例如 username=smb1
password=你的登入密码:需要与上面 username 相对应啊!
iocharset=本机的语系编码方式,如 big5 或 utf8 等等;
codepage=远程主机的语系编码方式,例如繁体中文为cp950
nmblookup 查询 NetBIOS name 与 IP 及其他相关信息:
-S 除了查询 name 的 IP 之外,亦会找出该主机的分享资源与 MAC 等;
-U 后面一般可接 Windows 的主要名称管理服务器的 IP ,可与 -R 互用;
-R 与 -U 互用,以 Wins 服务器来查询某个 Netbios name;
-A 相对于其他的参数, -A 后面可接 IP ,藉 IP 来找出相对的 NetBIOS 数据;
smbtree 网络邻居浏览器显示模式!
-b 以广播的方式取代主要浏览器的查询
-D 仅列出工作组,不包括分享的资源
-S 列出工作组与该工作组下的计算机名称 (NetBIOS) 不包括各项资源目录
smbstatus 查看SAMBA的状态
-p 列出已经使用 SAMBA 联机的程序 PID ;
-S 列出已经被使用的资源共享状态;
-u 只列出某个用户相关的分享数据
代理服务器
需要的软件
squid
相关文件
/etc/squid/squid.conf squid的主要的配置文件
/etc/squid/mime.conf 设定squid所支持的mime文件格式
/usr/sbin/squid 提供 squid 的主程序啊!
/var/spool/squid 默认的 squid 缓存放置的目录。
/usr/lib64/squid/ 提供 squid 额外的控制模块,如影响认证密码方面的程序
DNS服务器
Client端配置
相关配置
/etc/hosts hostname 对应 IP 的文件;
/etc/resolv.conf 重要!就是 ISP 的 DNS 服务器 IP 记录处;
/etc/nsswitch.conf 决定先要使用 /etc/hosts 还是 /etc/resolv.conf
host 查询域名信息
-a 代表列出该主机所有的相关信息,包括 IP、TTL 与除错讯息等等
-l 如指定的domain允许allow-transfer,则列出所管理的所有主机名对应数据
server 不使用/etc/resolv.conf 而指定 DNS 来查询主机名与 IP 的对应
nslookup
dig
-t 指定查询PR类型
-x 反向解析,由IP地址解析域名
查询结果格式
[domain] [ttl] IN [[RR type] [RR data]]
[待查数据] [暂存时间(秒)] IN [[资源类型] [资源内容]]
RR类型
A IPv4 的 IP 地址
AAAA IPv6 的 IP 地址
NS 管理这个领域名的服务器主机名字.
SOA 管理这个领域名的七个重要参数(容后说明)
MX 顺序数字 接收邮件的服务器主机名字
CNAME 实际代表这个主机别名的主机名字.
Server搭建DNS
涉及软件
BIND Berkeley Internet Name Domain
配置文件
/etc/named.conf 我们的主配置文件啦
/etc/sysconfig/named 是否启动 chroot 及额外的参数,就由这个档案控制
/var/named/ 数据库档案默认放置在这个目录
/var/run/named named 这支程序执行时默认放置 pid-file 在此目录内
named.conf设置
listen-on 监听在这部主机系统上面的哪个网络接口。
directory 默认的zone file正反解析文件目录地址
allow-query 设置哪些客户端可以使用搭建的 DNS 服务
forward only 这个设定可以让你的 DNS 服务器仅进行 forward
forwarders 上层DNS服务器,可设置多个,每个IP以为 ";" 分号结尾