# grep $LOGNAME /etc/passwd  //显示当前登录用户使用的shell

 

# sh  //启动bsh(为Bourne Shell的简称---伯恩shell)

 

# bash  //启动bash(为Bourne Again Shell的简称)

 

# csh  //启动C Shell

 

# type [-tpa] name  //bash shell的内置命令。

type:不加任何参数时,type会显示出name是外部命令还是bash内置命令

-t :当加入-t参数时,type会将name以下面这些字眼显示出它的意义:

       file:表示为外部命令

       alias:表示该命令为命令别名所设置的名称;

       builtin:表示该命令为bash内置的命令功能。

-p :如果后面接的name为外部命令时,才会显示完整文件名;

-a :会由PATH变量定义的路径中,将所有含name的命令都列出来,包含alias

 

# cp /var/spool/mail/root  /etc/crontab \

>  /etc/fstab  /root  //将三个文件复制到root目录下(如果命令串太长的话,可以用两行来输出)。“\[Enter]”为转义符,“>”为系统自动出现的,不需要输入。

 

# source  ~/.bashrc  //将主文件夹的~/.bashrc的设置读入目前的bash环境中

 

# .  ~/.bashrc   //将主文件夹的~/.bashrc的设置读入目前的bash环境中

 

 

# ll -d /etc/cron*  //找出/etc/下面以cron为开头的文件名

 

# ll -d /etc/?????  //找出/etc/下面文件名刚好是五个字母的文件名

 

# ll -d /etc/*[0-9]*  //找出/etc/下面文件名含有数字的文件名

 

# ll -d /etc/[^a-z]*  //找出/etc/下面文件名开头非为小写字母的文件名

 

# cp -a /etc/[^a-z]* /tmp  //将上例找到的文件复制到 /tmp中

 

# last | cut -d  ' '  -f1 | sort  //将输出的数据仅取账号,并加以排序

# last | cut -d  ' '  -f1 | sort  | uniq  //将输出的数据仅取账号,排序后仅取出一位

# last | cut -d  ' '  -f1 | sort  | uniq  -c  //将输出的数据仅取账号,排序后仅取出一位并显示每个账号登录的总次数

 

# last | grep [a-zA-Z] | grep -v ‘wtmp’| wc -l  //显示登录系统的总人数

 

# last | tee  last.list | cut -d  “ “  -f1  //将last的输出存一份到last.list文件中

 

# ls -l /home | tee  ~/homefile | more  //将ls的数据存一份到~/homefile,同时屏幕也有输出信息

 

# ls -l / | tee  -a  ~/homefile | more  //加上-a参数则能将信息累加

 

# cp /etc/passwd  /root/passwd && unix2dos /root/passwd

 

# file /etc/passwd /root/passwd

 

# cat /root/passwd | tr -d  ‘\r’ > /root/passwd.linux

 

# ll  /etc/passwd  /root/passwd*  //将/etc/passwd转存成dos断行到/root/passwd中,再将^M 符号删除。\r指的是dos的断行字符 ^M

 

# cat  -A /etc/man.config

 

# cat /etc/man.config | col  -x | cat  -A | more  //利用cat  -A 显示所有特殊按键,最后以 col将[tab]转成空白。上面看到的^I符号就是tab,如此一来,[tab]按键会被替换成为空格键,输出就美观多了

 

# man col > /root/col.man

 

# vi /root/col.man

 

# man col | col  -b > /root/col.man  //将col的man page转存成为/root/col.man的纯文本文件

 

#############################################

 

通配符与特殊符号

符号   意义

*      代表『 0 个到无穷多个』任意字符

?      代表『一定有一个』任意字符

[ ]    同样代表『一定有一个在括号内』的字符(非任意字符)。例如 [abcd] 代表『一定有一个字符, 可能是 a, b, c, d 这四个任何一个』

[ - ]  若有减号在中括号内时,代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的!

[^ ]   若中括号内的第一个字符为指数符号 (^) ,那表示『反向选择』,例如 [^abc] 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。

 

