linux(三)(shell 相关)

 

(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内容显示到屏幕上(即显示执行步骤)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值