1
命令的执行状态结果
$? 0成功 1-255失败
程序执行有两类结果:
程序返回值:执行结果
程序状态结果:0,1-255
文本文件查看命令:
cat tac
more less tail head
more:
more [option] file...
-d:显示提示
+#:定位
less:
less [options] file...
head:
head -c 5 /etc/rc.d/rc.sysinit 前五个字节显示
head -n 5 /etc/rc.d/rc.sysinit
head -5 /etc/rc.d/rc.sysinit
head /etc/rc.d/rc.sysinit
tail:
-f:跟踪显示文件新追加内容
文件:metadata data
查看文件状态:stat
三个时间戳:
access time:简写atime 访问文件内容
modify time:mtime文件内容改变(数据)
change time:ctime元数据改变
touch:
touch [option] file...
-a:only atime
-m:only mtime
-t stamp:[[CC]YY]MMDDhhmm[.ss]
-c:文件不存在,不会创建
cp:
-a:归档 相当于-drp --preserve-all
--preserve[=ATTR_LIST]
mode:权限
ownership:属主属组
timestamp
links
xattr
content
all
-p:--preserve=mode,ownership,timestamp
-v:--verbose
bash基础特性:
1.alias 显示当前shell进程所有可用命令别名
2.alias NAME='VALUE'
命令行中定义别名,仅对当前shell有效,永久有效,需定义在配置文件中
仅对当前用户:~/.bashrc
所有用户:/etc/bashrc
source简写为.
\cp 执行原命令
合并标准输出和错误输出为同一个数据流进行重定向
&> 覆盖重定向
&>> 追加重定向
COMMAND > /pathtofile.out 2>&1
COMMAND >> /pathtofile.out 2>>&1
输入重定向:
tr:转换或删除字符
tr [option]... SET1[SET2]
HERE Documentation:<<
cat <<EOF
cat >>/path<<EOF
tee命令;
tee 【option】。。。。【file】。。。
文件处理工具:wc cut sort uniq
wc:
wc [option]..[file]..
-l:lines
-w:words
-c:characters
cut:
cut [option]..[file]...
-d:--delimiter
-f:--fields
--output-delimiter=STRING
sort:
sort [option]...[file]...
-f:--ignore-case fold lower case to upper case characters
-r:--reverse
-k:--key=POS1[,POS2]
start a key at POS1,end it at POS2
-t:--field-separator=SEP
use SEP instead of non-blank to blank transition
-u:--unique
with -c check for strict ordering;without -c,output only the first of an equal run
-n:--numeric-sort
compare according to string numerical value
-u:--unique
uniq:
uniq [option]...[file]...
-c:--count
prefix lines by the number of occurrences
-d:--repeated
only print duplicate lines
-u:--unique
only print unique lines
Note:连续且相同为重复
&>,&>>
2>&1,2>&1
输入重定向:<
显式使用:tr
隐式使用:。。。。。。
用户和组管理:
资源分配:
Authentication:认证
Authorization:授权
Accounting:审计 audition
token,identity(username,password)
Linux用户:Username(UID)
管理员:root 0
普通用户:
系统用户:1-499
守护进程(系统服务)获取系统资源进行权限分配
登录用户:500+
交互式登录
Linux组:Groupname(GID)
管理员组:root 0
普通用户组:
系统组:1-499
登录用户组:500+
用户的基本组(主组)
用户的附加组
Linux安全上下文:
以进程发起者身份运行:
进程能够访问的资源权限取决于进程发起者的身份。
linux用户和组文件:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/etc/passwd:
name:password(密码占位符):uid:gid:gecos(基本信息):directory:shell
/etc/group
group_name:password(密码占位符):GID:user_list(以当前组为附加组的用户列表,逗号为分隔符)
/etc/shadow
单向加密:提取数据指纹
md5:message digest,128bits.数据摘要
sha1:secure hash algorithm,160bits
sha224;sha256;sha384;sha512.
雪崩效应:初始条件的微小改变,将引起结果的巨大改变。
定长输出:
login name:encrypted password:date of last password change:mimimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field
!表示禁用
/etc/shells 可用shell 在/bin/*sh
用户和组相关命令:
useradd:
useradd [option] LOGIN
-u:--uid [UID_MIN,UID_MAX] 定义在:/etc/login.defs
-g:--gid 指明用户所属基本组,可为组名,也可为gid
-d:--home=HOME_DIR;--home=HOME_DIR
-c:--comment
-s:--shell=SHELL_DIR
-G:--groups=GROUP1[,GROUP2....]
-D:--default
默认值设定:/etc/default/useradd文件
useradd -D --shell=SHELL
groupadd:
groupadd [option]... group_name
-r:--system 创建系统组
-g:--gid=GID [GID_MIN,GID_MAX]
centos6:ID<500
centos7:ID<1000
查看用户相关ID信息:id
id [option]...[user]
-u:--user
-g:--group主 ID
-G:--groups
切换用户或以其他用户身份执行命令:su
su [options...] [-] [user[args...]]
切换用户方式:
su username:非登录式切换,不会读取用户的配置文件。
su - username:--login 登录式切换,读取用户的配置文件。
换个身份执行命令:
su [-] username --command='COMMAND';
选项:
su -l username su --login username;
:
usermod [options] login
--login='NEW_LOGIN'新登录名
--uid=UID
--gid=GID:-g 新的基本组
--groups=GROUP1[,GROUP2...[,GROUPN]]:-G 新的附加组,原来的附加组会被覆盖,若要保留原附加组,同时使用--append -a
--shell=SHELL:-s
--home=HOME_DIR:-d
the user's new login directory.
if the -m(--move-home) option is given,the contents of the current home directory will be moved to the new home directory.which is created if it does not already exist.
if the current home directory does not exist,the new home directory will not be created.
--login=NEW_LOGIN:-l
--lock:-L
--unlock:-U
--comment:-c
--password=PASSWORD:正常密码为加密后状态
passwd:
passwd [options]...login
--minimum=DAYS:密码最短使用周期
--maximum=DAYS:密码最长使用周期
--warning=DAYS:密码需变更前警告天数
--inactive=DAYS:密码过期后宽限天数
--lock:
--unlock:
--delete:
--expire:
--stdin:从标准输入接受用户密码
echo 'NEW_PASSWORD'|passwd --stdin USERNAME
userdel:
userdel [options]...login
--remove:-r删除用户家目录
groupmod:
groupmod [options]...GROUP_NAME
--gid=GID:the value of GID must be a non-negative decimal integer
--new-name=NEW_GROUP
groupdel:
groupdel [options]...group_name
gpasswd:
gpasswd [options]... GROUP_NAME
--add=USER:
--delete=USER:
newgrp:临时切换基本组
用户不属于此组,需组密码
其他命令:
chfn:change finger
chsh:change shell
finger
修改文件权限:chmod
chmod [option]... OCTAL-MODE FILE....
--recursive :-R递归修改权限
chmod --reference=FILE FILE
修改文件属主属组:
(only root)
chown [option]... [OWNER[:GROUP]] FILE..
usage:
--recursive
chown [OPTION]...--reference=FILE FILE...
文件,目录创建时的遮罩码:umask
FILE:666-umask
权限存在x权限,结果+1
DIR:777-umask
umask:查看
umask #:设定
本shell生效
magic number:魔数
grep:globle search regular expression and print out the line
基本正则表达式:BRE
扩展正则表达式:ERE
grep egrep fgrep
grep [options] PATTERN [FILES]
-v:--invert-match
-i:--ignore-case
-o:--only-matching
-q:--quiet --silent
-A:after
-B:before
-C:context
基本正则表达式:BRE
字符匹配:
.:匹配任意单个字符
[]:
[^]:
[:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]
匹配次数:
*:任意次(包括0次)
.*:任意长度的任意字符
\?:0次或一次
\+:至少一次
\{m,n\}:[m,n]次
\{m\}:m次
\{m,\}:
\{0,n\}:
例子:
abxy
xy
xay
xxxxxy
009y
位置锚定:
^:左侧,行首锚定
$:右侧,行尾锚定
^PATTERN$:整行要跟模式匹配
^$:空行
\<:词首锚定
\>:词尾锚定
\<PATTERN\>:单词锚定
分组锚定:
\(\):将括号内作为一个整体
分组括号中的模式所匹配到的内容会被正则表达式引擎记录于内部 变量中,这些变量依次为\1,\2,\3
\(ab\+\(xy\)*\)
\1:ab\+\(xy\)*
\2:\(xy\)*
后向引用:引用前面分组括号中的模式所匹配到的内容(非模式本身)
egrep和扩展正则表达式:
ERE:
支持或者: |
a|b:
C|cat:C或者 cat
(C|c)at:
[_[:alpha:]]:_或字母
使用echo显示绝对路径,egrep取出基名:
echo '/etc/yum.repos.d' | egrep -o '[^/]+/?'|cut --delimiter=/ --field=1
变量类型:
存储空间
存储格式
参与运输种类
字符型:
数值型:
整形
浮点型
弱类型:无需指定类型,均默认字符类型,参与运算会进行隐式类型转换,变量无需定义可以直接调用
例如bash
bash中变量种类;
根据变量生效范围:
本地变量:生效范围为当前shell,其他shell进程(包括子shell)均无效
环境变量:生效范围为当前shell及其子shell进程
局部变量:生效范围为当前shell进程的某代码段(通常指函数)
位置变量:$1,$2.....用于让脚本在脚本代码中调用通过命令行传递给他的参数
特殊变量:$?,$0,$*,$#,$@
本地变量:
变量赋值:name="value"
value
(1):直接字符串:name="value"
(2):变量引用:name="$value"
(3):命令引用:name=`COMMAND`,name=$(COMMAND)
变量引用:$(name) $name,通常省略()
状态结果:命令执行成功与否
执行结果:命令执行返回值
显示已定义的所有变量:
set
销毁本地变量:
unset name
环境变量:
变量声明,赋值:
export name=VALUE
declare -x name=VALUE
变量引用:
$name ${name}
显示所有环境变量:
export
env
printenv
销毁:
unset
bash内建环境变量:PATH,PS1,SHELL,HISTSIZE,HISTFILE,UID,HOME,PWD,OLD
位置变量:
$1,$2...........$n
shift [n] 踢掉参数
$*:一个整体,所有参数
$@:所有参数,分开
$#:参数个数
bash的配置文件:
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
个人配置:
~/.bash_profile
~/.bashrc
按功能划分:
profile类:为交互式shell提供配置
(1):定义环境变量
(2):运行命令,脚本
bashrc类:为非交互式shell提供配置
(1):定义命令别名
(2):定义本地变量
非绝对
shell登录方式:
交互式登录 :
直接通过终端
su - user su -l user
非交互式:
su user
执行脚本
图形界面打开的终端
bash中的算术运算:
+ - * / % **
实现:
1:let var=arithmetic expression
2:var=$[A E]
3:var=$((ae))
4:var=$(expr arg1 arg2 arg3)
*(乘法)可能需要转义
bash有内建随机数生成器$RANDOM
$[$RANDOM%20+1]
增强型赋值:
+=,-+,*=,/=,%=
let var%=2
条件测试:
专用测试表达式需要测试命令辅助完成
测试命令:
test EXPRESSION
[ EXPR ]
[[ EXPR ]]
EXPRESSION前后必须有space
bash测试类型:
数值测试:
-gt
-ge
-eq
-ne
-lt
-le
双目操作符,需要两个操作数
字符串测试:
==
!=
<:ASCII码值计较
>:ASCII码值比较
=~:PATTERN,字符串中是否包含PATTERN,包含为真
用于[[ ]]
-z "STRING":空字符串判断,空为真,不空为假
-n "STRING":空字符串判断,空为假,不空为真
字符串尽量使用引号
vim编辑器:
vi:visual interface
文本:ASCII Unicode
文本编辑器种类:
行编辑器:sed
全屏编辑器:nano,vi
打开方式:
+#:打开后处于第#行行首
+/PATTERN:打开后,处于第一个匹配到行的行首
模式转换:
命令模式-->输入模式
i:
a:
o:
I:
A:
O:
c:
C:
输入模式-->命令模式
ESC
字符间跳转:
h:左
l:右
k:上
j:下
#COMMAND:
单词间跳转:
w:下一单词词首
e:当前或下一单词词尾
b:当前或前一单词词首
#COMMAND
行首行尾:
^:
$:
0:绝对行首
行间移动:
#G:指定行
G:最后一行
gg:首行
vim编辑命令:
字符编辑:
x:删除光标处字符
#x:
xp:交换光标处字符及其后面字符的位置
d:
d$:
d^:
d0:
dw:
de:
db:
#COMMAND: 5dd
dd:
D:
粘贴(p:paste);
p:
P:
复制:y yank
y:
y^
y$
y0
yy:
#yy:
替换:r replace
ra:替换光标字符为a
3ra:
改变:c change
c$
c^
c0
cw
ce
cb
cc
#cc
可视化模式:
v:字符选定
V:行选定
撤销此前编辑:
u:undo
#u
反撤销:
^+r:restore
重复前一个编辑操作:
.
翻屏操作:
^+f:forward
^+b:backword
vimtutor
VIM:末行模式:
内建命令行接口
1:
地址界定:
:start,end
#
#,#
#,+#
.:当前行
$
.,$-1
%:全文
#,/PATTERN/
/PATTERN/,$
使用方式:后跟命令
d
y
w 保存到一个文件中
r /PATH_TO_FILE
2:查找
/PATTERN:
?PATTERN:
n:
N:
3:查找替换
s/查找内容/替换内容/修饰符
替换内容可以使用\1,\2后向引用符号,"&"表示查找的全部内容
修饰符:
i:
g:
多文件模式:
vim : FILES
:next
:prev
:last
:first
:wall
:qall
窗口分隔模式:
vim -o/O FILES
窗口切换:Ctrl+w
单文件窗口分隔:
Ctrl+w:再按s(split)水平分割
vim配置文件:
/etc/virc 全局
~/.vimrc 个人
末行模式:当前shell进程
1:行号:
显示:set number ,set nu
取消显示:set nonumber ,set nonu
2:括号匹配:
set showmatch:set sm
set noshowmatch:set nosm
3:自动缩进:
set ai:set autoindent
set noai:set noautoindent
4:高亮显示:
set hlsearch
set nohlsearch
5:语法高亮:
syntax on
syntax off
6:忽略字符大小写:
set ic:ignore case
set noic:
文件测试:
存在性测试:
-a:
-e: true if file exist
存在性和类别测试:
-b: block special file
-c: character special file
-d: directory
-f: regular file
-L:a symbolic link
-p:a named pipe(FIFO)
-r:readable
-w:writable
-x:executable
-S:a socket
文件特殊权限:
-k:its "sticky" bit is set
-g:is set group id
-u:its set-user-id bit is set
-s:has a size greater than zero
文件打开:
-t:fd true if file descriptor fd is open and refers to a terminal
双目测试:
file1 -ef file2 :true if file1 and file2 refer to the same device and inode number
file1 -nt file2:true if file1 is newer than file2
file1 -od file2:true fi file1 is older than file2
组合条件测试:
逻辑运算:
COMMAND1 || COMMAND2
COMMAND1 && COMMAND2
!COMMAND
[ -e FILE ] || [ -r FILE ]
第二种方法:
[ expression -a expression ]
文件查找:
locate find
locate:非实时查找,数据库查找
find:实时查找
locate:
依赖于事先构建的索引,索引的构建是在系统空闲时自动构建(周期性任务),手动更新数据库(updatedb)
索引的构建需遍历整个文件系统,大量消耗资源
find:
实时查找,遍历指定路径下整个文件系统完成查找:
find [options] [查找路径] [查找条件] [处理动作]
查找路径:指定目标路径,默认当前目录
查找条件:可以文件名,大小,类型,权限为标准,默认指定路径下所有文件
处理动作:对符合条件文件作何动作,默认输出到屏幕
查找条件:
-name:"文件名",支持glob
*,?,[],[^]
-iname "文件名" 忽略大小写
-regex "PATTERN",以PATTERN匹配整个文件路径字符串,不仅仅是文件名
根据属主,属组:
-user USERNAME:
-group GROUPNAME:
cp /etc/crontab /tmp
chown root:user1 /tmp/crontab
find /tmp -group user1 -ls
-uid UID:
-nouser:
-nogroup:
根据文件类型:
-type TYPE
-type f
-type d
-type l
-type b
-type c
-type p
-type s
find /tmp \( -nouser -o -nogroup \) -ls
find /tmp -not -user root -ls
组合条件:
-a
-o:
-not:!
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
找/tmp下,属主不是root,文件名不是fstab的文件
find /tmp \( -not -user root -a -not -name fstab \) -ls
find /tmp -not \( -user root -o -name fstab \) -ls
根据文件size查找:
-size [+|-]#UNIT
UNIT: k M G
#UNIT:(#-1,#]
-#UNIT:[0,#-1]
+#UNIT:(#,+∞)
根据文件时间戳:
以"day"为单位:
-atime:
[+|-]#
#:[#,#+1)
+#:[#+1,∞)
-#:[0,#)
-mtime:
-ctime:
以"minute"为单位:
-amin
-mmin
-cmin
根据权限查找:
-perm [+|-]MODE
处理动作:
-print:默认动作,输出到屏幕
-delete
-ls:类似ll
-fls: 后跟路径 找到所有文件长格式信息保存到指定文件
-ok COMMAND {} \;
-exec COMMAND {} \;
find |xargs COMMAND管道一个一个传递找到的文件
SUID:
chmod u+s FILE
chmod u-s FILE
SGID:
默认情况下,用户创建文件时,文件属组为用户基本组,
目录被设定SGID后,对此目录有写权限的用户,在此目录创建的文件所属的组为目录的属组
权限设定:
chmod g+s DIR
chmod g-s DIR
sticky:
对于一个多人可写目录,如果设置sticky,则每个用户只能删除自己的文件:
权限设定:
chmod o+t DIR
chmod o-t DIR
SUID SGID STICKY:映射为一个八进制
chmod 3777 /DIR
几个权限位映射:
SUID:user 占据属主的执行权限位
s:属主有x
S:属主无x
SGID:group 占据属组的执行权限位
s:属组有x
S:属组无x
Sticky:other 占据other执行权限位
t:other有x
T:other无x
linux磁盘管理:
I/O Ports: I/O设备地址
一切皆文件
open(),close(),read(),write()
块设备:block 存取单位:块.磁盘
字符设备:char 存取单位:字符 键盘
设备文件:关联至一个设备驱动程序,进而能够跟与之对应的硬件设备通信
设备号码;
主设备号:major number,标识设备类型
次设备号:minor number,标识同一类型下的不同设备
0磁道0扇区:512bytes
MBR:master boot record
446bytes:boot loader程序
64bytes:磁盘分区表
16bytes:标识一个分区
2bytes:MBR有效性标识 55AA
分区管理工具:
fdisk parted sfdisk
fdisk -l [-u] [device]
fdisk device
子命令:
p:print the partition table
n:new
d:delete
w:write table to disk and exit
m:menu
l:list known partition tables
q:quit
t:change a partition's system id
查看内核是否已经识别新的分区:
cat /proc/partitions
通知内核重新读取硬盘分区表:
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE
Linux文件系统管理:
Linux文件系统:ext2 ext3 ext4 btrfs xfs swap jfs reiserfs
window:FAT32 NTFS
Unix:FFS UFS JFS2
网络文件系统:NFS CIFS
集群文件系统:GFS2 OCFS2
分布式文件系统:ceph
是否支持journal功能
日志文件系统:xfs ext4........
非日志文件系统:vfat ext2
文件系统组成部分:
内核中的模块:文件系统需在内核工作
用户空间的管理工具:内核中文件系统模块的用户级接口 mkfs.ext4 mkfs.xfs mkfs.vfat
Linux的虚拟文件系统:VFS
创建文件系统:
mkfs.FS_TYPE [-L 卷标] [-f 强制] /dev/DEVICE
ext4
xfs
btrfs
vfat
blkid /dev/DEVICE查看设备信息
print/locate block device attributes
-U UUID:根据指定UUID查找对应设备
-L LABEL:根据指定label查找对应设备
cat /proc/partitions
cat /proc/filesystems
(2)mkfs -t -f -L "LABLE" /dev/DEVICE
(3)mke2fs:ext系列文件系统专用工具
-t {ext2|ext3|ext4}
-b {1024|2048|4096}块大小,文件系统格式化最小单位,一般为2的次方个sector
-L LABEL
-i # 为数据空间中多少个字节创建一个iNode,不应小于block
-N # 为数据空间创建多少个iNode
-m # 为管理人员预留的空间占比
-O FEATURE 启用指定特性
-O ^FEATURE关闭指定特性
e2label:查看设置ext文件系统LABEL
e2label DEVICE [LABEL]
iNode:元数据条目,每个元数据对应一个iNode
(4)tune2fs:重新设定ext系列文件系统可调整参数值
-l:查看超级块信息 super block
(5)dumpe2fs:查看超级块信息
-h:
(6)mkswap 创建交换分区
mkswap [options] /dev/DEVICE
-L LABEL
调整其分区ID为82
文件系统检测:
fsck:开机后,手动检测文件系统
fsck.FS_TYPE
-a:自动修复错误
-r:交互式修复
要与分区文件系统类型相同
U盘要在Windows,Linux通用,要格式化成vfat系统
mkfs.vfat
挂载设备:mount umount
mount DEVICE MOUNT_POINT
mount:显示当前系统已挂载的所有设备(读取/etc/mtab不是去读/proc/mounts)
cat /proc/mounts
cat /etc/mtab
DEVICE:要挂载的设备
(1)设备文件 例如/dev/sda2
(2)卷标 -L 'LABEL' -L 'MYLABEL'
(3)UUID -U 'UUID'
(4)伪文件系统名称(系统支持) /proc /sysfs /devtmpfs /configfs
挂载点:
常用选项:
-t vfstype(虚拟文件系统),要挂载设备上文件系统类型,可不设置,mount会自动调用blkid命令检测
-r:readonly
-w:read and write
-n:不更新/etc/mtab
-a:自动挂载所有支持自动挂载的设备(定义在/etc/fstab文件中,且挂载选项中有"自动挂载"功能的)
-B:--bind 绑定目录到另一个目录上
cow:copy on write 写时复制
内存中数据变更后,立即写到磁盘称为同步i/o
-o options:(挂载文件系统自身的选项)
async:异步模式
sync:同步模式
atime/noatime:是否每次访问文件都更改atime时间戳(包含目录和文件)
diratime/nodiratime:目录的访问时间戳
auto/noauto:是否支持自动挂载
exec/noexec:是否支持将挂载文件系统上的程序运行为进程
dev/nodev:是否支持在此文件系统上使用设备文件
suid/nosuid:
remount:重新挂载
ro
rw
user/nouser:是否允许普通用户挂载此设备
acl:启用此文件系统上acl功能access control list
上述选项可同时使用,使用逗号分隔
默认挂载选项defaults
rw,suid,dev,exec,auto,nouser,async
umount:
umount:DEVICE
umount:MOUNT_POINT
查看正在访问指定文件系统的进程
fuser -v MOUNT_POINT
终止正在访问指定文件系统的进程
fuser -km MOUNT_POINT
挂载交换分区:
启用:swapon
swapon [options] [device]
-a:激活所有交换分区
-p:priority指定优先级
禁用:swapoff
swapoff [options] [device]
buffer 缓冲 cache缓存
内存空间使用状态:
free [options]
free -m:以MB为单位
free -g:以GB为单位
文件系统占用空间查看工具:
df:
-h:human-readable
-i:inodes instead of blocks
-P:portability:use the POSIX output format以POSIX兼容格式输出
查看目录总体空间占用状态:
du: disk use
du [options] DIR
-h:human-readable
-s:summary
文件挂载配置文件:/etc/fstab
每行定义一个要挂载的文件系统
要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项 转储频率(备份) 自检频率
要挂载的设备或伪文件系统:
设备文件 LABEL(LABEL="") UUID(UUID="") 伪文件系统名称(proc sysfs)
挂载选项:
defaults
转储频率:
0:不备份
1:每天备份
2:每两天备份
自检次序:
0:不自检
1:第一自检,通常为rootfs使用
2:
inode: index node 索引节点
地址指针:
直接指针:iNode存储的为blocks的直接地址
间接指针:
三级指针
iNode bitmap:对位标识每个iNode占用与否的状态信息
链接文件:
硬链接:
不能对目录
不能跨分区
指向同一个iNode的多个不同路径,创建文件的硬链接就是为该iNode创建新的引用路径,因此该iNode的引用计数会加一
符号链接:
可以对目录
可以跨分区
inode存放的是指向另一个文件的路径,大小为指向路径字符串长度,不增加或减少目标文件iNode引用计数
ln [-sv] SRC DEST
-s:symbolic link
-v:verbose
bash脚本编程用户交互:
read:
read [options] [name]
-p:prompt output the string PROMPT without a trailing newline before attempting to read
read -p "name:" name
-t:timeout read -p "name:" -t 5 name
[ -z "$name" ] && name='default'
bash -n
bash -x
RAID:
redundant arrays of independent disks
提高IO能力:
磁盘并行读写
提高可靠性:
磁盘冗余实现
级别:多块磁盘在一起的组织形式不同
RAID实现方式:
外接式磁盘阵列:通过扩展卡提供适配能力
内置式:主板集成RAID控制器
sofaware实现
级别:
RAID0:条带卷strip
RAID1:镜像卷mirror
..
RAID5:
RAID6:
RAID10:
RAID01:
RAID50:
Centos6上软件RAID实现方式:
结合内核中md(multi devices)
mdadm:模式化工具
语法格式:mdadm [mode] <raiddevices> [options] <component-devices>
支持RAID级别:LINEAR(JBOD:Just a bunch of disks),RAID0,RAID1,RAID4,RAID5,RAID6,RAID10
mode:
-C创建
-A装配
-F监控follow
管理-f -r -a
<raiddevices> /dev/md#
<component-devices>:任意块设备
cat /proc/mdstat 查看所有md类型设备的状态
-C:
-n #:使用#个块设备来创建此RAID
-l #:创建RAID级别
-a {yes|no}自动创建目标RAID设备的设备文件
-c (chunk_size)块大小
-x :空闲盘个数
-D:
显示RAID详细信息
mdadm -D /dev/md0
管理模式:
-f:set faulty
-a:添加磁盘
-r:删除磁盘
观察md状态
cat /proc/mdstat
停止md设备
mdadm -S /dev/md#
mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb{6,7,8,9}
cat /proc/mdstat
mkfs.ext4 /dev/md0
mkdir /mdadm
mount /dev/md0 /mdadm
cat /proc/mounts
df -lh
mdadm -D /dev/md0查看具体信息
mdadm /dev/md0 -f /dev/sdb6 (set-faulty)
watch -n 1 'cat /proc/mdstat'
mdadm /dev/md0 -r /dev/sdb6
mdadm -D /dev/md0
mdadm /dev/md0 -a /dev/sdb6
watch命令:
-n #:刷新间隔,单位S
watch -n 1 'ifconfig ens33'
LVM2:
logical Volume Manager逻辑卷管理
dm:device mapper将一个或多个底层设备组织成一个逻辑设备的模块
/dev/dm-#
/dev/dm-0
/dev/mapper/centos-root
/dev/mapper/centos-swap/
/dev/centos/root
/dev/centos/swap
/dev/mapper/VG_NAME-LV_NAME
/dev/mapper/vg_node1-lv_root
/dev/VG_NAME/LV_NAME
/dev/vg_node1/lv_root
PV管理工具:
pvs:简要pv信息显示
pvdisplay:显示详细pv信息
pvcreate /dev/DEVICE
VG管理工具:
vgs
vgdisplay
vgcreate [-s #(kKmMgGtTpPeE)] VolumeGroupName PhysicalDevicePath
vgextend VolumeGroupName PhysicalDevicePath
vgreduce VolumeGroupName PhysicalDevicePath
先做pvmove操作,移除pv上的数据
LV管理工具:
lvs
lvdisplay
lvcreate -L #[mMgGtT] -n name VolumeGroup
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
扩展逻辑卷:
lvextend -L [+]#[单位] /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME
lvcreate -L 20G -n LV_NAME VG_NAME
mke2fs -t ext4 -b 2048 -L 'LABEL' /dev/VG_NAME/LV_NAME
lvextend -L 25G /dev/VG_NAME/LV_NAME
df -lhP
resize2fs /dev/VG_NAME/LV_NAME
df -lhP
缩减:
umount /dev/VG_NAME/LV_NAME
e2fsck -f /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME #[单位]
lvreduce -L #[单位] /dev/VG_NAME/LV_NAME
快照:snapshot
lvcreate -L #[mMgGtTpP] -s -n snapshot_LV_NAME -p original_LV_NAME
-L:--size
-s:--snapshot
-n:--name
-p:--permission r rw
文件系统挂载使用:
挂载光盘设备文件:
SATA:/dev/sr0
符号链接文件
/dev/cdrom
mount -r /dev/sr0 /media/cdrom
dd:conver and copy a file
工作在底层,block上复制,效率高,常用于磁盘复制
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=#:block size,复制单元大小
count=#:复制多少个单元
磁盘拷贝:
dd if=/dev/sda of=/dev/sdb
备份MBR
dd if=/dev/sda of=/tmp/MBR.bak bs=512 count=1
清除MBR
dd if=/dev/zero of=/dev/sda bs=512 count=1
破坏BootLoader
dd if=/dev/zero of=/dev/sda bs=256 count=1
关闭默认图形界面:
systemctl set-default multi-user.target
btrfs文件系统:
B tree fs GPL cow写时复制
核心特性:
多物理卷支持,btrfs可由多个底层物理卷组成,支持RAID,联机添加,删除,修改
写时复制更新机制(cow),复制更新替换指针,而非原地修改
数据及元数据校验码,checksum
子卷,sum_volume
快照,快照的快照
透明压缩
mkfs.btrfs -L(--label) -m(--metadata) -d(--data) -O(--features) mkfs.btrfs -O list-all
-d:RAID0 RAID 1 RAID 5 RAID 6 RAID 10,single
mkfs.btrfs -O list-all
mkfs.btrfs -L "label" /dev/sdb /dev/sdc
btrfs filesystem show
blkid /dev/sd[bc]
mkdir DIR
mount -t btrfs -o compress /dev/sdb DIR(/dev/sdb或/dev/sdc都可)
btrfs filesystem show DIR
btrfs filesystem resize -500M DIR
btrfs filesystem df DIR
DIR变成一个btrfs文件系统
btrfs filesystem resize +500M DIR
btrfs filesystem resize max DIR
btrfs device add /dev/sdd DIR
btrfs balance status DIR
btrfs balance start DIR
btrfs balance pause DIR
btrfs balance resume DIR
btrfs device delete /dev/sdb DIR
btrfs filesystem show DIR
btrfs filesystem df DIR查看DIR此btrfs文件系统详细信息
btrfs balance start -dconvert=raid5 /compress
btrfs balance start -mconvert=raid0 /compress
btrfs balance start -sconvert=raid1 /compress
btrfs filesystem show DIR查看有几块硬盘
属性查看:
btrfs filesystem show
挂载文件系统
mount -t btrfs /dev/sdb MOUNT_POINT
透明压缩机制
mount -o compress={lzo|zlib} DEVICE MOUNT_POINT
挂载子卷
mount -o subvol=子卷名称 DEVICE MOUNT_POINT
通过子卷id挂载
1:显示子卷id
btrfs subvolume list MOUNT_POINT
2:挂载
mount -o subvolid=id DEVICE MOUNT_POINT
创建子卷
btrfs subvolume create /compress/子卷
列出子卷
btrfs subvolume list /compress
显示挂载的子卷
btrfs subvolume show MOUNT_POINT
删除子卷
btrfs subvolume delete /compress/子卷
创建子卷快照
btrfs subvolume snapshot /compress/子卷 /compress/子卷_snapshot
删除子卷快照
btrfs subvolume delete /compress/子卷_snapshot
创建单个文件快照
在btrfs文件系统中使用
cp --reflink grub2.cfg grub2.cfg_snapshot
文件系统转换
btrfs-convert /dev/sdb
btrfs-convert -r /dev/sdb rollback
压缩解压缩,归档工具:
gzip/gunzip .gz
bzip2/bunzip2 .bz2
xz/unxz .xz
zip/unzip
tar
1.gzip/gunzip
gzip [option]...file...
-c:--stdout
-d:--decompress
-#:1-9压缩比
zcat:
2.bzip2/bunzip2/bzcat
bzip2 [option]...file...
-c:--stdout
-d:
-k:--keep
-q:--quiet
3.xz/unxz/xzcat
-c:
-k:
-#:
xzcat
4.tar tape archive
tar -cf archive.tar foo bar
create archive.tar from files foo bar
tar -tvf archive.tar
tar -xvf archive.tar
extract all files from archive.tar
-x :extract
-t :list
--delete
tar --delete a/consortium -vf a.tar
--append
-j :--bzip2
-J :--xz
-z :--bzip
-C :--directory=DIR默认当前目录
for循环:
for 变量名 in 列表;do
循环体
done
列表生产方式:
(1):直接给出列表
(2):整数列表
{first..end}
$(seq first increment last)
(3):可以返回列表的命令
$(COMMAND)
$(ls /var)
(4):glob
for i in /var/*;
查看二进制程序依赖的库文件
ldd /bin/ls
管理查看本机内存装载的库文件
ldconfig -p
配置文件:/etc/ld.so.conf,/etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
程序包管理:
将编译好的应用程序组成文件打包成一个或几个程序包文件,方便快捷实现程序的安装,卸载,查询,升级和校验等管理操作
1.程序的组成清单(包独有)
文件清单
安装或卸载时的脚本
2.数据库(公共)
程序包名称及版本
依赖关系
功能说明
安装生成的各文件路径及校验码信息
Centos系统上RPM命令管理程序包:
安装:
rpm {-i|-install} [install-options] PACKAGE_FILE...
-i:
-v:verbose
-vv:
-h:以#表示程序包管理执行进度
rpm -ivh PACKAGE_FILE...
[install-options]
--test:测试安装,不真正执行安装过程,dry run模式
--nodeps:忽略依赖关系
--replacepkgs:重新安装
--ignoreos:
--nodigest:
--nosignature
--noscripts: pre post preun postun
--nopre --nopost --nopreun --nopostun
--oldpackage
升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE.....
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
upgrade:有旧版程序包,升级,无,安装
freshen:有旧版程序包,升级,无,不执行任何操作
rpm -Uvh PACKAGE_FILE
rpm -Fvh PACKAGE_FILE
--oldpackage:降级
--force:强制升级(降级)
注意:
1:不要对内核做升级操作,Linux支持多内核版本并存,直接安装新内核
2:原程序包的配置文件安装后被修改,升级时,新版本提供的同一个配置文件并不会直接覆盖老版本配置文件,而把新版本的配置文件重命名后(FILENAME.rpmnew)保留
查询:
rpm {-q|--query} [select-options] [query-options]
[select-options]
-a:--all rpm -qa rpm -qa|grep -i php rpm -qa php*
所有包
-f:--file query package owning file 查询指定的文件由哪个程序包安装生成
rpm -q --whatprovides python
rpm -q --whatrequires python
rpm -q --package 未安装程序包
[query-options]
--changelog:查询rpm包的changlog
--configfiles:-c
--provides:list capabilities this package provides
--requires:list capabilities on which this package depends
--scripts:
--state:
--conflicts
--docfiles
--info:-i
--list:-l
用法:
-qi PACKAGE, -qf /etc/fstab -qc PACKAGE -ql PACKAGE -qd PACKAGE
-qpi PACKAGE_FILE -qpl PACKAGE_FILE 未安装的源码包
-qa
卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE
校验:
rpm {-V|--verify} [select-options] [verify-options]
--nodeps
--nodigest
--nofiles:don't verify any attributes of package files
--noscripts
--nosignature
--nosize
--nouser
--nogroup
S file size differs
M mode differs(include permissions and file type)
S digest (formerly MD5 sum) differs
D device major/minor number mismatch
L readlink path mismatch
U user ownership differs
G group ownership differs
T mtime differs
P capabilities differ
导入所需公钥:
查询公钥:
rpm -qa|grep gpg-pubkey
删除相关公钥
rpm -e gpg-pubkey
rpm -e --allmatches gpg
导入公钥
rpm --import /PATH/pubkey
RPM-GPG-KEY-CentOS-7
/var/lib用来存储查询的状态信息,这个状态信息用来存储程序包所依赖的数据文件.而不是库文件
数据库重建:
rpm {--initdb|--rebuilddb}
initdb:初始化
事先不存在数据库,则重建,存在,不执行任何操作
rebuilddb:重建
无论存在与否,重新创建db
yum客户端:
配置文件:
/etc/ yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置
仓库指向的含义:
[repositoryID]
name=name of repository
baseurl=url://path/to/repository
enabled={1|0}
gpgcheck={1|0}
gpgkey=url
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enablegroups={1|0}
failovermethod={roundrobin|priority}
默认roundrobin
cost=默认1000
yum [options] [command] [package ...]
显示仓库列表
repolist
yum repolist
yum repolist {all|enabled|disabled}
显示程序包:
list
yum list all
yum list available:list all packages available to en installed
yum list updates: list all packages with updates available in the yum repositories
yum list installed:
安装程序包:
install
yum install [PACKAGES]
升级程序包:
yum update [packages]
检查可用升级
yum check-update
卸载
yum remove | erase [packages]
查看
yum info packages
查看指定特性(文件)由哪个程序包提供
yum provides .....
清理本地缓存
yum clean [package|metadata|expire-cache|rpmdb|plugins|all]
搜索
yum search string
显示依赖关系
yum deplist package
查看yum 事务历史
yum history
yum history {info|list|summary|stats|packages-list [packages]}
包组管理相关命令:
yum grouplist
yum groupinstall
yum groupupdate
yum groupremove
yum groupinfo
yum的命令行选项:
--nogpgcheck:
--noplugins
yum的repo配置文件中可以用的变量
$releasever:当前OS发行主版本号
$arch:平台
$basearch:基础平台
创建yum仓库:
createrepo [options] directory
程序包编译安装:
APP-version-release-src-rpm 安装后,使用rpmbuild命令制作成二进制格式RPM包
源代码->预处理->编译->汇编->链接->二进制代码
C,C++ make(项目管理工具) (configure->Makefile.in(模板)->Makefile)
Java maven
编译安装三部:
./configure
1.通过选项传递参数,指定启用特性,安装路径,执行时会根据用户配置和makefile.in生成Makefile
2.检查依赖到的外部环境
make
根据Makefile,构建应用程序
make install
开发工具:
autoconf:生成configure脚本
automake:生成makefile.in
安装前查看install readme
开源程序源代码获取:
官方网站:
Apache.org(ASF)
mariadb.org
代码托管:
SourceForge
GitHub.com
code.google.com
编译C源代码:
前提:提供开发工具和开发环境
开发工具:gcc make
开发环境:开发库,头文件
glibc:标准库
通过"包组"提供开发组件
"Development Tools" "Server platform Development"
第一步:configure脚本
选项:指定安装路径,启用特性
--help
选项分类:
安装路径设定:
--prefix=/PATH/TO/DIR 指定安装位置
--sysconfdir=/PATH/TO/DIR 配置文件安装位置
system types:
交叉编译用到
optional features:
--disable-FEATURE=
--enable-FEATURE[=arg]
optional packages:可选包
--with-PACKAGE[=ARG]
--without-PACKAGE
第二步:make(执行完./configure 路径会生成Makefile文件)
第三步:make install
安装后的配置:
1.导出二进制程序目录至PATH环境变量中
编辑/etc/profile.d/*.sh
export PATH=$PATH:/PATH/TO/BIN
2.导出库文件
编辑/etc/ld.so.conf.d/*.conf
将库目录路径添加/usr/local/apache2/lib
ldconfig [-v]重新生成缓存库文件/etc/ld.so.cache
ldconfig -p
3.导出头文件
头文件存放在/usr/include目录中
创建符号链接(可以链接整个目录或所有文件)
ln -sv
4.导出帮助手册
编辑/etc/man.config
添加MANPATH
可以使用--prefix=/usr --prefix=/ 默认为--prefix=/usr/local
ifconfig:
ifconfig [interface]
ifconfig interface [up|down]
ifconfig interface ip/mask [up]
ifconfig interface ip netmask MASK
ifconfig [-] promisc
promiscuous mode of interface
ifconfig ens33 promisc
ifconfig ens33 -promisc
route命令:
路由管理命令
主机的路由表用来帮助主机与其他主机通信
路由器路由表用来实现网络间报文转发
主机的路由表在内核中,内核中有一个功能叫网络协议栈,网络功能都在内核中加以实现
名字转换为地址:名称解析
地址转换为名字:反向解析
route -n
route add [-net|-host] target [netmask] [gw] [dev IF]
添加默认网关的第二种方式
route add default gw ...........
route del [-net|-host] target [gw]
配置在内核的相关内存地址中,关机后消失
DNS服务器指定:
/etc/resolv.conf
nameserver DNS_SERVER_IP1
nameserver DNS_SERVER_IP2
nameserver DNS_SERVER_IP3
正解: FQDN-->IP
dig -t A FQDN
host -t A FQDN
反解: IP-->FQDN
dig -x IP
host -t PTR IP
FQDN:www.slidershare.com
netstat:
netstat -print network connections , masquerade connections, routing tables, interface statistics, multicast memberships
显示网络连接:
裸套接字:应用层不调用传输层,直接调用ip层实现网络传输 --numeric 不反解ip地址 --numeric-hosts 不反解主机名 --numeric-ports 不反解端口 --program 哪个程序建立的连接 --extend 扩展格式接口信息 --verbose
raw socket 不使用tcp 也不使用udp的套接字
netstat [--tcp|-t] [--udp|-u] [--raw|-r] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e] [--program|-p]
-t:tcp
-u:udp
-r:raw
-l:listening
-a:
-n:numeric
-e:
-p:program and ID
常用组合:
-ant -anu -ntl -nul
显示内核路由表:
netstat [--route|-r] [--extend|-e] [--numeric|-n]
-r:
显示接口统计数据:
netstat [--interfaces|-i] [iface] [--all|-a] [--program|-p]
坑:netstat -i 显示所有接口
netstat -Iens33 显示ens33接口的 ,不能有空格
IP:
IP - show/manipulate routing, devices ,policy routing and tunnels
ip [options] object {command|help}
object={link | addr | addrlabel | route | rule | neigh | tunnel | maddr | mroute | moniter }
options= version | statistics | resolve | family | inet | ipx | dnet | link |
link(object):
ip link network device configuration
set
dev IFACE:可设置属性比如(up and down)
ip link set dev ens33 down
show
ip link show
ip link show dev ens33
ip link show up
addr(object)
ip addr protocal address management
ip addr {add | del | change | replace } IFADDR dev STRING
scope
global:the address is globally valid
host:the address is valid only inside this host
link:the address is link local,it is valid only on this device
[broadcast ADDRESS]
ip addr flush flush protocal address 清空一类地址
route(object)
routing table management
ip route add
添加路由:ip route add TARGET via GW dev IFACE src SOURC_IP
TARGET:
主机路由:IP
网络路由:NETWORK/MASK
添加默认路由(网关)
ip route add default via GW dev IFACE
ip route add 0.0.0.0/0 via GW dev IFACE
必须是0.0.0.0/0带mask
ip route del
ip route del TARGET
ip route show
ip route flush 组删除
[dev IFACE]
[via PREFIX]
ip route flush 必带参数
ip route flush via 192.168.0.0/16
ip route flush src 192.168.2.238
ip route flush dev ens33
ss命令:
FILTER:=[state TCP_STATE][EXPRESSION]
ss -o state established
-t
-u
-w:raw
-a
-l
-n
-p
-e
-m
-o
-x:unix sock
TCP:
tcp finite state machine
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT
SYN_RECV
CLOSED
linux网络属性配置:修改配置文件
IP,MASK,GW,DNS相关配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE
路由相关配置:/etc/sysconfig/network-scripts/ifcfg-IFACE
IPADDR:
在BOOTPROTO=static时使用,primary地址
TYPE=Ethernet(Bridge)
NM_CONTROLLED:此网卡是否接受NetworkManager的控制,NetworkManager是Redhat用来替代/etc/rc.d/init.d/network脚本的
BOOTPROTO:bootp
NETMASK
GATEWAY
DNS1:优先级比/etc/resolv.conf高,直接配置在接口上
DNS2
DNS3
USERCTL=普通用户是否可以控制此设备
PEERDNS=yes 如果BOOTPROTO=dhcp,是否允许dhcp分配的DNS Server指向信息覆盖/etc/resolv.conf文件
/etc/resolv.conf普通用户无法修改
service network restart = /etc/rc.d/init.d/network restart
/etc/sysconfig/network-scripts/route-IFACE
1:TARGET via GW
192.168.3.0/24 via 192.168.3.1
2:
ADDRESS#=TARGET
NETMASK#=MASK
GATEWAY#=GW
为网卡配置多个IPADDR:
1:
ip addr add 192.168.5.5/24 dev ens33 label ens33:0
别名格式ens33:0 ens33:1 ens33:2
2:
ifconfig ens33:0 192.168.5.6/24 up
别名必须在IP前面
后跟up
ip addr add 比 ifconfig 功能强大
3:修改配置文件
/etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0
BOOTPROTO=static
IPADDR=
NETMASK
DNS1
ONBOOT
TYPE=E
网卡别名不能使用DHCP,DHCP分配ip是根据mac地址进行
linux网络属性配置tui(text user interface)
system-config-network-tui
setup可以调用
其修改配置文件,故需重启服务才能生效
配置主机名
hostname
/etc/sysconfig/network
HOSTNAME
回归传统命名方式
1.编辑/etc/default/grub配置文件
GRUB_CMDLINE_LINUX="net.ifnames=0 rhgb quiet"
2.为grub2生成配置文件
grub2-mkconfig -o /etc/grub2.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
3.重启
地址配置工具:
nmcli [options] OBJECT [COMMAND|HELP]
device show and manage network interfaces
connections- start stop manage network connections
device:
nmcli device show
nmcli device show eth0
nmcli:
网络接口配置tui工具:nmtui
主机名称配置工具:hostnamectl
hostnamectl status
hostnamectl -set-hostname
网络客户端工具;
lftp lftpget ftp wget
lftp:
lftp [-p port] [-u user[,password]] SERVER
子命令:
get
mget
ls
cd
help
lftpget
lftpget URL
直接下载某个文件
ftp
wget: the non-interactive network downloader
wget [options] URL...
选项:
-i file:--input-file=file
-q:--quiet Turn off wget's output
-o logfile:--output-file=logfile
-O file:--output-document=file
-c :--continue
--limit-rates=
Linux进程查看管理:
pstree:display a tree of processes
ps:process stat
report a snapshot of the current processes
Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中
ps [options]
选项支持两种风格
常用组合:aux
VSZ:virtual memory size虚拟内存集
RSS:resident set size 常驻内存集
STAT:
R:running
S:就绪态
D:阻塞态
T:stopped终止
Z:zombie僵尸进程
s:session leader可引发相关进程
N:低优先级
<:高优先级
l:多线程进程
+:前台进程
常用组合:
ps -ef
-e:entire
-f:fully
常用组合;
ps -ejH
ps -eFH
层级显示
常用组合:
ps -ef
ps axo
nice:ni nice值
priority:优先级
psr:processor
rtprio:realtimepriority
euid:有效用户
ruid:实际用户
Z:selinux的安全上下文
j:BSD job control format
-j:jobs format
l:display BSD long format
-l:long format
-f:do full-format listings
-F:Extra full format,implies -f
pgrep,pkill:
pgrep [options] pattern
pkill [options] pattern
-u:effective user ID
-U:real user ID
-t:--terminal
--list-name:-l
--list-all:-a完整进程名
--parent:-P pid显示ppid为pid的进程列表
pidof:
top:
cup:
us:用户空间
sy:内核空间
ni:nice处理nice值时间
id:idle空闲时间
wa:wait for i/o等待i/o时间,如果时间较长,说明磁盘已成为系统瓶颈
hi:hardware interruption硬件中断处理时间
si:software interruption软件中断处理时间
st:stolen被虚拟机偷走时间
内置命令:
排序:
P:占据CPU百分比
M:占据内存百分比
T:累计时长百分比
都是大写
uptime首部信息显示
1 CPU核心信息显示
s修改刷新时间间隔
htop:
interactive process viewer
vmstat:report virtual memory statistics
in:interruption
cs:context switch
vmstat [options] [delay [count]]
vmstat 2 4 显示四次,2s刷新一次
procs:
r:ready等待运行队列长度
b:blocked,由不可中断睡眠导致(阻塞队列长度)
memory;
swaped:交换区使用量
free:空闲物理内存
buffer:
cache:
swap:
si:数据进入swap的速率(kb/s)
so:数据离开swap的速率(kb/s)
io:
bi:从块设备读入数据到系统的速率(kb/s)
bo:保存数据到块设备的速率
system:
in:interrupt中断速率
cs:context switch,进程切换速率
cpu:
pmap:
report memory map of a process
选项:
-x:show the extended format
anon:匿名页 进程自己存放数据用的位置,无法被交换
使用空间为4k(页面大小)整数倍
cat /proc/1/maps
glances:A cross platform curses-based monitoring tool
C/S模式下运行glances命令:
server端:
glances -s --bind IPADDR
IPADDR:监听于本机哪个地址
client端:
glances -c IPADDR
IPADDR:要链接的server端地址
dstat: versatile tool for generating system resources statistics
dstat -D total,sda
dstat [-afv] [options] [delay[count]]
dstat --top-io 磁盘压力很大,显示占据io资源最大进程
dstat --top-mem
dstat --top-latency:延迟最大进程
dstat --raw
dstat --socket
dstat --Unix
dstat --ipc:inter process communication
kill:
^c向进程发送 2)SIGINI信号
向进程发送控制信号,以实现对进程管理
显示系统可以信号:
man 7 signal
kill -l
常用信号;
1:SIGHUP: 无需关闭进程,而使其重读配置文件
2:SIGINI: 中止正在运行进程,相当于^c
9:SIGKILL: 强制关闭进程,暴力
15:SIGTERM: 优雅关闭进程
18:SIGCONT: 停止态,手工调度其继续运行
19:SIGSTOP: 使进程进入停止态
指定信号方法
1:信号数字标识,1 2 9
2:信号完整名称SIGHUP SIGCONT SIGSTOP
3:信号简写HUP CONT STOP
向进程发信号
kill [-SIGNAL] PID
终止"名称"之下的所有进程
killall [-SIGNAL] program
Linux的作业控制
前台作业;运行时占据了命令行控制台的作业,通过终端启动,启动后一直占据终端,比如htop
后台作业:可以通过终端启动,但启动后即转入后台运行(释放终端,即命令行控制台)
如何让作业运行于后台
1:运行中的作业
^z
2:尚未启动的作业
COMMAND &
此类作业虽被送往后台运行,但依然与终端相关,如果希望送往后台后,剥离与终端关系
nohup COMMAND &
查看所有作业
jobs
作业控制
fg [[%]job_num]:把指定后台进程调到前台
bg [[%]job_num]:把指定后台进程在后台继续运行
kill %job_num:终止指定作业
进程优先级:
静态优先级:100-139,可以手动调整
动态优先级:内核负责调整
nice:
nice [option] [command [arg]]
renice:
renice [-n] priority pid
nice -n 10 htop
renice -n -30 htop会调整为-20
linux任务计划,周期性任务执行
未来某一时间点执行一次任务,at batch (^d输入结束)
周期性运行某任务 /
电子邮件服务:
SMTP:simple mail transfer Protocol传送邮件
pop3:post office protocol
imap4:Internet mail access protocol
mailx:send and receive Internet mail
MUA:mail user agent
mailx [-s subject] username[@hostname]
邮件正文:
^d
输入重定向
管道
root root@hostnamectl root@hostnamectl.dnsdomain.com root@hostnamectl.localdomain
at:
at -l:查看等待运行的作业
at -d 队列号:删除队列
at [options] TIME
TIME:
HH:MM [YYYY-mm-dd]
noon,teatime,midnight
tomorrow
now+#{minutes|hours|days|weeks}
at -q:指定队列
at -l:列出作业
at -c:查看作业内容
at -f:/path/from/file
作业执行结果以邮件通知相关用户
batch:
不能指定时间点,系统自行选择空闲时间执行指定任务
周期性任务计划:
相关程序包:
cronie:主程序包,提供了crond守护进程及相关辅助工具
cronie-anacron:cronie的补充程序,监控cronie执行状况,如果cronie中的任务,未能按计划执行,cronie-anacron会在此执行此任务
crontabs:包含了centos提供的系统维护任务
确保crond守护进程处于运行状态:
centos7:systemctl status crond
centos6:service status crond
计划要执行的周期性任务提交给crond,由其周期执行
系统cron任务:系统自身维护作业
/etc/crontab
用户cron任务
crontab命令
系统cron任务
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
时间表示法:
1:特地值
2:* 任意值
3:离散取值:
#,#,#,
4:连续取值
#-#
5:在指定时间范围上,定义步长
*/#:
EX:
每三小时执行一次echo
0 */3 * * * root /bin/echo "crontab"
前面小范围必须指定一个特定值
用户cron:
crontab命令定义,每个用户都有专用的cron任务文件,/var/spool/cron/USERNAME
crontab命令:
crontab [-u user] {-l|-r|-e|-i}
-l:list所有当前用户任务
-r:删除所有当前用户任务
-e:编辑任务
-i:interactive 与-r一起使用
-u user:仅root可用
运行结果以邮件通知相关用户:
1:COMMAND > /dev/null
2: COMMAND &> /dev/null
对于cron任务,%有特殊用途,命令中使用要转义,''中不用转义
思考:
1:如何在秒级别运行任务
* * * * * for minute in $(seq 1 1 3);do echo 'crontab -l'; sleep 20;done;
sleep命令:
sleep NUMBER[suffix]
suffix:
s:秒,默认
m:
h:
d:
kernel:
自身初始化:
探测可识别到的所有硬件设备
加载硬件设备驱动(可能借助ramfs)
只读方式加载根文件系统
运行用户空间第一个应用程序init
init程序类型
sysV:init centos 5
配置文件/etc/inittab
upstart:init centos6
配置文件/etc/inittab /etc/init.d/*.conf
systemd:systemd centos7
配置文件/usr/lib/systemd/system /etc/systemd/system
内核特性之一:利用缓冲缓冲加速磁盘文件访问
ramdisk-->ramfs
centos 5:initrd,工具程序:mkinitrd
centos 6:initfs,工具程序:mkinitrd,dracut
centos 5
运行级别:为了系统的运行,维护等目的设定
0-6:
0:关机
1:单用户模式:single (root),维护模式,无需密码,只启动基本服务和功能
2:多用户模式:会启动网络功能,但不会启动NFS,维护模式,需登录
3:多用户模式:正常模式,文本界面
4:保留
5:多元化模式:正常模式,图形界面
6:重启
默认级别
3 5
切换级别
init #
查看级别
renlevel
who -r
不同级别,init会根据/etc/inittab配置文件启动不同服务和功能
rc 0 -->意味着读取/etc/rc.d/rc0.d/
K*:K##*
S*:S##*
for srv in /etc/rc.d/rc0.d/K*;do
$srv stop
done
for srv in /etc/rc.d/rc0.d/S*;do
$srv start
done
id:runlevel:action:process
action:
wait:切换到此级别运行一次
respawn:此process终止,就重新启动之
initdefault:设置默认运行级别,process可省略
sysinit:初始化方式,此处一般指定为/etc/rc.d/rc.sysinit
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
init 1:singel模式终端为物理终端
tty1:2345:respawn:/sbin/mingetty tty1
mingetty会调用login程序,显示登陆提示符,验证账号密码,正确会启动默认shell进程
系统初始化:
设置主机名
设置欢迎信息
激活udev和selinux
挂载/etc/fstab中的文件系统
检测根文件系统,并以读写方式重新再挂载根文件系统
设置系统时钟
激活swap设备
根据/etc/sysctl.conf文件设置内核参数
激活lvm和software raid设备
挂载额外的设备驱动程序
清理操作
总结:/sbin/init-->/etc/inittab-->设置默认运行级别-->运行系统初始化脚本-->关闭对应级别相关服务,启动相关服务-->设定登录终端
centos6
init程序为upstart,配置文件:
/etc/inittab /etc/init/*.conf
GRUB:
GRUB legacy
stage1:mbr
stage1.5:MBR后的扇区,让stage1中的bootloader识别stage2所在的分区上的文件系统
stage2:磁盘分区(/boot/grub/)
配置文件: /boot/grub/grub.conf <-- /etc/grub.conf
stage2及内核通常放置于一个基本磁盘分区(not logical volume Manager逻辑卷管理 软raid)
function:
1:提供菜单,提供交互式接口
e:编辑模式,编辑菜单
c:命令模式,交互式接口
2:加载用户选择的内核或操作系统
允许传递参数给内核
可隐藏此菜单
3:为菜单提供了保护机制
为编辑菜单进行认证
为启用内核,操作系统进行认证
grub的command-line
help:
help KEYWORD:help root
find (hd#,#)/PATH/TO/FILE
root (hd#,#):root (hd0,0)
kernel /PATH/TO/KERNEL_FILE:设定本次启动内核文件,还可向内核传递cmdline参数
ex:init=/path/to/init selinux=0
initrd /path/to/initramfs_file:设定内核的文件系统驱动ramfs
boot
手动在grub命令行接口启动系统
grub> root (hd0,0)
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/mapper/vg_node1-lv_root
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
配置文件: /boot/grub/grub.conf
配置项:
default=#:设定默认启动的菜单项,菜单项(title)从0编号
timeout=#:
splashimage=(hd#,#)/path/to/xpm_pic_file;菜单背景图片文件路径
hiddenmenu:隐藏菜单
password [--mad5] STRING:菜单编辑认证
title TITLE:菜单标题
root (hd#,#):grub查找stage2和kernel文件所在的设备分区,为grub的根
kernel /path/to/vmlinuz_file [parameters];启动内核
initrd /path/to/initramfs_file:内核匹配的ramfs
password [--md5] STRING:启动该内核或系统时进行认证
grub-md5-crypt命令
进入单用户模式:
1:编辑grub菜单(选定要编辑的title,e编辑)
2:kernel后追加参数:1,s,S,single
3;b启动
安装grub
1:grub-install
grub-install --root-directory=ROOT /dev/DISK
是磁盘不是分区
2:grub命令
grub> root (hd0,0)指定根目录
grub> setup (hd#)指明磁盘
内核组成部分:
kernel:内核核心,一般为bzimage,通常在/boot目录下,名称:vmlinuz-VERSION-RELEASE
kernel object:/lib/modules/VERSION-RELEASE
辅助文件:
initrd
initramfs
lsmod <-- /proc/modules
modinfo
modprobe
配置文件/etc/modprobe.conf,/etc/modprobe.d/*.conf
depmod:
generate modules.dep and map files
/lib/modules/VERSION-RELEASE/modules.dep(modules.dep.bin)
modules.dep不使用,使用modules.dep.bin查询
map files:/boot/system.map-VERSION-RELEASE
/proc:
sysctl -a|wc -l:内核所有可参数
cat /proc/modules
cat /proc/mounts