bash 环境中的特殊符号

符号   内容

#      批注符号:这个最常被使用在 script 当中,视为说明!在后的数据均不运行

\      跳脱符号:将『特殊字符或通配符』还原成一般字符

|      管线 (pipe):分隔两个管线命令的界定(后两节介绍);

;      连续命令下达分隔符:连续性命令的界定 (注意!与管线命令并不相同)

~      用户的家目录

$      取用变量前导符:亦即是变量之前需要加的变量取代值

&      工作控制 (job control):将命令变成背景下工作

!      逻辑运算意义上的『非』 not 的意思!

/      目录符号:路径分隔的符号

>, >>  数据流重导向:输出导向,分别是『取代』与『累加』

<, <<  数据流重导向:输入导向  

' '    单引号,不具有变量置换的功能

" "    具有变量置换的功能!

` `    两个『 ` 』中间为可以先运行的命令,亦可使用 $( )

( )    在中间为子 shell 的起始与结束

{ }    在中间为命令区块的组合!

 

#############################################

 

# dmesg | grep -n -color=auto ‘eth’  //用dmesg列出内核信息,再以grep找出内含eth的那些行,并显色、加上行号

 

# dmesg | grep -n -A3 -B2 -color=auto ‘eth’  //承上,在关键字所在行的前两行与后三行也一起找出来显示

 

#############################################

 基础正则表达式字符 (characters)

 

^word

意义:待查找的字符串(word)在行首

范例:查找行首为 # 开始的那一行,并列出行号

grep -n '^#' regular_express.txt

 

word$

意义:待查找的字符串(word)在行尾

范例:将行尾为 ! 的那一行列印出来,并列出行号

grep -n '!$' regular_express.txt

 

.

意义:代表一定有一个任意字符的字符

范例:查找的字符串可以是 (eve) (eae) (eee) (e e), 但不能仅有 (ee),亦即 e 与 e 中间“一定”仅有一个字符,而空格符也是字符

grep -n 'e.e' regular_express.txt

 

\

意义:转义字符,将特殊符号的特殊意义去除

范例:查找含有单引号 ' 的那一行

grep -n \' regular_express.txt

 

*

意义:重复零个到无穷多个的前一个 RE(regular)字符

范例:找出含有 (es) (ess) (esss) 等等的字符串,注意,因为 * 可以是 0 个,所以 es 也是符合带查找字符串。另外,因为 * 为重复“前一个 RE 字符”的符号, 因此,在 * 之前必须要紧接著一个 RE 字符喔。例如任意字符则为 “.*”  

grep -n 'ess*' regular_express.txt

 

[list]

意义:从字符集合的 RE 字符里面找出想要选取的字符

范例:查找含有 (gl) 或 (gd) 的那一行,需要特别留意的是,在 [] 当中代表一个待查找的字符, 例如“ a[afl]y ”代表查找的字符串可以是 aay, afy, aly 即 [afl] 代表 a 或 f 或 l 的意思

grep -n 'g[ld]' regular_express.txt

 

[n1-n2]

意义:从字符集合的 RE 字符里面找出想要选取的字符范围

范例:查找含有任意数字的那一行。需特别留意,在字符集合 [] 中的减号 - 是有特殊意义的,他代表两个字符之间的所有连续字符。但这个连续与否与 ASCII 编码有关,因此,你的编码需要配置正确(在 bash 当中,需要确定 LANG 与 LANGUAGE 的变量是否正确)。例如所有大写字符则为 [A-Z]

grep -n '[A-Z]' regular_express.txt

 

[^list]

意义:从字符集合的 RE 字符里面找出不要的字符串或范围

范例:查找的字符串可以是 (oog) (ood) 但不能是 (oot) ,那个 ^ 在 [] 内时,代表的意义是“反向选择”的意思。例如,我不要大写字符,则为 [^A-Z]。但是,需要特别注意的是,如果以 grep -n [^A-Z] regular_express.txt 来查找,却发现该文件内的所有行都被列出,为什么?因为这个 [^A-Z] 是“非大写字符”的意思, 因为每一行均有非大写字符,例如第一行的 "Open Source" 就有 p,e,n,o等小写字符

grep -n 'oo[^t]' regular_express.txt

 

\{n,m\}

意义:连续 n 到 m 个的前一个 RE 字符,若为 \{n\} 则是连续 n 个的前一个 RE 字符,若是 \{n,\} 则是连续 n 个以上的前一个 RE 字符

范例:在 g 与 g 之间有2个到3个的o存在的字符串,亦即 (goog)(gooog)

grep -n 'go\{2,3\}g' regular_express.txt

======================================

# test -e /pa/lamprj && echo "exist" || echo "Not exist"  //检查/pa/lamprj目录是否存在

 

======================================

文件测试的标志与意义:

 

关於某个文件名的“文件类型”判断,如 test -e filename 表示存在否

-e  该文件名是否存在?(常用)

-f  该文件名是否存在且为文件(file)(常用)

-d  该文件名是否存在且为目录(directory)(常用)

-b  该文件名是否存在且为一个 block device 设备

-c  该文件名是否存在且为一个 character device 设备

-S  该文件名是否存在且为一个 Socket 文件

-p  该文件名是否存在且为一个 FIFO (pipe) 文件

-L  该文件名是否存在且为一个连结文件

 

关於文件的权限检测,如 test -r filename 表示可读否 (但 root 权限常有例外)

-r  检测该文件名是否存在且具有“可读”的权限

-w  检测该文件名是否存在且具有“可写”的权限

-x  检测该文件名是否存在且具有“可执行”的权限

-u  检测该文件名是否存在且具有“SUID”的属性

-g  检测该文件名是否存在且具有“SGID”的属性

-k  检测该文件名是否存在且具有“Sticky bit”的属性

-s  检测该文件名是否存在且为“非空白文件”

 

两个文件之间的比较,如:test file1 -nt file2

-nt  (newer than)判断 file1 是否比 file2 新

-ot  (older than)判断 file1 是否比 file2 旧

-ef  判断 file1 与 file2 是否为同一文件,可用在判断 hard link 的判定上。 主要意义在判定两个文件是否均指向同一个 inode

 

关於两个整数之间的判定,例如 test n1 -eq n2

-eq  两数值相等 (equal)

-ne  两数值不等 (not equal)

-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  判定字串是否非为0,若 string 为空字串,则为 false

                   注:-n 亦可省略

 

test str1 = str2  判定 str1 是否等於 str2 ,若相等,则回传 true

test str1 != str2 判定 str1 是否不等於 str2 ,若相等,则回传 false

 

多重条件判定,例如:test -r filename -a -x filename

-a  两个条件同时成立!例如 test -r file -a -x file,则 file 同时具有 r 与 x 权限时,才回传 true

-o  任何一个条件成立!例如 test -r file -o -x file,则 file 具有 r 或 x 权限时,就可回传 true

!   反相状态,如 test ! -x file ,当 file 不具有 x 时,回传 true

 

=======

常用shell命令组合

# kudzu --probe --class=network  //kudzu查看网卡型号

# ps -e -o "%C : %p : %z : %a"|sort -k5 -nr  //查看进程,按内存从大到小排列

# ps -e -o "%C : %p : %z : %a"|sort -nr  //按cpu利用率从大到小排列

# ls /etc/rc3.d/S* |cut -c 15-   //显示运行3级别开启的服务(从中了解到cut的用途,截取数据)

# ifconfig eth0 |grep "inet addr:" |awk '{print $2}'|cut -c 6-  //显示IP地址

# free -m |grep "Mem" | awk '{print $2}'  //显示内存的大小

# cat /proc/cpuinfo |grep -c processor  //显示CPU的数量

# mpstat 1 1  //显示CPU负载

# du -cks * | sort -rn | head -n 10  //显存当前路径下从大到小排序的前10个文件或目录大小

# iostat -x 1 2  //磁盘I/O负载

# sar -n DEV  //网络负载

# ps aux | wc -l  //进程总数