(2) 断行字符
dos2UNIX [-kn] file[newfiele]
UNIX2dos [-kn] file[newfile]
-k 保留该文件原本的mtime时间格式(不更新文件上次内容经过修订的时间)
-n 保留原本的旧文件将转换后的内容输出到新文件
(3) iconv
-- list 列出iconv支持的语系数据
-f from 后接原本的编码格式
-t to 要转换到的编码格式
-o file 如果保留源文件 那么使用-onewfile 可以建立新编码文件
eg: iconv -f gbk -tutf8 index.php -o index-utf8.php
(4) type name
不加参数 会显示是外部还是内建命令
-t 有三个字眼:
file :外部命令
alias :该命令为别名
builtin : 表示bash内建
-p 只有外部命令才会显示完整文件名
-a 会由PATH变量定义的路径中,将所有包含name的命令都列出来 包括alias
(5) RANDOM
RANDOM 的值介于0---32767
获得0-9间的数: declare -inumber=$RANDOM*10/32768; echo number
(6)PS1提示符设置
\W 仅列出工作目录的最后一个目录(默认)
\$ 提示符 root时# 否则$ (默认)
\h 显示主机名第一个小数点前面的信息 www(默认)
\u 目前登录用户(默认)
\w 完整的工作目录(常用)
\A 24小时格式 HH:MM(常用)
\t 显示时间 24小时格式 HH:MM:SS
\T 12小时格式的HH:MM:SS
\d 星期月日 例 MonFeb 2
\@12小时格式的 am/pm
\v BASH版本信息
\H 完整的主机名
\# 执行的第几个命令
\ [ \ e [ F ; B m \ ](忽略\前的空格)
其中F为字体颜色,编号30~37
B为背景色,编号40~47
取消设置:\ [ \ e[0m\ ](忽略\前的空格)
前景 背景 颜色
30 40 黑色
31 41 红色
32 42 绿色
33 43 黄色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色
B代码 意义
0 OFF
1 高亮显示
4 underline
7 反白显示
8 不可见
vim .bashrc
IP=$(/sbin/ifconfig|grep 'inet '|grep -v '127.0.0.1'|head -1|cut -d: -f2|awk '{print $1}')
PS1='[\ [ \ e[35;1m\ ]\ t \ [\ e[31;0m\ ]\ u@\ [\ e[36m\ ]\ h:$IP \ W]\ $\ [\ e[m\ ]'(去掉\ 前的空格即可)
unset IP
(6) read
-p 后接提示语
-t 后接秒数
read -p “input:” -t 30 variable
(7) declare == typeset
不带参数效果和set一样
-a 后面的变量申明为数组
-i 申明为integer
-x 效果等同于export 将变量变为环境变量
-r 将变量变为只读 不可更改重设
(8) ulimit
-H 严格设置 不能超过此设置
-S 警告设置 超过此设置会有警告 一般S 比H小
-a 列出所有的限制
-c 当某些进程发生错误 系统会将该进程在内存中的数据写入一个内核文件 此为每个内核文件的最大容量
-f 此shell可以创建文件的最大容量 一般为2G 单位KB
-d 进程可以实用的最大断裂内存容量segment
-l 可用于锁定的内存容量
-t 可使用的最大cpu时间 单位秒
-u 单一用户可以使用的最大进程数量
(9) 变量删除替换
${variable#key} 从头开始删除符合关键字的数据 非贪婪
${variable##key} 从头开始删除符合关键字的数据 贪婪
${variable%key} 从尾部删除-----------非贪婪
${variable%%key} --------------------------贪婪
${variable/oldString/newString/} 字符串替换 非贪婪
${variable//oldString/newString/} 字符串替换 贪婪
(10) 变量测试
表达式 情况1:str没有设置 情况2:str为空字符串 情况3:str已设置为非空字符串
var=${str-expr} var=expr var= var=$str
var=${str:-expr} var=expr var=expr var=$str
var=${str+expr} var= var=expr var=expr
var=${str:+expr} var= var= var=expr
var=${str=expr} str=expr;var=expr str=str;var= str=str;var=$str
var=${str:=expr} str=expr;var=expr str=expr;var=expr str=expr;var=expr
var=${str?expr} expr输出至stderr var= var=$str
var=${str:?expr} expr输出至stderr expr输出至stderr var=$str
(11) alias unalias
alias lm=‘ls -al | more’
unlalias lm
alias topc='ps auxw | head -1; ps auxw | tail -n +2 | sort -rn -k3 | head -10'
alias topm='ps auxw | head -1; ps auxw | tail -n +2 | sort -rn -k4 | head -10'
alias topv='ps auxw | head -1; ps auxw | tail -n +2 | sort -rn -k5 | head -10'
alias free='free -m'
alias pse='ps auxw'
alias la='ls -al'
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
export EDITOR=vim
export SVN_EDITOR=vim
export GIT_EDITOR=vim
(12) history
n 是数字 列出最近n条命令
-c 将目前shell中的历史记录全部清除
-a 追加 将目前新增的历史命令追加入histfile 若没有则默认写入~/.bash_history
-r 将histfile中的内容读入当前shell的history中
-w 将目前的history记忆内容写入histfile中
不带参数 表示列出木器按内存中记忆的有所有history命令
!number 执行第几条命令
!command 执行上一条command开头的命令
!! 执行上一条命令
空格 command 逃脱history记忆
(13) /etc/issue /etc/motd
issue:
\d 本地端的日期
\l 显示第几个终端机接口
\m 显示硬件等级 (i386等)
\n 显示主机的网络名称
\o 显示domain name
\r 操作系统版本 uname -r
\t 本地端的时间
\s 操作系统名称
\v 操作系统版本
/etc/motd:用户登录后取得一些信息 可以在motd里面写 可作为统一通知
(14) 关键文件介绍
/etc/profile 系统整体设置 最好不要修改:只有loginshell 才会读
~/.bash_profile bash_login profile 属于用户个人数据 可修改 login shell 依次往下读只读其中一个
/etc/inputrc : bash输入框预设值 不建议修改
/etc/profile.d/*.sh 只要sh为扩展名 用户有r的权限 即可被/etc/profile加载
/etc/sysconfig/i18n : 语系配置文件
~/.bashrc non loginshell 会读
/etc/bashrc bash预设值(redhat 特有)
/etc/man.config man文件配置
~/.bash_history bash 历史命令记录文件
~/.bash_logout 当注销bash后系统再帮我做完什么操作后才离开
配置文件修改后 不会立刻生效 需要重启或source 配置文件生效 source == .
(15) stty -a 按键列表
eof 结束输入
erase 向后删除字符
intr 送出一个中断信号interrupt给当前进程
kill 删除在目前命令行上的所有文字
quit 送出一个quit 信号
start 在某个进程停止后 重新启动他的输出
stop 停止目前的屏幕输出
susp 送出一个terminal stop信号
(16) set
-u 默认不启用 启用时 实用未定义变量会显示错误信息
-v 默认不启用 ----讯息被输出前 会先显示讯息原始的内容
-x ------------------------------在命令执行前会显示命令内容前面有++
-h 默认启用 与历史命令有关
-H 同上
-m 与工作管理有关
-B 与括号[]的作用有关
-C 默认不启用 实用> 等时 若文件存在时 该文件不会被覆盖
echo $- ===> bash 的默认设置 himBH $-就是set的所有设置
组合键:
ctrl + c 终止目前命令
ctrl + d 结束输入(EOF 例如邮件输入的时候)
ctrl + m 就是enter
ctrl + s 暂停屏幕输出
ctrl + q 恢复屏幕输出
ctrl + u 在提示符下 将整行命令删除 (清楚命令行开始到光标处)
ctrl + z 暂停目前的命令
ctrl + l 清除屏幕 保留命令行
(17) 通配符 特殊符号 非正则
* 0到无穷个任意字符
? 代表一定有一个任意字符
[] 代表一定有一个字符在[]中
[x-y] 表示x到y 中的任一个字符
[^xxx] 表示一定不在[]中的一个字符
# shell script 注释符号
\ 转义符号
| 管道
; 连续命令执行分隔符
command && command 前面执行成功 才执行后面
command || command -------------失败 --------------
$? 命令回传码 $?=0时表示命令执行成功
~ 用户的主文件夹
$ 实用变量时的前导符
& 将命令变成背景下工作
! 逻辑上的非
/ 路径分隔符
‘’ 不解析所包含的变量
“” 会解析所包含的变量
·· 两个·之间的命令可以先执行 等同于 $()
() 在中间为子shell的起始与结束
{} 在中间为命令块的组合
>, >> 数据流重定向 输出导向 替换和追加 stdin 标准输入 代码为0
<, <<-------------------输入导向 -------------- stdout 标准输出 代码为1
stderr 标准错误输出 代码为2 实用2> 或2>>
1> 已覆盖的方式将正确的数据输出到指定的文件或设备上
1>> 以追加方式-------------------------------------------------------
2> 以覆盖的方式 将错误的数据输出到指定设备或文件
2>> 以追加的方式------------------------------------------------
/dev/null 黑洞设备
将正确和错误的数据都写到一个文件
> list 2>&1
&> list
(18) cat 创建文件的几种方式
cat > catfile (ctrl + d离开) :键盘输入
cat > catfile < filename :file输入
cat > catfile << 'key' :键盘输入 输入key时立刻退出不需要ctrl+d
(19) cut
cut -d '分隔符' -f fields
-d 后接分隔符 -f 后接数字 取第几段的意思
cut -d ‘ ’ -f 3,5
cut -c 12- 表示字符长度在12以上的行
cut -c 12-20
(20) grep
-a 将binary文件以text的文件方式查找
-c 计算匹配的行数 非匹配次数
-l 返回匹配到的文件名 -L相反
-R 递归搜索文件
-i 忽略大小写
-n 顺便输出行号
-v 反向选择 即没有次字符的行
--color=auto 将关键字特殊显示
--include --exclude "file*" 包含 排除file
-Z 输出'\0'结尾的文件 通常配合-l 用于xargs
-A -B -C n 打印匹配结果之后 之前 前后 n行
grep [-acinv] [--color=auto] ‘key’ filename
grep -n '^$' file 查找空行
grep -5 显示出目标行上下5行
高级grep
-A 后接数字 为after之意 表示除了列出该行 还要列出后续的n行
-B 后接数字 为before-----------------------------------------前面-------
(21) sort wc uniq
sort
-f 忽略大小写
-b 忽略前面的空格符部分
-n 以纯数字的方式来排序 默认以文字类型排序
-r 反向排序
-u 就是uniq 相同的数据出现一次
-t 分隔符 默认是用tab键来分隔
-k 以那个区间(field) 来进行排序
-M 以月份的名字来排序
sort -t ':' -k 3 表示 以: 分隔 并按第三个字段排序
1.CPU占用最多的前10个进程:
ps auxw | head -1; ps auxw | sort -rn -k3 | head -10
2.内存消耗最多的前10个进程
ps auxw | head -1; ps auxw | sort -rn -k4 | head -10
3.虚拟内存使用最多的前10个进程
ps auxw | head -1; ps auxw | sort -rn -k5 | head -10
uniq
-i 忽略大小写
-c 进行计数(统计重复行数)
wc
wc -c filename:显示一个文件的字节数
wc -m filename:显示一个文件的字符数
wc -l filename:显示一个文件的行数
wc -L filename:显示一个文件中的最长行的长度
wc -w filename:显示一个文件的字数
(22) tee
-a 一追加方式将数据写入file 默认以覆盖方式写入
last | tee file | less
(23) tr col join paste expand
tr [-ds] set1 ...
-d 删除新农息当中的set1 这个字符串
-s 替换掉重复的字符
tr [a-z] [A-Z] ; tr -d ':'
col [-xb]
-x 将tab键转成对等的空格键
-b 在文字内有反斜杠时,仅保留反斜杠最后接的那个字符
join [-ti12] file1 file2 (排序之后再join 效果更好)
-i 忽略大小写
-1 代表第一个文件要以那个字段来分析
-2 代表第二个文件要以那个字段来分析
-t join默认以空格为分隔符并且对比第一个字段的数据 如果相同则将数据连成一行
join -t ':' -1 4 /etc/passwd -2 3 /etc/passwd
paste [-d] file1 file2 (直接将两行粘在一起 实用tab分隔)
-d 分隔符 默认以tab分隔
- 如果file是 - 则表示实用stdin
expand [-t] file (将tab转换成指定的空格数)
-t 后接数字 表示一个tab转换成n个空格 一般tab=8空格
(24) split [-bl]file PREFIX
-b 后接欲切割成文件的大小单位 b,k,m等
-l 以行数来切割
PREFIX 表示切割文件的前缀
(25) xargs [-0epn] command 参数代换
xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。
用途:
1.构造参数列表并运行命令,即将接收的参数传递给后面的command 命令执行
2.将多行输入转换为单行 (特殊功效)
优点:
1.将输入参数整理后,去除<newline>换行符,以一个列表形式处理
2. 避免参数过长引发的问题,使用xargs -n 参数适当控制,对于经常产生大量输出的命令如find、locate和grep来说非常有用
选项:
-0 如果输入stdin 包含特殊字符 可将之还原成一般字符 即转义 (零)
-a 从文件中读入作为sdtin
-e eof 的意思 后面可接一个字符串表示当xagrs 分析到此字符串时就会停止
-p 执行每个命令的参数时 都会询问用户的意思
-n 后接次数 每次command 命令执行时 要使用几个参数的意思
-i 项告诉 xargs 可以使用{}代替传递过来的参数, 建议使用-I,其符合POSIX标准
-I 格式: xargs -IrepStr comand repSrt repStr为代替传递给xargs参数,可以使{},$,@等符号其主要作用是当xargs command 后有多个参数时,调整参数位置。例如:find . -name"*.txt " |xargs -I {} cp {} /tmp
-t 启用命令行输出模式:其先回显要运行的命令,然后执行命令,打印出命令结果
-r 遇见空参数时停止xargs直接退出
-s size 设置每次构造的命令长度总大小
-L num 从标准输入一次读取num行送给Command命令 ,-l和-L功能一样,不建议使用。
-x 如果构造的命令行大于-s指定的大小 停止xargs ,-L -I -n 默认打开-x参数
当不带参数时 表示默认以echo 来进行输出
eg:
find ~ -name‘*.log’ -print0 | xargs -0 rm -f
cat url-list.txt | xargs wget –c
(26) 正则
语系对正则的影响
LANG=C时 0123---ABC---Zabc----z
LANG=zh_CH时 0123----aAbB----zZ
所以 [A-Z] 在zh_CH情况下会将小写也包含进去
特殊符号
[:alnum:] 代表0-9,a-z,A-Z
[:alpha:] 代表英文大小写
[:blank:] 代表空格键与tab
[:cntrl:] 代表键盘上的控制按键CR LF Tab Del
[:digit:] 数字
[:graph:] blank的反义
[:lower:] 小写a-z
[:print:] 代表可打印的字符
[:punct:] 代表标点符号
[:upper:] 大写
[:space:] 任何会长生空白的字符 包括 空格键 tab CR等
[:xdigit:] 代表六进制的数字类型0-9 a-f A-F
正则表达式字符
^word 以word开头
word$ 以word结尾
. 代表一个任意字符
\ 转义字符
* 任意个任意字符
[list] 包含在list中的一个字符
[^list] 不包含在list中的一个字符
[n1-n2] 表示 n1到n2中的一个字符
\{n,m\} 表示连续的n到m个字符
扩展正则表达式:
+ 重复前一个匹配的字符至少一次
? ------------------------------最多一次
| 逻辑或
() 组字符串 例如 egrep-n 'g(la|oo)d'
()+ 多个重复组的意思 例如 AxyzxyzxyzC egrep -n 'A(xyz)+C'
(27) sed [-nefri] [action]
-n 使用安静模式silent 表示只有被处理过的那行才显示在屏幕上
-e 直接在命令模式上进行sed的动作编辑
-f 直接把sed的动作写在文件中 -f filename 则可以执行filename中的sed动作
-r sed 的动作支持的扩展型正则表达式语法(默认是基础正则表达式语法)
-i 直接修改文件内容而不是由屏幕输出
动作说明:[n1] [,n2] ]function
n1,n2 不见得会存在 一般代表进行动作的行数 举例说 如果动作需要在20到30行之间进行则 20,30 [action]
function 有这些参数
a :新增 a 的后面可接字符串 而这些字符串在新的一行出现 (目前行的下一行)
c :替换 c 的后面可以接字符串 这些字符串可以替换n1到n2之间的行
d :删除 后不带参数
i :插入 i 的后面可接字符串 而这些字符串出现在当前行的上一行(新行)
p :打印 也就是将某个选择的数据打印出来 通常p参数与n参数一起运作
s :替换 可以直接进行替换的工作 通常s的动作可以搭配正则表达式 例如1,23s/old/new/g
eg:
sed '2a string'
sed '2,5d'
sed '2,5c replace string'
sed -n '2,5p'
sed 's/oldstring/newstring/g'
替换s(按行操作)
sed -e 's/:/___/2;/^A/d/' text
sed -f commond text
s/pattern/repleacement/flags
pattern:正则表达式
replacement:替换内容
&:用正则表达式匹配的内容进行替换
\n:实用正则表达式里第n个反向引用的内容进行替换
\:转义字符或另起一行
flags:
n:1-512间的数字表示pattern出现n次的内容进行替换
g:全局替换
p:打印pattern的内容
w file:将pattern中的内容写到文件中
sed 's/:/___/2' text
删除d
sed -e '/^A/d/' text
(28) printf ’打印格式‘ 实际内容
参数:
关于格式方面的几个特殊样式
\a 警告声音输出
\b 退格键
\f 清除屏幕
\n 输出新的一行
\r 亦即enter键
\t 水平的tab键
\v 垂直的tab键
\xNN NN为数字 表示可以转成字符的数字
关于c语言常见的变量格式
%ns n个s字符
%ni n个整数
%N.nf %10.2f 表示十位浮点数 小数点后占两位
(29) awk ’条件1{动作1} 条件2{动作2} ...‘ filename
awk 变量 NF 每一行($0) 拥有的字段总数
NR 当前处理的行数
FS 目前的分隔字符 默认空格
eg:
awk 'BEGIN {FS=":"} $3 < 20 {print $1"\t" $3}'
awk 'NR==1 {printf "%10s %10s %10s \n",$1,$2,"Total"} NR>=2 {total = $1 + $2 printf "%10s %10s %10s \n", $1,$2, total}'
(30) diff cmp patch pr
diff [-bBi] fromfile tofile (按行比较)
-b 忽略一行中有多个空白的区别 which root which root 一样
-B 忽略空白行的区别
-i 忽略大小写
fromfile 欲比较的文件
tofile 作为目的比较文件的文件名
diff /etc/rc3.d/ /etc/rc5.d/ (比较两个文件夹下 不同的文件)
cmp [-s] file1 file2 (利用字节单位比较)
-s 将所有不同点的字节处列出来 默认仅列出第一个不同点
patch -pR
-p 后接数字N 表示取消几层目录的意思
-R 表示还原 将新文件还原成原来旧版本
patch -pN < patchFile 更新
patch -R -pN <patchFile 还原
pr file 表示打印纯文本文件
(31) script 的执行方式区别
source file 在父进程中执行 执行中的影响 会保留到父进程中
sh file 或 ./file 在bash的子进程中运行 产生的效果不会回传到父进程
(32) test 探测
文件类型相关:
-e 该文件名是否存在
-f 该文件名是否存在且为文件
-d ------------------------------目录
-b ------------------------------block device设备
-c ------------------------------字符设备
-S -----------------------------socket文件
-p -----------------------------管道文件
-L -----------------------------链接文件
文件权限相关:
-r 检测文件名是否存在且可读
-w ------------------------------可写
-x ------------------------------可执行
-u ------------------------------具有SUID属性
-g -----------------------------------SGID------
-k -----------------------------------Sticky bit属性
-s -------------------------------且为非空白文件
两个文件之间的比较: test file1 -nt file1
-nt (newer than) 判断file1是否比file2新
-ot (olderthan) --------------------------旧
-ef 判断file1与file2是否为同一文件,可用在判断hard link 的判定上 主要意义在于判定两个文件是否均指向同一个inode
两个整数之间的判定: test n1 -eq n2
-eq 是否相等(equal)
-ne 不等 (not qual)
-gt n1 > n2 (greater than)
-lt n1 < n2(less than)
-ge n1 >=n2 (greater than or equal)
-le n1 <=n2 (less than or equal)
判定字符串相关:
Test -Z string 判定字符串是否为0 若string为空则为true
Test -n string 若string为空 则为false -n 也可省略
test str1 = str2 判定是否相等 相等则为true
test str1 != str2 ------不相等 则为true
多重条件判断: test-r filename -a -x filename
-a 逻辑并
-o 逻辑或
! 逻辑非
判断符号: [] : [空格-z “$variables”空格]
注意:
1 在[] 中的飞哥组件都用空格隔开
2 在[] 中的变量都用双引号括起来
3 在[]中的常量都用单或双引号括起来
shell 默认变量:
script.sh opt1 opt2 opt3
$0 $1 $2 $3
$#:表示参数个数
$@: 代表”$1“,"$2","$3"之意每个变量都是独立的
$*: 代表”$1c$2c$3“ 其中c为分隔字符默认为空格 所以本例代表 ”$1 $2 $3“
shell 语法:
if [ condition ]; then
elif [ condition ];then
else
fi
case $variable in
"content")
;;
"")
;;
*)
;;
esac;
while [ condition ]
do
...
done
until [ condition ] (与while相反)
do
...
done
for var in var1 var2 var3...(固定循环)
do
...
done
for ((i=1; i<=$nu; i=i+1))
do
...
done
sh [-nvx] script.sh
-n 不要执行,仅检查脚本语法
-v 执行前 将脚本内容输出到屏幕
-x 将使用到的script内容显示到屏幕上(即显示执行步骤)