11/3
dmesg 显示开机信息
: dmesg [-cn][-s <缓冲区大小>]
kernel 会将开机信息存储在ring buffer中,开机信息也保存在/var/log目录中
名称为dmesg的文件里
参数:
-c 显示信息后,清楚ring buffer中的内容
-s<缓冲区大小> 预设置为8196,刚好等于ring buffer的大小
-n 设置记录信息的层级
详细:dmesg用来显示内核缓冲区(kernel-ring buffer)内容,内核将各种消息
存放在这里。在系统引导时,内核将与硬件和模块初始化相关的信息填
到这个缓冲区。内核缓冲区中的消息对于诊断系统问题一般很有用。在
运行dmesg时,它显示大量信息。一般通过less或grep使用管道查看信息
对于挂载的磁盘,之前一直想不通为什么df 只能显示一部分的磁盘,今天挂载了
磁盘之后才发现,原来只有格式化后并挂载的磁盘才能用df显示
11/4
blkid
对于服务器来说,有时候会为了更换磁盘而导致原来的磁盘标符错乱(就是原来的sdb成了
sdc)这时候就需要用到 UUID,可通过blkid命令获取各分区的UUID
如果格式化的时候指定了LABEL 则该命令也会显示LABEL,也会显示相应的文件系统类型
对于启动自动挂载分区,有两种方法:
一种是 在/etc/fstab中输入
UUID=c61117ca-9176-4d0b-be4d-1b0f434359a7 /newdir ext4 defaults 0 0
另一种 把挂载命令写到 /etc/rc.d/rc.local 文件中去,输入到最后一行
umount 卸载挂载的分区、挂载点
后面可以跟挂载点,也可跟分区名(/dev/hdb1),不可跟LABEL和UUID
当遇到不能卸载的挂载点,并提示
umount: /newdir: device is busy.
可加上 选项“-l”
swap 交换分区
类似与windows的虚拟内存,大小一般为内存的2倍大小
增加思路:建立swapfile -格式化为swap格式 -启用该虚拟磁盘
free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)
和内核缓冲区内存 -m 显示内存的单位为M
磁盘配额
quota在实际中是针对于整个分区进行限制的
quotaon启动
quotaoff 关闭全部的quota
shell 作业控制
当运行一个进程时,暂停(Ctrl+z),使用fg命令恢复,利用bg命令使他到后台运行,
终止 ctrl+c
再次使其暂停,输入 jobs,可看到在被暂停或者在后台运行的服务的任务
对于多个被暂停的任务会有编号,使用jobs命令可以看到两个任务
[root@k2 ~]# jobs
[1]- Stopped vi test4.txt
[2]+ Stopped vi test4.txt
那么使用bg或者fg的时候,要在后面加上相应的编号
对于丢在后台的任务,如没退出刚才的shell,那么可用(fg 编号)
调到前台,然后 ctrl+c 结束任务
另一种情况,关闭当前的shell,再次打开一个shell时,使用jobs命令并不显示
在后台运行或者被暂停的任务,要想停掉它的话,则需要先知道其pid,再kill
变量
# env 查看系统预设的环境变量 (不同的用户,显示的内容也会不一样)
# set 不仅可以显示系统预设的变量,也可以连同用户自定义的变量显示出来
使系统内所有用户登录都使用相同的变量
需要在“/etc/profile"文件最末行加入 export myname=Aming 然后运行
source /etc/profile 就可以生效。再运行bash 或su - test 账户就可以看到效果
只想让当前用户使用该变量
需在用户主目录下的 .bashrc 文件最后一行加入 export myname=Aming,然后运行
source .bashrc 就生效
Linux 下设置自定义变量的规则
*设定变量的格式为 ”a=b",其中a 为变量名,b为变量的内容,等号两边不能有空格
*变量名只能由英、数字以及下划线组成,而且不能以数字开头;
*当变量内容带有特殊字符(如空格)时,需要加上单引号;
PS. 当变量内容中带有单引号的时候,这时就需要双引号
* 如变量内容中需要用到其他命令运行结果则可以使用反引号
*变量内容可以累加其他变量的内容,需加双引号
pstree 这个指令会把linux系统中所有进程通过树形结构打印出来
在父shell中设定一个变量后,进入子shell后该变量是不会生效的,如想生效
需使用 export
ps. export 就是声明一下这个变量,如不加选项,则会声明所有的变量
如要取消某个变量,则
unset 变量名
系统环境变量与个人环境变量的配置文件
/etc/profile : 预设置变量:eg. PATH USER LOGNAME MAIL INPUTRC HOSTNAME
HISTSIZE umask 等
/etc/bashrc : 主要预设umask及PS1。这个PS1就是我们在敲击命令时,前面的那串
字符:
[root@k2 ~]# echo $PS1
[\u@\h \W]\$
\u 就是用户,\h 主机名,\W则是当前目录,\$就是那个"#",如是pt用户则为$
每个用户的主目录下有下面这几个隐藏文件:
.bash_profile :定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用
该文件输入专用于自己使用的shell,当用户登录时,该文件仅执行一次
.bashrc :该文件包含专用于你的shell的bash信息,当登录时以及每次打开新的shell时,
该文件被读取,eg.可以将用户自定义的alias或者自定义变量写到这个文件中
.bash_history:记录命令历史用的
.bash_logout :当退出shell时,会执行该文件。可放清理工作的脚本
Linux shell 中的特殊符号
* “*”代表零个或多个任意字符
* “?”只代表一个任意的字符
*“#” 这个符号在linux中表示注释说明的意思
*“\” 脱意字符,将后面的特殊符号(如” *”)还原为pt字符
*“|” 管道符,作用在于将符号前面命令的结果丢给符号后面的命令
(命令常指针对文档操作的命令)
cut:用来截取某一个字段
语法:cut -d '分隔符' [-cf] n 这里的n是数字
-d:后面跟分隔字符,分隔字符要用单引号括起来
-c:后面接的是第几个字符
-f:后面接的是第几个区块
sort:用作排序
语法:sort [-t 分隔符] [-kn1,n2] [-nru] 这里的n1 < n2
-t 分隔符:作用跟cut的-d一个意思
-n:使用纯数字排序
-r:反向排序
-u:去重复
wc:用于统计文档的行数、字符数、词数
-l:统计行数
-m:统计字符数
-w:统计词数
wc 不跟任何选项,直接跟文档,则依次显示,行数、词数、字符数
uniq 去重复的行
-c:统计重复的行数,并把行数写在最前
使用uniq的前提是需要先给文件拍讯,否则不管用
tee 后跟文件名,类似与重定向 ">",不同的是,会吧文件显示在屏幕上
tr 替换字符,常用来处理文档中出席的特殊字符,如DOS文档中的^M符号
选项:-d 删除某个字符,-d后面跟要删除的字符
-s 把重复的字符去掉
最常用的是把小写变大写:tr `[a-z]``[A-Z]`
split 切割文档,选项:-b 一句大小来分割文档,单位为byte
-l:依据行数来分割文档
$ 出了用于变量前面的标识符外,还能和‘!’结合起来使用
‘!$' 标识上条命令中最后一个变量(就是上条命令中最后出现的那个)
;: 分号:想在一行中运行两个或两个以上的命令,则需在命令之前
加一个";"了
~ :用户的家目录,如果是root 则是 /root, 普通用户则是 /home/username
& :如要把一条命令放到后台执行的话,要加上这个符号,常用于命令运行
时间非常长的情况
2> 2>> :分别标识错误重定向和错误追加重定向
[] 中括号,中间为字符组合,代表中间字符中的任意一个
&& 与 || 用于多条命令中间的特殊符号,有下面几种情况:
*command1 ; command2
*command1&& command2
*command1 || command2
使用”;”时,不管command1是否执行成功都会执行command2
使用“&&”时,只有commadn1执行成功后,command2才会执行,
否者command2不执行
使用“||”时,command1执行成功后command2 不执行,否则去执行
command2
lsattr 显示文件隐藏属性 (如未安装则 yum install lsattr -y)
chattr 只有超级用户才能使用的命令
11/6 今天是正则表达式,好吧! 虽然看过了! 但还是要多看 多记 才可以的
grep sed awk 都是针对文本的行才操作的
grep [-cinvABC] 'word' filename
-c:打印符合要求的行数
-i:忽略大小写
-n:在输出符合要求的行的同时连同行号一起输出
-v:打印不符合要求的行
-A:后跟一个数字(有无空格都可以)
-B:后跟一个数字,eg. -B2则表示打印符合要求的行以及上面两行
-C:后跟一个数字,eg. -C2则表示打印符合要求的行以及上线各两行
在正则表达式中,“^”表示行的开始,“$”表示行的结尾,so空行可用
“^$”来表示
PS. [] 还有一种形式,就是[^字符] 表示除[]内的字符之外的字符
过滤任意一个字符与重复字符 --“.”表示任意一个字符
指定要过滤字符出现的次数
eg.
[root@k2 ~]# grep 'o\{2\}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
这里的{},其内部为数字,表示前面的字符要重复的次数
上例中表示包含有两个o,即“oo”的行,{}左右都需要加上脱意字符
‘\'。另外,{}也可表示一个范围,格式为:‘{n1,n2}’,其中n1
表示重复n1到n2次前面的字符,n2还可以为空,则表示大于等于n1次
egrep ,为grep的扩展版 ,不同的是 在过滤某项的时候,egrep是要用“+”的
eg.[root@k2 ~]# egrep 'oo+' test.txdt
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
筛选零个或一个前面的字符
[root@k2 ~]# grep 'o' test.txdt
rot:x:0:0:/rot:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
筛选字符串1 或者字符串2
[root@k2 ~]# egrep 'aaa|111|ooo' test.txdt
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
egrep 中()的应用
[root@k2 ~]# egrep 'r(oo)|(at)o' test.txdt
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
用() 表示一个整体,例如(oo)+就表示1个 ‘oo’或者多个‘oo’
[root@k2 ~]# egrep '(oo)+' test.txdt
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
oo
oooo
sed工具的使用
对于grep的实现只是查找功能,却不能实现把查找的内容替换掉
用vim的时候,虽然可以查找替换,却只局限于文本内容内部,
不能输出到屏幕。而sed和awk都是流式编辑器,是针对文档编辑
打印某行
sed -n 'n'p filename单引号的n是一个数字,表示第几行;
[root@k2 ~]# sed -n '2'p /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
如要打印所有行--sed -n '1,$'p filename
也可定义一个区间--sed -n '1,3'p test.txt
打印包含某个字符串的行
[root@k2 ~]# sed -n '/root/'p test.txdt
operator:x:11:0:operator:/root:/sbin/nologin
PS.对于grep中使用的特殊字符,如 ^ $ . *也可通用
[root@k2 ~]# sed -n '/^1/'p test.txdt
1111111111111111111111111111111
-e可以实现多个行为
[root@k2 ~]# sed -e '1'p -e '/111/'p -n test.txdt
rot:x:0:0:/rot:/bin/bash
1111111111111111111111111111111
删除某个或者多行
[root@k2 ~]# sed '1'd test.txdt
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
‘d'这个字符就是删除的动作了,不仅可以删除指定
的单位以及多行,而且能删除匹配某个字符的行,
还可删除某行到最后一行
替换字符或字符串
[root@k2 ~]# sed '1,2s/ot/to/g' test.txdt
rto:x:0:0:/rto:/bin/bash
operator:x:11:0:operator:/roto:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
’s'就是替换的命令,‘
g’为本行中全局替换,如不加‘g’只换该行中出现
的第一个。出了可以使用‘/'作为分隔符外,还能用其他’#‘ ‘ @’
eg.[root@k2 ~]# sed 's#ot#to#g' test.txdt
rto:x:0:0:/rto:/bin/bash
operator:x:11:0:operator:/roto:/sbin/nologin
operator:x:11:0:operator:/rooto:/sbin/nologin
roooto:x:0:0:/rooooto:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
eg.
删除文档中的所有数字或者字母
[root@k2 ~]# sed 's/[0-9]//g' test.txdt
rot:x:::/rot:/bin/bash
operator:x:::operator:/root:/sbin/nologin
operator:x:::operator:/rooot:/sbin/nologin
roooot:x:::/rooooot:/bin/bash
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[root@k2 ~]# sed 's/[a-zA-Z]//g' test.txdt
::0:0:/://
::11:0::/://
::11:0::/://
::0:0:/://
1111111111111111111111111111111
调换两个字符串的位置
[root@k2 ~]# sed 's/\(rot\)\(.*\)\(bash\)/\3\2\1/' test.txdt
bash:x:0:0:/rot:/bin/rot
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
这个确实看着有点头晕,,,,,
注释:()把所想要替换的字符括起来成为一个整体,因括号在sed中属于特殊
符号,所有需要在前面加脱意字符‘’,替换时则写成‘1’,‘‘2’, ‘ ‘3’的形式,
11/7
今天主要是熟悉前些天的内容 尤其是 sed 要不然 白记录了 可就不好了
对于sed 调换两个字符串的位置,默认是调换符合选项的第一位字符
但是怎么指定符合选项的其他位字符,却是不知道的
sed 's/^.*$/123&/' filename 这里的s 为替换命令 / 为分隔符
^.*$ 为无论是什么开头和结尾 123 添加字符123 & 这个如果在
123前面这是在输出字符的每行最后添加123 如果在前 则相反
这个课后有一个例子:把/etc/passwd 复制到/root/text.txt。用sed打印所有
答案是
/bin/cp /etc/passwd /root/test.txt ; sed -n '1,$'p test.txt
刚开始不知道 前面的 /bin/cp 是什么意思,上网查了 也没有,去掉
他之后发现[root@k2 ~]# /etc/passwd /root/text.txt
bash: /etc/passwd: Permission denied
想来是强制复制的作用!