lsof -i tcp:80 查看80端口的占用情况
~表示自己的主目录
linux命令对大小写敏感,win不敏感
date 当前时间
locale 查看目前所支持的语言
LANG 改成en_US.UTF-8就变成英文的了
显示日历 cal
date +%Y%m%d 显示格式化的日期
shifit page up shift pagedown翻页
命令跟 --help 查看帮助
man 可以查看命令的详情 / 搜索
who 看谁在线
netstat -a 查看网络使用情况
reboot 重启 shutdown关机 加个now 立马执行,默认要等1分钟
linux权限管理
在我们Linux系统当中,默认的情况下,所有的系统上的帐号与一般身份使用者,还有那个
root的相关信息, 都是记录在/etc/passwd这个文件内的。至于个人的密码则是记录
在/etc/shadow这个文件下。 此外,Linux所有的群组名称都纪录在/etc/group内!这三个文件
可以说是Linux系统里面帐号、密码、群组信息的集中地啰! 不要随便删除这三个文件啊!
/usr (unix software resource):与软件安装/执行有关;
更改文件的群组支持可用chgrp,修改文件的拥有者可用chown,修改文件的权限可用
chmod 不过,请记得,要被改变的群组名称必须要在/etc/group文件内存在才行,否则就会显示错误!
chown
要注意的是, 使用者必须是已经存在系统中的帐号,也就是在/etc/passwd 这个文件中有纪录的使用者名称才能改
rwx 421
+4代表大于等于5天前的文件名:ex> find /var -mtime +4
-4代表小于等于4天内的文件文件名:ex> find /var -mtime -4
4则是代表4-5那一天的文件文件名:ex> find /var -mtime 4
find -name
find /etc -name ‘httpd’
df:列出文件系统的整体磁盘使用量;
du:评估文件系统的磁盘使用量(常用在推估目录所占容量)
Linux一般将文件可存取的身份分为三个类别,分别是owner/group/others,且三种身份各有 read/write/execute 等权限。
修改系统默认语言 /etc/locale.conf
目录的x代表的是使用者能否进入该目录成为工作目录的用途!如果你在某目录下不具有x的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r或ww的权限。
cd是change dictionary的意思
/ (root, 根目录):与开机系统有关;
/usr (unix software resource):与软件安装/执行有关;
/var (variable):与系统运行过程有关。
/usr/local/ 建议自己下的软件放到这里
uname -r # 查看核心版本
uname -m # 查看操作系统的位版本
每个帐号都可以有多个群组的支持
有w 不能删除文件
要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给;
Linux文件名的限制为:单一文件或目录的最大容许文件名为 255 个英文字符或 128 个中文字符;
第六章、Linux 文件与目录管理
如果是在写程序 (shell scripts) 来管理系统的条件下,务必使用绝对路径的写法。因为绝对路径的写法虽然比较麻烦,但是可以肯定这个写法绝对不会有问题。如果使用相对路径在程序当中,则可能由于你执行的工作环境不同,导致一些问题的发生。
. 代表此层目录
… 代表上一层目录
- 代表前一个工作目录
~ 代表“目前使用者身份”所在的主文件夹
~account 代表 account 这个使用者的主文件夹(account是个帐号名称)
PATH(一定是大写)这个变量的内容是由一堆目录所组成的,每个目录中间用冒号(:)来隔
开, 每个目录是有“顺序”之分的。仔细看一下上面的输出,你可以发现到无论是root还是
dmtsai都有 /bin 或 /usr/bin 这个目录在PATH变量内,所以当然就能够在任何地方执行ls来找
鸟哥的 Linux 私房菜:基础学习篇 第四版
6.1 目录与路径 299
到/bin/ls可执行文件啰!
某些情况下,即使你已经将 ls 搬回 /bin 了,不过系统还是会告知你无法处理 /root/ls 喔!很
可能是因为指令参数被高速缓存的关系。 不要紧张,只要登出 (exit) 再登陆 (su -) 就可
以继续快乐的使用 ls 了!
在默认的情况下,ls 显示出来的是该文件的 mtime ,也就是这个文件的内容上次
被更动的时间。
如果你想要知道某个文件的基本数据,例如是属于 ASCII 或者是 data 文件,或者是 binary
, 且其中有没有使用到动态函数库 (share library) 等等的信息,就可以利用 file 这个指令
which (寻找“可执行文件”)没啥用 找命令在哪个文件,一定是在path里面的
一般我们都是先使用 whereis 或者是 locate 来检查,如
果真的找不到了,才以 find 来搜寻呦! 为什么呢?因为 whereis 只找系统中某些特定目录下
面的文件而已,locate 则是利用数据库来搜寻文件名,当然两者就相当的快速, 并且没有实
际的搜寻硬盘内的文件系统状态,比较省时间啦!
[root@study ~]# whereis [-bmsu] 文件或目录名
选项与参数:
-l :可以列出 whereis 会去查询的几个主要目录而已
-b :只找 binary 格式的文件
-m :只找在说明文档 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件
find可以指定几天前的文件
至于那个 -nouser 或 -nogroup 的选项功能中,除了你自行由网络上面下载文件时会发
生之外, 如果你将系统里面某个帐号删除了,但是该帐号已经在系统内创建很多文件时,就
可能会发生无主孤魂的文件存在! 此时你就得使用这个 -nouser 来找出该类型的文件啰!
find / -name passwd
lsblk 列出系统上的所有磁盘列表
parted 列出磁盘的分区表类型与分区信息
“MBR 分区表请使用 fdisk 分区, GPT 分区
表请使用 gdisk 分区!”
“make
filesystem, mkfs” 格式化
第八章、文件与文件系统的压缩,打包与备份
!下面我们就列出几个常见的压缩文件扩展名吧:
*.zip zip 程序压缩的文件;
*.gz gzip 程序压缩的文件;
*.tar tar 程序打包的数据,并没有压缩过;
*.tar.gz tar 程序打包的文件,其中并且经过 gzip 的压缩
[dmtsai@study ~]$ gzip [-cdtv#] 文件名
[dmtsai@study ~]$ zcat 文件名.gz
选项与参数:
-c :将压缩的数据输出到屏幕上,可通过数据流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
-v :可以显示出原文件/压缩文件的压缩比等信息;
-# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6
一般 gzip -v logs 就行了 解压 gzip -d logs.gz
zcat logs.gz 直接可以查看压缩的文本
打包指令: tar
前一小节谈到的指令大多仅能针对单一文件来进行压缩,虽然 gzip, bzip2, xz 也能够针对目录
来进行压缩,不过, 这两个指令对目录的压缩指的是“将目录内的所有文件 “分别” 进行压
缩”的动作!而不像在 Windows 的系统,可以使用类似 WinRAR 这一类的压缩软件来将好多
数据“包成一个文件”的样式。
tar 的选项与参数非常的多!我们只讲几个常用的选项,更多选项您可以自行 man tar 查询
啰!
[dmtsai@study ~]$ tar [-z|-j|-J] [cv] [-f 待创建的新文件名] filename… <==打包与压缩
[dmtsai@study ~]$ tar [-z|-j|-J] [tv] [-f 既有的 tar文件名] <==察看文件名
[dmtsai@study ~]$ tar [-z|-j|-J] [xv] [-f 既有的 tar文件名] [-C 目录] <==解压缩
选项与参数:
-c :创建打包文件,可搭配 -v 来察看过程中被打包的文件名(filename)
-t :察看打包文件的内容含有哪些文件名,重点在察看“文件名”就是了;
-x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
特别留意的是, -c, -t, -x 不可同时出现在一串命令行中。
-z :通过 gzip 的支持进行压缩/解压缩:此时文件名最好为 *.tar.gz
-j :通过 bzip2 的支持进行压缩/解压缩:此时文件名最好为 *.tar.bz2
-J :通过 xz 的支持进行压缩/解压缩:此时文件名最好为 *.tar.xz
特别留意, -z, -j, -J 不可以同时出现在一串命令行中
-v :在压缩/解压缩的过程中,将正在处理的文件名显示出来!
-f filename:-f 后面要立刻接要被处理的文件名!建议 -f 单独写一个选项啰!(比较不会忘记)
-C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
其他后续练习会使用到的选项介绍:
-p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
-P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
–exclude=FILE:在压缩的过程中,不要将 FILE 打包!
其实最简单的使用 tar 就只要记忆下面的方式即可:
压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
查 询:tar -jtv -f filename.tar.bz2
解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
加-z是对gzip的支持
加上“ -p ”这个选项的原因是为了保存原本文件的权限与属性!
压缩log tar -zcvf log.tar.gz log
查看压缩包里的文件 tar -ztvf log.tar.gz
解压 tar -zxvf log.tar.gz
tar -zxvf log.tar.gz grep ‘a.log’ 加了grep 只把a.log解压出来
tar -zxvf log.tar.gz --exclude 加了这个表示不包含文件夹 只包含文件夹里的文件
time tar -zcvf log.tar.gz log 加个time能看出执行的详细时间
tar -zcvp -f logaaaa.tar.gz log 注意-f 和-p不能写在一起 ,加上“ -p ”这个选项的原因是为了保存原本文件的权限与属性!
将“ -f filename ”与其他选项独立出来,会比较不容易发生问题。
加上-P会保留根目录 备份的时候不建议,如果恢复备份可能会出现问题
tar可以用来做备份
-C 指定绝对路径
仅备份比某个时刻还要新的文件
某些情况下你会想要备份新的文件而已,并不想要备份旧文件!此时 --newer-mtime 这个选
项就粉重要啦! 其实有两个选项啦,一个是“ --newer ”另一个就是“ --newer-mtime ”,这两个
选项有何不同呢? 我们在 第六章的 touch 介绍中谈到过三种不同的时间参数, 当使用 –
鸟哥的 Linux 私房菜:基础学习篇 第四版
8.3 打包指令: tar 428
newer 时,表示后续的日期包含“ mtime 与 ctime ”,而 --newer-mtime 则仅是 mtime 而已!
备份可以结合定时任务
备份一般用tar 或者centos用xfsdump也行 或者dd 鸟哥有专门的备份章节
磁盘挂载,磁盘备份没有学 没必要学
vi说明
常用的:
H L 左右 ,J K 下上 可以指定一次移动多少行或者多少字符 10L 就是向左移动10个字符 以此类推 上下左右键也行 一样的
page up page down可以翻页
home或者0 可以移动到这一行的最前端 方便加个# 啥的
end 或者$ 移动到这一行的末尾
G 移动到这个文件最后一个字符 一定是大写的G
20G 移动到第二十行 一般配合set number 看哪里报错用
移动到第一行用gg 或者1G 常用
搜索 aa 直接 esc 然后 /aa 然后n 下一个 N上一个
:10,20s/hahaha/heiheihei/g 在10-20行之间搜索hahaha并替换为heiheihei
:1,$s/hahaha/heiheihei/g 整个文件搜索hahaha并替换为heiheihei
X相当于backspace ,x相当于del ,直接按del也行
dd删除一行
20dd 向下删除20行
d1G 删除光标所在到第一行的所有数据 就是之前的全删了
dG 从这一行开始 下面的全删了
yy 复制这一行
3yy 复制下面三行
p 在下面粘贴 P粘贴到这一行的上面
u 相当于ctrl z ,ctrl r 回退
esc r 会替换光标在的字符
esf R 会一直替换
set nu 显示行号 ,set nonu 不显示行号
esc 按v可以选中一个块 y复制块 p粘贴块 d删除块 相当于复制粘贴 玩玩
:n 上一个编辑的文件
:N下一个编辑的文件
:files 列出目前打开的所有文件
如果你在不同的系统之间复制一些纯文本时,千万记得要使用
unix2dos
或
dos2unix
来转换
一下断行格式啊!
set ff=unix 就行了
但若使用了 less 时,呵呵!就可以使用 [pageup] [pagedown] 等按键的
功能来往前往后翻看文件,你瞧,是不是更容易使用来观看一个文件的内容了呢!
除此之外,在 less 里头可以拥有更多的“搜寻”功能喔!不止可以向下搜寻,也可以向上搜寻
~ 实在是很不错用~基本上,可以输入的指令有:
空白键 :向下翻动一页;
鸟哥的 Linux 私房菜:基础学习篇 第四版
6.3
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字串 :向下搜寻“字串”的功能;
?字串 :向上搜寻“字串”的功能;
n :重复前一个搜寻 (与 / 或 ? 有关!)
N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
g :前进到这个数据的第一行去;
G :前进到这个数据的最后一行去 (注意大小写);
q :离开 less 这个程序;
vim 和less 必须非常熟练
iconv 编码转化
shell
bash shell 是默认的shell
bash的命令在你的主文件夹内的 .bash_history 啦! 不过,需要留意的是,
~/.bash_history 记录的是前一次登陆以前所执行过的指令, 而至于这一次登陆所执行的指令
都被暂存在内存中,当你成功的登出系统后,该指令记忆才会记录到 .bash_history 当中!
但是密码在histroy里能找到就不好了
type 命令可以看是不是shell的内置命令 比如type cd
\enter 可以换行 中间不能有空格
变量内容若有空白字符可使用双引号““”或单引号“'”将变量内容结合起来,但
双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示: “var=“lang is
$LANG””则“echo $var”可得“lang is zh_TW.UTF-8”
单引号内的特殊字符则仅为一般字符 (纯文本),如下所示: “var=‘lang is
$LANG’”则“echo $var”可得“lang is $LANG”
可用跳脱字符“ \ ”将特殊符号(如 [Enter],
,
空
白
字
符
,
′
等
)
变
成
一
般
字
符
,
如
:
“
m
y
n
a
m
e
=
V
B
i
r
d
T
s
a
i
”
在
一
串
指
令
的
执
行
中
,
还
需
要
借
由
其
他
额
外
的
指
令
所
提
供
的
信
息
时
,
可
以
使
用
反
单
引
号
“
指
令
”
或
“
, \, 空白字符, '等)变成一般字符,如: “myname=VBird\ Tsai” 在一串指令的执行中,还需要借由其他额外的指令所提供的信息时,可以使用反单引 号“ 指令 ”或 “
,空白字符,′等)变成一般字符,如:“myname=VBird Tsai”在一串指令的执行中,还需要借由其他额外的指令所提供的信息时,可以使用反单引号“指令”或“(指令)”。特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不
是单引号! 例如想要取得核心版本的设置: “version=$(uname -r)”再“echo
v
e
r
s
i
o
n
”
可
得
“
3.10.0
−
229.
e
l
7.
x
8
6
6
4
”
若
该
变
量
为
扩
增
变
量
内
容
时
,
则
可
用
"
version”可得“3.10.0-229.el7.x86_64” 若该变量为扩增变量内容时,则可用 "
version”可得“3.10.0−229.el7.x8664”若该变量为扩增变量内容时,则可用"变量名称” 或
变
量
累
加
内
容
,
如
下
所
示
:
“
P
A
T
H
=
"
{变量} 累加内容,如下所示: “PATH="
变量累加内容,如下所示:“PATH="PATH":/home/bin”或“PATH=${PATH}:/home/bin”
若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量: “export
PATH”
通常大写字符为系统默认变量,自行设置变量可以使用小写字符,方便判断 (纯粹依照
使用者兴趣与嗜好) ;
取消变量的方法为使用 unset :“unset 变量名称”例如取消 myname 的设置: “unset
myname”
不管正确或错误的数据都是默认输出到屏幕上,所以屏幕当然是乱乱的!那能不能通过某些
机制将这两股数据分开呢? 当然可以啊!那就是数据流重导向的功能啊!数据流重导向可以
将 standard output (简称 stdout) 与 standard error output (简称 stderr) 分别传送到其他
的文件或设备去,而分别传送所用的特殊字符则如下所示:
- 标准输入 (stdin) :代码为 0 ,使用 < 或 << ;
鸟哥的 Linux 私房菜:基础学习篇 第四版
10.5 数据流重导向 536 - 标准输出 (stdout):代码为 1 ,使用 > 或 >> ;
- 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;
其实这个管线命令“ | ”仅能处理经由前面一个指令传来的正确信息,也就是 standard output 的
信息,对于 stdandard error 并没有直接处理的能力
cut
cut 不就是“切”吗?没错啦!这个指令可以将一段讯息的某一段给他“切”出来~ 处理的讯息是
以“行”为单位喔!下面我们就来谈一谈:
[dmtsai@study ~]$ cut -d’分隔字符’ -f fields <==用于有特定分隔字符
[dmtsai@study ~]$ cut -c 字符区间 <==用于排列整齐的讯息
选项与参数:
-d :后面接分隔字符。与 -f 一起使用;
-f :依据 -d 的分隔字符将一段讯息分区成为数段,用 -f 取出第几段的意思;
-c :以字符 (characters) 的单位取出固定字符区间;
[dmtsai@study ~]$ grep [-acinv] [–color=auto] ‘搜寻字串’ filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 ‘搜寻字串’ 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 ‘搜寻字串’ 内容的那一行!
–color=auto :可以将找到的关键字部分加上颜色的显示喔!
10.6 管线命令 (pipe)
其
实这个管线命令“ | ”仅能处理经由前面一个指令传来的正确信息,也就是 standard output 的
信息,对于 stdandard error 并没有直接处理的能力。
Tips 想一想,如果你硬要让 standard error 可以被管线命令所使用,那该如何处理?其实就
是通过上一小节的数据流重导向即可! 让 2>&1 加入指令中~就可以让 2> 变成 1> 啰!了解
了吗? _
10.6.1 撷取命令: cut, grep
cut 不就是“切”吗?没错啦!这个指令可以将一段讯息的某一段给他“切”出来~ 处理的讯息是
以“行”为单位喔!下面我们就来谈一谈:
echo $PATH | cut -d ‘:’ -f 1 把path根据:拆开,只要第一组
who | cut -d 3 只要第三个字符
echo $PATH | cut -d ‘:’ -f 1,3 把path根据:拆开,列出第一组与第三组
刚刚的 cut 是将一行讯息当中,取出某部分我们想要的,而 grep 则是分析一行讯息, 若当中
有我们所需要的信息,就将该行拿出来~简单的语法是这样的:
last |grep root 有root的输出
last |grep -v root 没有root的输出
grep docker startk8s.sh 在startlk8s.sh 里找到包含docker的行
10.6.2 排序命令: sort, wc, uniq
此外,排序的字符与语系的编码有关,因此, 如果您需要排
序时,建议使用 LANG=C 来让语系统一,数据排序比较好一些。
[dmtsai@study ~]$ sort [-fbMnrtuk] [file or stdin]
选项与参数:
-f :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b :忽略最前面的空白字符部分;
-M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n :使用“纯数字”进行排序(默认是以文字体态来排序的);
-r :反向排序;
-u :就是 uniq ,相同的数据中,仅出现一行代表;
-t :分隔符号,默认是用 [tab] 键来分隔;
-k :以那个区间 (field) 来进行排序的意思
uniq 将重复的数据只列举一个
[dmtsai@study ~]$ uniq [-ic]
选项与参数:
-i :忽略大小写字符的不同;
-c :进行计数
last | cut -d ’ ’ -f 1 | sort | uniq -c 注意| 登录的人只取名字排序去重 显示次数
wc
如果我想要知道 /etc/man_db.conf 这个文件里面有多少字?多少行?多少字符的话, 可以怎
么做呢?其实可以利用 wc 这个指令来达成喔!他可以帮我们计算输出的讯息的整体数据!
[dmtsai@study ~]$ wc [-lwm]
选项与参数:
-l :仅列出行;
-w :仅列出多少字(英文单字);
-m :多少字符;
[dmtsai@study ~]$ cat /etc/man_db.conf | wc
131 723 5171
输出的三个数字中,分别代表: “行、字数、字符数”
10.6.3 双向重导向: tee
tee 会同时将数据流分送到文件去与屏幕 (screen);而输出到屏幕的,其实就是 stdout ,
那就可以让下个指令继续处理喔!
[dmtsai@study ~]$ tee [-a] file
选项与参数:
-a :以累加 (append) 的方式,将数据加入 file 当中!
10.6.4 字符转换命令: tr, col, join, paste, expand
tr
tr 可以用来删除一段讯息当中的文字,或者是进行文字讯息的替换!
管线命令在 bash 的连续的处理程序中是相当重要的!另外,在 log file 的分析当中也是相当
重要的一环, 所以请特别留意!另外,在管线命令当中,常常会使用到前一个指令的 stdout
作为这次的 stdin , 某些指令需要用到文件名称 (例如 tar) 来进行处理时,该 stdin 与
stdout 可以利用减号 “-” 来替代, 举例来说:
[root@study ~]# mkdir /tmp/homeback
[root@study ~]# tar -cvf - /home | tar -xvf - -C /tmp/homeback
十一章
使用正则要注意字符编码
grep docker startk8s.sh 找到带docker这一行
grep [^g]oo 找到带oo但是前面没有g这一行
grep [^a-z]oo 找到o前面没有小写字符
a-z A-Z 0-9 都可以用如果要组合起来用 [a-zA-Z0-9] 这样用
注意到了吧?那个 ^ 符号,在字符集合符号(括号[])之内与之外是不同的! 在 [] 内代表“反
向选择”,在 [] 之外则代表定位在行首的意义!要分清楚喔!
特别注意到,因为小数点具有其他意义(下面会介绍),所以必须要使用跳脱字符(\)来加
以解除其特殊意义!
grep ^$ startk8s.sh 找空白行
至于正则表达式当中的“ . ”则代表“绝对有一个
任意字符”的意思!这两个符号在正则表达式的意义如下:
. (小数点):代表“一定有一个任意字符”的意思;
(星星号):代表“重复前一个字符, 0 到无穷多次”的意思,为组合形态
grep do…er startk8s.sh 中间俩点占了两个字符
那如果是“oo*”呢?则第一个 o 肯定必须要存在,第二个 o 则是可有可无的多个 o , 所以,凡
是含有 o, oo, ooo, oooo 等等,都可以被列出来~
同理,当我们需要“至少两个 o 以上的字串”时,就需要 ooo* ,亦即是:
[dmtsai@study ~]$ grep -n ‘ooo*’ regular_express.txt
1:"Open
这样理解 * 的意义了吗?好了,现在出个练习,如果我想要字串开头与结尾都是 g,但是两个
g 之间仅能存在至少一个 o ,亦即是 gog, goog, gooog… 等等,那该如何?
[dmtsai@study ~]$ grep -n 'goog’ regular_express.txt
18:google is the best tools for search keyword.
19:goooooogle yes!
如此了解了吗?再来一题,如果我想要找出 g 开头与 g 结尾的字串,当中的字符可有可无,
那该如何是好?是“gg”吗?
[dmtsai@study ~]$ grep -n ‘g*g’ regular_express.txt
但因为 { 与 } 的符号在 shell 是有
特殊意义的,因此, 我们必须要使用跳脱字符 \ 来让他失去特殊意义才行。 至于 {} 的语法是
这样的,假设我要找到两个 o 的字串,可以是:
[dmtsai@study ~]$ grep -n ‘o{2}’ regular_express.txt
假设我们要找出 g 后面接 2 到 5 个 o ,然后再接一个 g 的字串,他会是这
样:
[dmtsai@study ~]$ grep -n ‘go{2,5}g’ regular_express.txt
我们先来谈一谈 sed 好了, sed 本身也是一个管线命令,可以分析 standard input 的啦! 而
且 sed 还可以将数据进行取代、删除、新增、撷取特定行等等的功能呢!很不错吧~ 我们先
来了解一下 sed 的用法,再来聊他的用途好了!
[dmtsai@study ~]$ sed [-nefr] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到屏幕上。
但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令行界面上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以执行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正则表达式的语法。(默认是基础正则表达式语法)
-i :直接修改读取的文件内容,而不是由屏幕输出。
动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表“选择进行动作的行数”,举例来说,如果我的动作
是需要在 10 到 20 行之间进行的,则“ 10,20[动作行为] ”
function 有下面这些咚咚:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式!
例如 1,20s/old/new/g 就是啦!
sed 后面接的动作,请务必以 ‘’ 两个单引号括住喔!
awk 也是一个非常棒的数据处理工具!相较于 sed 常常作用于一整个行的处理, awk 则比较
倾向于一行当中分成数个“字段”来处理。因此,awk 相当的适合处理小型的数据数据处理呢!
awk 通常运行的模式是这样的:
[dmtsai@study ~]$ awk ‘条件类型1{动作1} 条件类型2{动作2} …’ filename
[dmtsai@study ~]$ last -n 5 | awk ‘{print $1 “\t” $3}’ 只输出第一段与第三段
第12章,学习shell
必须要以“ #!/bin/bash ”来宣告这个文件内的语法使用 bash 的语法! 不加有可能会误判
12.3
at可以延时执行一次 cron可以循环执行 用在守护进程
batch:系统有空时才进行背景任务
anacron 可唤醒停机期间的工作任务 漏了会补上
在该指令的最后面加上一个“ & ”代表将该指令丢到背景
中, 此时 bash 会给予这个指令一个“工作号码(job number)”,注意到那个“执行”的字眼!此
外,这样的情况最大的好处是: 不怕被 [ctrl]+c 中断的啦!
ctrl z 切换到后台 fg切换到前台
kill -9 强制停止 kill -15 或者kill 正常停止 觉得不加-9比较好
通常使用 -9 是因为某些程序你
真的不知道怎么通过正常手段去终止他,这才用到 -9 的!
在这样的情况下,如果你是以远端连线方式连接到你的 Linux
主机,并且将工作以 & 的方式放到背景去, 请问,在工作尚未结束的情况下你离线了,该工
作还会继续进行吗?答案是“否”!不会继续进行,而是会被中断掉。
那怎么办?如果我的工作需要进行一大段时间,我又不能放置在背景下面,那该如何处理
呢? 首先,你可以参考前一章的 at 来处理即可!因为 at 是将工作放置到系统背景, 而与终
端机无关。如果不想要使用 at 的话,那你也可以尝试使用 nohup 这个指令来处理喔!这个
nohup 可以让你在离线或登出系统后,还能够让工作继续进行。他的语法有点像这样:
如果你想要让在背景的工作在你登出后还能够继续的执行,那么使用 nohup 搭配 & 是不错的
运行情境喔! 可以参考看看!
观察系统所有程序: ps aux
top -p pid 查看指定pid的资源率
free -m :观察内存使用情况
uptime 查看启动时间
netstat :追踪网络或插槽档
[root@study ~]# netstat -[atunlp]
选项与参数:
-a :将目前系统上所有的连线、监听、Socket 数据都列出来
-t :列出 tcp 网络封包的数据
-u :列出 udp 网络封包的数据
-n :不以程序的服务名称,以埠号 (port number) 来显示;
-l :列出目前正在网络监听 (listen) 的服务;
-p :列出该网络服务的程序 PID
[root@study ~]# systemctl [command] [unit]
command 主要有:
start :立刻启动后面接的 unit
stop :立刻关闭后面接的 unit
restart :立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思
reload :不关闭后面接的 unit 的情况下,重新载入配置文件,让设置生效
enable :设置下次开机时,后面接的 unit 会被启动
disable :设置下次开机时,后面接的 unit 不会被启动
status :目前后面接的这个 unit 的状态,会列出有没有正在执行、开机默认执行否、登录等信息等!
is-active :目前有没有正在运行中
is-enable :开机时有没有默认要启用这个 unit