linux 常用命令
写的是一些常用命令一些小结,详情的还是参考 “鸟哥Linux私房菜”
1 vi 模式下
vi 模式下
ctrl + f 向下移动一页
ctrl + b 向上移动一页
n<Enter> 光标向下移动 n 列
/word 向下找
?word 向上找
ndd 删除光标所在的那一整列
nyy 复制光标所在的向下 n 列
p, P 粘贴P上 p下
u 复原前一个动作
[Ctrl]+r 重做上一个动作
:set nu 显示行号
:set nonu 取消行号
2 BASH
2.1 变量
myname=VBird =号两边不能有空格,可以使用双引号或者单引号引用赋值变量
unset myname 取消变量
echo $myname 变量的取用: echo
$$ $? $?=0是正确的(上次执行回传值)
export 变量名称 提升变量为环境变量
read [-pt] variable 读取变量 ,-p后可接字符,-t后等待秒
declare / typeset 声明变量类型
2.2 变量小结 adu
2.2变量小结之变量内容的删除、取代、替换
变量设置方式 | 说明 |
---|---|
${变量#关键字} ${变量##关键字} | 从左开始删除最短关键字 ;从左开始删除最长的关键字 |
${变量%关键字} ${变量%%关键字} | 从右开始,原理同上 |
${变量/旧字串/新字串} ${变量//旧字串/新字串} | 替换 || 全局替换 |
2.3 数据流重导向
标准输入 stdin :代码为 0 使用 < 或 << |
---|
标准输出 stdout : 代码为 1 使用 > 或 >> , |
标准错误输出 stderr 代码为 2 使用 2> 或 2>> |
/dev/null 垃圾桶黑洞 |
“ll /home > ~/rootfile
1> :以覆盖的方法将“正确的数据”输出到指定的文件或设备上;
1>>:以累加的方法将“正确的数据”输出到指定的文件或设备上;
2> :以覆盖的方法将“错误的数据”输出到指定的文件或设备上;
2>>:以累加的方法将“错误的数据”输出到指定的文件或设备上;
命令执行的判断依据: (; , &&, || )
-
; 前一个指令执行完,执行后一个指令,指令连续下达。
-
$? (指令回传值) 与 && 或 ||
-
&& || 前一个指令成功是否和后一个指令相关 截图吧
$? (指令回传值) 与 &&(两个指令都需要执行成功) 或 || (只执行一个成功,另外一个就执行)
2.4 符号
正则也需要背呀=乘法口诀表
pre: 正则表达式与万用字符是完全不一样的东西!万用字符 (wildcard) 代表的是 bash 操 作接口的一个功能, 但正则表达式则是一种字串处理的表示方式! (参考11.5重点回顾)常见的支持正则表达式的工具软件有: grep , sed, vim 等等
万用字符
特殊符号
例如 vi, grep, awk ,sed 等等工具,因为她们有支持正则表达式, 所以,这些工具就可以使用正则表达式的特殊 字符来进行字串的处理。但例如 cp, ls 等指令并未支持正则表达式, 所以就只能使用 bash 自 己本身的万用字符而已。 p561
2.5 管道命令
cut, grep, sort, wc, uniq, tee, tr, col, join, paste, expand, split, xargs 等
cut -d’分隔字符’ -f fields 将一段讯息的某一段给他“切”出来,以行为单位,常用在同一行里面的数据进行分解,处理多个连续空格就吃力了,需要用awk工具
grep 可以解析一行文字,取得关键字,若该行有存在关键字,就会整行列出来
管线命令用法
cut -d'分隔字符' -f fields
grep [-acinv] [--color=auto] '搜寻字串' filename; (-n 输出行,-v反向选择)
排序命令 手工试试
sort [-fbMnrtuk] [file or stdin]
uniq [-ic]
wc [-lwm]
tee [-a] file
tee : 双向重导向,tee 会同时将数据流分送到文件去与屏幕
字符串转换命令
#字符转换命令: tr, col, join, paste, expand
tr [-ds] SET1 ... #tr 可以用来删除或替换一段讯息当中的文字,--暂时没用
join
paste [-d] file1 file2 #直接“将两行贴在一起,且中间以 [tab] 键隔开”而已
expand [-t] file #将[tab] 按键转成空白键
#分区命令
split [-bl] file PREFIX #
#参数代换
xargs [-0epn] command # 这个玩意儿就是在产生某个指令的参数的意思!,它能够捕获一个命令的输出,然后传递给另外一个命令。
#管用关于减号 - 的用途
----------------------闲谈----------------------------------
例子:
[roc@roclinux ~]$ echo china.txt | xargs cat
hello beijing
http://c.biancheng.net/linux/xargs.html #解释先后顺序,解释的很好!
* 管道可以实现:将前面的标准输出作为后面的“标准输入”。
* 管道无法实现:将前面的标准输出作为后面的“命令参数”。
撷取命令 | cut, grep |
排序命令 | sort, wc, uniq |
字符转换命令 | tr, col, join, paste, expand |
分区命令 | split |
参数代换 | xargs |
万用字符 | : *, ?, [] |
sed 工具 正 | 取、增、删除、撷取 |
awk 工具 正 | 好用的数据处理工具 |
格式化打印 | printf |
sort 排序 uniq 去重 wc 统计-行数-字符数-字数
xargs 参数替换
3 正则&文件格式化处理
3.0 简述:正则表达式就是处理字串的方法,他是以行为单位来进行字串的处理行为,
正则表达式通过一些特殊符号的辅助,可以让使用者轻易的达到**“搜寻/删除/取代**”某特定字串的处理程序!
3.1 grep的进阶选项
grep [-A] [-B] [--color=auto] '搜寻字串' filename
-A :后面可加数字,为 after 的意思,除了列出该行外,后续的 n 行也列出来;
-B :后面可加数字,为 befer 的意思,除了列出该行外,前面的 n 行也列出来;
--color=auto 可将正确的那个撷取数据列出颜色
例题二、利用中括号 [] 来搜寻集合字符
grep -vn 'the' regular_express.txt
grep -n 't[ae]st' regular_express.txt
grep -n '[^g]oo' regular_express.txt
例题三、行首与行尾字符 ^ $
grep -n '^the' regular_express.txt #列出the开头的
grep -n '^[a-z]' regular_express.txt #列出小写字符开头
grep -n '^[^a-zA-Z]' regular_express.txt
'^' 在 [] 内代表“反 向选择”,在 [] 之外则代表定位在行首的意义
grep -n '\.$' regular_express.txt #找出行尾为小数点的一行
grep -n '^$' regular_express.txt #找出空白行,只有行首跟行尾 (^$)
例题四、任意一个字符 . 与重复字符 *
(小数点):代表“一定有一个任意字符”的意思;
(星星号):代表“重复前一个字符, 0 到无穷多次”的意思,为组合形态
grep -n 'g..d' regular_express.txt
grep -n 'ooo*' regular_express.txt
grep -n 'goo*g' regular_express.txt
grep -n 'g.*g' regular_express.txt
grep -n '[0-9][0-9]*' regular_express.txt
例题五、限定连续 RE 字符范围 {}
pre:因为 { 与 } 的符号在shell是有特殊意义的,因此,我们必须要使用跳脱字符 \ 来让他失去特殊意义才行
grep -n 'o\{2\}' regular_express.txt
3.2 基础正则表达式字符汇整 (characters)
在万用字符当中的 *代表的是“ 0 ~ 无限多个字符”的意思,但是在正则表达式当中, 则是“重复 0 到无穷多个的前一个 RE 字符”的意思~使用的意义并不相同,不要搞混了!
延伸正则表达式 —必须截图,p580
但在正则表达式中,我们要找到 含有以 a 为开头的文件,则必须要这样:(需搭配支持正则表达式的工具) ls | grep -n '^a.*
3.3 sed awk 工具
sed 本身也是一个管线命令,可以分析 standard input 的啦! 而 且 sed 还可以将数据进行取代、删除、新增、撷取特定行等等的功能呢
pre:在了解了一些正则表达式的基础应用之后,再来呢?呵呵~两个东西可以玩一玩的,那就是 sed 跟下面会介绍的 awk 了!
例子1
[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 后面接的动作,请务必以 '' 两个单引号括住喔!
注意:同时 也要注意的是, sed 后面接的动作,请务必以 ‘’ 两个单引号括住喔!
* 以行为单位的新增/删除功能
nl /etc/passwd | sed '2,5d' #删除2-5行
nl /etc/passwd | sed '2a drink tea' #第二行后新增字段
* 以行为单位的取代与显示功能
nl /etc/passwd | sed '2,5c No 2-5 number' #将2-5行取代成No 2-5 number
nl /etc/passwd | sed -n '5,7p' #仅列出5-7 行
* 部分数据的搜寻并取代的功能
sed 's/要被取代的字串/新的字串/g'
cat /etc/man_db.conf | | grep 'MAN'| sed 's/#.*$//g'
* 直接修改文件内容(危险动作)
sed -i 's/\.$/\!/g' regular_express.txt #利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !
范例七:利用 sed 直接在 regular_express.txt 最后一行加入“# This is a test” [dmtsai@study ~]$ sed -i '$a # This is a test' regular_express.txt # 由于 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增啰!
3.4 正则表达式延伸
grep 默认仅支持基础正则表达式,如果要使用延伸型正表达式,你可以使用 grep -E , 不过更建议直接使用 egrep !直接区分指令比较好记忆!其实 egrep 与 grep -E 是类似命令别名的关系啦!
grep -n '[!>]' regular_express.txt #如果你想要查出来文件中含有 ! 与 > 的字行时,可以这样
3.5 文件的格式化与相关处理
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 啰!
例子1 :将刚刚上头数据的文件 (printf.txt) 内容仅列出姓名与成绩:(用 [tab] 分隔)
printf '%s\t %s\t %s\t %s\t %s\t \n' $(cat printf.txt)
范例二:将上述数据关于第二行以后,分别以字串、整数、小数点来显示:
[dmtsai@study ~]$ printf '%10s %5i %5i %5i %8.2f \n' $(cat printf.txt | grep -v Name)
3.6 awk:好用的数据处理工具
awk 也是一个非常棒的数据处理工具!相较于 sed 常常作用于一整个行的处理, awk 则比较 倾向于一行当中分成数个“字段”来处理 ;默认的“字段的分隔符号为 “空白键” 或 "[tab]键
awk 是“以行为一次处理的单位”, 而“以字段为最小的处理单 位
变量名称 | 代表意义 |
---|---|
NF | 每一行 $0 拥有的字段数 |
NR | 目前 awk 所处理的是“第几行”数据 |
FS | 目前的分隔字符,默认是空白键 |
[dmtsai@study ~]$ awk '条件类型1{动作1} 条件类型2{动作2} ...' filename
例子1 若我想要取出帐号与登陆者的 IP ,且帐号与 IP 之间以 [tab] 隔开
last -n 5 | awk '{print $1 "\t" $3}'
上表是 awk 最常使用的动作!通通过 print 的功能将字段数据列出来!字段的分隔则以空白键或 [tab] 按键来隔开。 因为不论哪一行我都要处理,因此,就不需要有 "条件类型" 的限制
在 awk 的括号内,每一行的每个字段都是有变量名称 的,那就是 $1, $2... 等变量名称
执行上面例子1的步骤
1. 读入第一行,并将第一行的数据填入 $0, $1, $2.... 等变量当中;
2. 依据 "条件类型" 的限制,判断是否需要进行后面的 "动作";
3. 做完所有的动作与条件类型;
4. 若还有后续的“行”的数据,则重复上面 1~3 的步骤,直到所有的数据都读完为止。
总结 :awk 是“以行为一次处理的单位”, 而“以字段为最小的处理单 位”。
Tips 要注意喔,awk 后续的所有动作是以单引号“ ' ”括住的,由于单引号与双引号都必须是成 对的, 所以, awk 的格式内容如果想要以 print 打印时,记得非变量的文字部分,包含上一 小节 printf 提到的格式中,都需要使用双引号来定义出来喔!因为单引号已经是 awk 的指令 固定用法了!
例子2 接着1+使用awk内置变量
last -n 5 |awk '{print $1 "\t lines: " NR "\t columns: " NF}'
- awk 的逻辑运算字符
- awk 的内置变量
例子1
cat /etc/passwd awk '{FS=":"} $3<10{print $1 "\t "$3 }'
例子2 可以预先设置 awk 的变量啊! 利用 BEGIN 这个关 键字喔!这样做:
cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}
例子3 awk 的动作内 {} 也是支持 if (条件) 的喔! 举例来说,上面的指令可以修订成为这样
cat pay.txt | awk '{if(NR==1) print $1}'
例子4 awk 还可以帮我们进行循环计算喔
4 shell 脚本
shell脚本注意事项
在 shell
script 的撰写中还需要用到下面的注意事项:
-
指令的执行是从上而下、从左而右的分析与执行;
-
指令的下达就如同第四章内提到的:指令、选项与参数间的多个空白都会被忽略掉;
-
空白行也将被忽略掉,并且 [tab] 按键所推开的空白同样视为空白键;
-
如果读取到一个 Enter 符号 (CR) ,就尝试开始执行该行 (或该串) 命令;
-
至于如果一行的内容太多,则可以使用“ [Enter] ”来延伸至下一行;
-
“ # ”可做为注解!任何加在 # 后面的数据将全部被视为注解文字而被忽略!
script 的执行方式差异 (source, sh script, ./script)
12.2 利用 test 指令的测试功能
12.3.2 利用判断符号 [ ]
12.3.3 Shell script 的默认变量($0, $1…)
shift代表拿掉最前面的几个参数的意思
netstat 的指令,这个 指令可以查询到目前主机有打开的网络服务端口 (service ports)
若为 127.0.0.1 则是仅针对本机 开放,若是 0.0.0.0 或 ::: 则代表对整个 Internet 开放
12.6 shell script 的追踪与 debug
建议: 至于在 Shell scripts 的学习方 法上面,需要“多看、多模仿、并加以修改成自己的样式!” 是最快的学习手段了!
5 工作管理
& :直接将指令丢到背景中“执行”
jobs: 观察目前的背景工作状态
nohup : 可以让你在离线或登出系统后,还能够让工作继续进行;可以搭配&
ps : 静态观察程序的变化 aux
top :动态的观察程序的变化
pstree : 来查阅程序树之间的关系喔!,找程序之间的相关性
ps aux 以查阅所有系统运行的程序
ps -l 只能查阅自己 bash 程序
pidof :找出某支正在执行的程序的 PID
16.3.4 资源管理
free :观察内存使用情况
netstat :追踪网络或插槽档
6 备份
备份使用的工具为何: 是利用 tar 、 cpio 、 dd 还是 dump 等等的备份工具
完整备份常用的工具有 dd, cpio, xfsdump/xfsrestore 等等
可以直接进行累积备份的就是 xfsdump 这个指令啰
7 find 命令
还能够让工作继续进行;可以搭配&
ps : 静态观察程序的变化 aux
top :动态的观察程序的变化
pstree : 来查阅程序树之间的关系喔!,找程序之间的相关性
ps aux 以查阅所有系统运行的程序
ps -l 只能查阅自己 bash 程序
pidof :找出某支正在执行的程序的 PID
16.3.4 资源管理
free :观察内存使用情况
netstat :追踪网络或插槽档
other
1.1etman大大给的建议:
- 有系统地设计文件目录,不要随便到处保存盘案以至以后不知道放哪里了, 或找到文件 也不知道为何物。
- 养成一个做记录的习惯。尤其是发现问题的时候, 把错误信息和引发状况以及解决方法 记录清楚,同时最后归类及定期整理。别以为您还年轻,等你再弄多几年计算机了, 您 将会非常庆幸您有此一习惯。
- 如果看在网络上看到任何好文章,可以为自己留一份copy,同时定好题目,归类存盘。 (鸟哥需要注意知识产权!)
- 学写 script 的确没设置 server 那么好玩,不过以我自己的感觉是:关键是会得“偷”, 偷了会得改,改了会得变,变则通矣。
1.2 主机规划和磁盘分配
1.3 linux文件与目录管理
-
whereis 只找系统中某些特定目录下 面的文件而已,
-
locate 则是利用数据库来搜寻文件名,这个数据库每天更新一次,可能有数据会未更新
-
如果真的找不到了,才以 find 来搜寻呦,find直接搜索磁盘 (时间、使用者&群组、文件名称&文件权限),可以包含万能字符,
目标
step1 、重点的管线命令、正则命令,工具还没有记住,会用
setp2 、 shell脚本常用的会写,常见的判断语句、循环语句,这的ok
setp3 、 文件备份、进程、内存、cpu、磁盘挂载
step4 、将上面整理成文档,目的便于经常的看