which:寻找执行档
which [-a] command
-a:all将所有从$PATH目录中可以找到的指令均列出来,而不止第一个被找到的指令名称
which ifconfig
which which
whereis:由一些特定的目录中寻找档案的档名
whereis [-bmsu] file
option | mean |
---|---|
-b | 只找binary格式的档案 |
-m | 只找在说明档manual路径下的文档 |
-s | 只找source来源的档案 |
-u | (^)搜寻其他特殊档案 |
whereis ifconfig ##找出ifconfig这个档名
whereis passwd
whereis -m passwd ##只找manual里的档案
find
find [PATH] [option] [action]
(1)与时间相关的option:
option | mean |
---|---|
-mtime n | n是number,n天之前的一天之内修改过内容的档案 |
-mtime +n | 列出n天之前(不包括n本身)修改过内容的档案 |
-mtime -n | 列出n天之内的(含n天本身)的修改过内容的档案 |
-newer file | 列出比file还要新的档案档名 |
find / -mtime 0 ## 在系统上面24小时内有改动过内容的档案
find /etc -newer /etc/passwd ## 列出/etc底下 日期比/etc/passwd新的 的档案
(2)与使用者和群组名称有关的option:
option | mean |
---|---|
-uid n | n为user的账号ID |
-gid n | n为group的ID |
-user name | name为使用者账号名称 |
-group name | name为群组名称 |
-nouser | 寻找档案的拥有者不存在于/etc/passwd中的档案 |
-nogroup | 寻找档案的拥有群组不存在于/etc/group的档案 |
find /home -user dmtsai ##搜寻/home底下属于dmtsai的档案
find / -nouser ## 搜寻系统中不属于任何人的档案
(3)与档案权限及名称有关的参数:
option | mean |
---|---|
-name filename | 搜寻档案名称为 filename 的档案 |
-size [±] SIZE | 搜寻比SIZE还要大(+)或小(-)的档案;c表示byte、k表示kb |
-type TYPE | 搜寻档案类型为TYPE的;f正规档案、d目录、l连接档、s socket、bc装置档案 |
-perm mode | 搜寻档案权限刚好等于mode的档案 |
-perm -mode | |
-perm /mode |
find / -name passwd ## 找出档名为passwd的档案
find / -name "*passwd*" ## 找出档名包含passwd这个关键词的档案
find /run -type s ##找出/run目录下,档案类型为Socket的档名
find / -perm /7000 ##
(4)额外可进行的动作:
option | mean |
---|---|
-exec command | command为其他指令 |
将结果列印到屏幕上(默认动作) |
df:列出档案系统的整体磁盘使用量
df [-ahikmHT] dictname/filename
option | mean |
---|---|
-a | 列出所有的档案系统 |
-h | 以人们较容易阅读的size格式显示 |
-i | 以inode数量显示 |
-T | 连同该partition的filesystem的名称也列出 |
df ##将系统内所有filesystem列出来
df -h ##易读容量格式显示
df -aT ##列出所有特殊档案格式及名称
df -h /etc
df -ih ##可用inode数量列出
du:档案系统的磁盘使用量
du [-ahskm] filename/dictname
option | mean |
---|---|
-a | all列出所有的档案与目录容量 |
-h | 以人们易读容量格式显示 |
-s | 仅列出总量,而不列出每个个别的目录占用容量 |
-k | KBytes |
-m | MBytes |
ln:实体连接与符号连接
Hard Link:实体连接,硬式连接
在某个目录下新增一个档名连接到某inode号的关联记录;多个档名对应到一个inode号
压缩命令:gzip
gzip [-cdtv#] file
option | mean |
---|---|
-c | 将压缩的资料输出到屏幕,可透过资料流重导向来处理 |
-d | 解压缩 |
-t | 检验压缩档的一致性 |
-v | 显示原档案/压缩档案的压缩比 |
# | 数字,代表压缩等级;-1最快、-9最佳 |
gzip -v services ## 默认将service压缩成service.gz,原文档不存在
zcat services.gz ## zcat读出压缩档内容
gzip -d services.gz ##解压缩
gzip -9 -c services > services.gz ##最佳压缩比压缩,并保留原本档案
zgrep -n 'http' services.gz ##找出http这个关键词在第几行
压缩命令:bzip2
bzip2 [-cdvkz#] filename
bzcat file.bz2
option | mean |
---|---|
-c | 将压缩过程产生资料输出屏幕 |
-d | 解压缩 |
-v | 显示压缩比 |
-k | 保留原始文档(比gzip优秀) |
# | 是数字,压缩等级 |
bzip2 -v services
bzcat services.bz2
bzip2 -d services.bz2
压缩命令:xz
xz [-dtlkc#] filename
xzcat filename.xz
option | mean |
---|---|
-l | 列出压缩档的相关资讯 |
-d | 解压缩 |
-t | 检查是否一致 |
-k | 保留原文档 |
-c | 将资料输出到屏幕上 |
# | 压缩等级 |
xz -v services
xz -l services.xz
xz -d services.xz
xzcat services.xz
xz -k services
tar:打包指令
tar [zjJcvf] filename
tar [zjJtv]
tar [zjJxvf]
option | mean |
---|---|
-z | 通过gzip进行压缩/解压缩,档名最好为*.tar.gz |
-j | 通过bzip2进行压缩/解压缩,档名最好为*.tar.bz2 |
-J | 通过xz进行压缩/解压缩,档名最好为*.tar.xz |
-c | 建立打包档案 |
-x | 解压包解压缩 |
-v | 显示处理档名 |
-f | 接别处理的档名 |
-t | 查看打包档案的内容还有哪些档名 |
-p | 保留原文档的权限与属性 |
压缩: tar -j cv -f filename.tar.bz2
解压: tar -j xv -f filename.tar.bz2 -C欲解压的目录(解压到指定目录下)
查询: tar -j tv -f filename.tar.bz2
正确应该是:
先写生成的文件名,再写要压缩的源文件
仅解开单一档案的方法:
(1)先找到我们要的档名,假设解开shadow档名
tar -jtv -f /root/etc.tar.bz2 | grep "shadow"
(2) 解开档案
tar -jxv -f打包档 待解开档
tar -jxv -f /root/etc.tar.bz2 etc/shadow
打包某目录,但不含该目录下某些文档的方法:
通过--exclude=file 将几个特殊的档案或目录移除在打包之列
tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* --exclude=/root/system.tar.bz2 /etc/root
仅备份比某个时刻还要新的档案的方法:
find /etc -newer /etc/passwd
ll /etc/passwd
tar -jcv -f /root/etc.newer.than.passwd.tar.bz2 --newer-mtime="2015/06/17" /etc/*
Vi的使用
vi共有三种模式:一般指令模式、编辑模式、指令列模式
mode | description |
---|---|
command mode | vi打开文档直接进入该模式,可以上下左右移动游标、删除子元整列、复制粘贴 |
insert mode | 按下ioarIOAR进入该模式,Esc退出 |
command-line mode | :/?完成搜寻资料取代子元的工作 |
vi welcome.txt ## vi 档名进入vi的一般指令模式
按下i,o,a子元进入编辑模式,按下Exs退出
存档离开 :wq
移动光标的方法 | |
---|---|
hjkl、上下左右键 | 游标向左、下、上、右移动一个游标 |
pageup pagedown | 移动一页 |
+ | 移动到非空白子元的下一列 |
- | 移动要非空白子元的上一列 |
n | n为数字,按下n后再按space,游标向右移动之一列的n个子元 |
0 | 移动到该列的开头 |
$ | 移动到该列的最后面子元处 |
G | 移动到档案的最后一列 |
nG | 移动到这个档案的第n列 |
gg | 移动到这个档案的第一列 |
n | n为数字,游标向下移动n列 |
搜寻与取代 | |
---|---|
/word | 向游标之下寻找名称为word的字符串 |
?word | 向游标之上寻找名称为word的字符串 |
n | 重复前一个搜寻动作 |
N | 反向前一个搜寻动作 |
:n1,n2s/word1/word2/g | 在第n1与n2列之间寻找word1这个字串,并将该字串取代为word2 |
:1,$s/word1/word2/g | 在第一列到最后一列之间寻找word1这个字串,并将该字串取代为word2 |
:1,$s/word1/word2/gc | 在第一列到最后一列之间寻找word1这个字串,并将该字串取代为word2,且取代前给使用者confirm是否取代 |
删除、复制与贴上 | |
---|---|
x、X | 向后(前)删除一个子元 |
nx | 连续向后删除n个子元 |
dd | 删除整列 |
ndd | 删除游标所在向下n列 |
d1G | 删除游标所在到第一列所有资料 |
dG | 删除游标到最后一列的所有资料 |
yy | 复制一列 |
nyy | 复制游标所在向下的n列 |
p、P | 将已复制的资料在游标下一列(上一列)贴上 |
u | 复原 |
[ctrl]+r | 重做一次 |
. | 重复前一个动作 |
command mode 切换到 insert mode | |
---|---|
i、I | 进入插入模式,从目前游标所在处插入 |
a、A | 从目前游标所在的下一个子元处插入 |
o、O | 从目前游标所在的下一列插入新的一列 |
r、R | r只会取代游标所在的那个字一次,R会一直取代直到按下Esc |
指令列模式的储存、离开等指令 | |
---|---|
:w | 写入 |
:w! | 强制写入 |
:q | 退出 |
:q! | 强制退出 |
:wq | 存储后离开 |
ZZ | 没有改动不存储离开;有改动存储离开 |
:w filename | 将编辑资料存储成另一个档案 |
:r filename | 读入另一个档案的资料 |
:n1,n2 w filename | 将n1到n2的内容存储到filename |
:set nu | 显示行号 |
:set nonu | 取消行号 |
区块选择Visual Block
区块选择的按键意义 | |
---|---|
v | 字选择,游标经过的地方反白选择 |
V | 列选择 |
[Ctrl]+v | 区块选择,长方形方式选择资料 |
y | 复制反白地方 |
d | 删除反白地方 |
p | 将复制区块粘贴 |
多档案编辑
打开多个档案:vim file1 file2…
多档案编辑的按键 | |
---|---|
:n | 编辑下一个档案 |
:N | 编辑上一个档案 |
:files | 列出目前这个vim的开启所有档案 |
多视窗功能
在command mode输入 :sp{filename} filename可有可无;省去新开同一个文档窗口。
『[ctrl]+w+↑』及『[ctrl]+w+↓』 在两个视窗之间移动;[ctrl]+w+ q其实就是:q 结束离开
命令编辑能力:history
通过按 上下键 就可以找到前/后一个输入的指令。指令记录在.bash_history
history [n]
history [-c]
history [-raw] histfiles
option | mean |
---|---|
n | 数字,意思是 要列出最近的n笔命令列表 |
-c | 将所有的history内容全部消除 |
-r | 将histfiles的内容read到目前shell的history记忆中 |
-a | 目前新增的history命令append到histfiles中 |
-w | 将目前的history记忆内容write入histfiles中 |
##列出目前记忆体内所有history记忆
history
##列出您目前最近的3笔资料
history 3
##将目前资料写入histfile中
history -w
echo ${HISTSIZE}
!number
!command
!!
option | mean |
---|---|
number | 执行第几笔指令 |
command | 向前搜寻指令串开头为command的指令并执行 |
!! | 执行上一个指令 |
命令别名设置功能:alias
alias 别名=‘command’
alias ll = 'ls -al'
unalias ll
工作控制、前景背景控制:job control、foreground、background
程序化脚本:shell scripts
万用子元:Wildcard
查询指令是否为Bash shell的内建命令:type
type [-tpa] name
option | mean |
---|---|
-t | type会将name以这些字眼显示出他的意义:file外部指令、alias命令别名、builtin内建指令 |
-p | 当name属于builtin command时才会显示完整档名 |
-a | 将所有含name的指令都列出来 |
type ls
type -t ls
type -a ls
type cd
指令的下达与快速编辑按钮
如果指令串太长的话,如何使用两行来输出?
用 [Enter] 来分成两行,\和[Enter]中间没有其他字元。
组合键 | 功能 |
---|---|
[Crtl]+u/[Ctrl]+k | 从游标处向前/后删除指令串 |
[Ctrl]+a/[Ctrl]+e | 游标移动到指令串的最前面/最后面 |
Shell的变数功能
y=ax+b
等号左边(y)就是变数,等号右边(ax+b)就是变数内容。
变数取用:echo
在bash中,当一个变数名称尚未被设定时,预设的内容是空的。
echo $variable
echo $PATH
echo ${PATH}
echo ${myname} ## 该变量还未设定,返回空
myname='keiji' #set the variable
echo ${myname} #get the variable
变数的设定规则
(1)变数与变数的内容以一个等号=来连接,等号两边不能直接接空白子元
myname=keiji
(2)变数名称只能是英文字母与数字,但是开头字元不能是数字
(3)变数内容中若有空白子元可使用双引号或单引号将变数内容结合起来
双引号内的特殊子元如$,可保持原本的特性
var="lang is $lang" echo $var lang is zh_TW.UTF-8
单引号内的特殊子元被看作纯文字
var='lang is $lang' echo $var lang is $lang
(4)可用\将特殊字符转变为一般子元
(5)command
和$(command)运行外部指令
version=$(unname -r)
echo $version
3.10,0-229.e17.x86_64
(6)可有 $ variable或 $ {variable}来扩增变数内容
PATH=$PATH:/home/bin
(7)用export来使变数变成环境变数
export PATH
(8)取消变数:unset
unset myname
环境变数的功能
查询环境变数的指令:env export
title | content |
---|---|
HOME | 使用者的家目录:cd~ |
SHELL | 目前环境使用的SHELL |
HISTSIZE | 记录历史指令的笔数 |
使用者mailbox位置 | |
PATH | 执行档搜寻的路径,目录之间用冒号隔开 |
LANG | 语系 |
RANDOM | 随机乱数 |
用set观察所有变数
title | content |
---|---|
PS1 | 提示子元的设定 |
$ | 关于本shell的PID,echo$$ |
? | 上一个执行的指令回传的数,echo$?返回0代表执行成功 |
export:自订变数转成环境变数
两者差异在于:该变数是否被子程序所继续引用。
子程序只会继承父程序的环境变量,不会继承其自订变量。
export 变数名称
export #export后面不接变数,会把所有环境变数显示出来
变数键盘读取、阵列与宣告:read,array,declare
read:读取来自键盘输入的变量(相当于python的input)
read [-ptn] variable
opton | mean |
---|---|
-p | 后面可以接提示子元 |
-t | 接等待描述 |
-n | 限定键入的字数 |
read atest #使用者用键盘输入以内容,内容变成名为atest的变数
echo $atest
read -p "please keyin your name:" -t 30 named #提示使用者30秒内输入自己的大名,并将输入字串作为named的变数内容
echo $named
declare:宣告变数类型
declare [-aixr] variable
option | name |
---|---|
-a | array,将变数定义为阵列类型 |
-i | integer,将变数定义为整数类型 |
-x | export,将变数定义为环境变数 |
-r | readonly,将变数定义为readonly类型,不可更改也不可unset |
sum=100+300+50
echo ${sum} #返回100+300+50 默认变量为str类型
declare -i sum=100+300+50
echo ${sum} #返回450
将sum变成环境变数
declare -x sum
export | grep sum
declare +x sum 将-变成+可以进行取消的动作
让sum变为readonly
declare -r sum
sum=testing
阵列array变数类型
设定:var[index]=content
调用:${var[index]}
与档案系统及程序的限制关系:ulimit
变数内容的删除、取代与替换
path=${PATH}
echo ${path}
将local/bin删除
echo ${path#/*local/bin:}
${variable # /*local/bin:}
variable:原本的变数名称
#:从变数内容从最前面向右删除,且仅删除最短的那个
%:从后面向前删除变量内容
/ *local/bin: 代表有删除的部分,*用来取代无穷多个任意字符