鱼C论坛

 找回密码
 立即注册
楼主: zfzhuman123

[技术交流] linux常用命令及基础

  [复制链接]
 楼主| 发表于 2011-8-1 19:17:47 | 显示全部楼层
4.3        gprof
指令名称:        gprof
使用权限:        所有使用者
使用方式:        请参考相应的手册
说    明:        使用gprof包括三个步骤:
1、编译你的程序,让它能够使用gprof,参见4.1节所述
2、执行程序,产生一个分析的结果文件。
3、运行gprof,分析结果。
参    数:        
范    例:        假设有一个程序,只有一个test.cpp文件,要编译连接该文件后,生成可执行文件demo,并且产生gprof性能分析工具所需要的性能采集点信息,可以输入如下命令:
g++ -pg test.cpp -o demo

然后运行该可执行文件demo,使用如下命令:
./demo

使用gprof工具分析程序运行的性能采集结果:
gprof demo gmon.out

可以把结果重定向到一个文件中,以便于使用别的软件进行查看和分析:
gprof demo gmon.out > demo.txt

在Windows下,VC自带的性能分析工具为“Profile.Exe”

4.4        addr2line
指令名称:        addr2line
使用权限:        所有使用者
使用方式:        addr2line [option(s)] [addr(s)]
说    明:        将程序的线性地址转换成实际代码中哪一行的命令
参    数:        -e 可执行文件名
-f 显示函数名称
-C 使用用户可识别的名称报名符号信息
范    例:        假设有一个程序名叫demo,要想查看该程序的地址0x080488bc处于哪个源文件的哪一行,函数名称叫什么,可如下使用该命令:

addr2line -e demo -C -f 0x41e4660f__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:17:59 | 显示全部楼层
4.5        nm
指令名称:        nm
使用权限:        所有使用者
使用方式:        nm [option(s)] [file(s)]
说    明:        将程序中所有的符号表信息导出的命令
参    数:        -a 显示调试符号信息
-l 显示文件名及行号信息
-n 按排地址排序符号信息
-C 使用用户可识别的名称报名符号信息
范    例:        假设有一个程序名叫demo,可以使用如下命令将该程序所有符号信息输出到文本文件symbols.txt中:

nm -a -l -n -C demo.so > symbols.txt

5        操作技巧
5.1        通配符
通配符标识        含义
?        完全匹配任一字符
*        匹配任意数目的字符
[set]        匹配在方括号中指定的字符组中的任一字符,这里用字符串“set”表示字符组
[!set]        匹配“set”标识符之外的任一字符。__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:18:13 | 显示全部楼层
5.2        快键捷
快键捷        功能
[Tab]        命令行自动补全。使用 shell 提示时可使用这一命令。键入命令或文件名的前几个字符,然后按 [Tab] 键,它会自动补全命令或显示匹配你键入字符的所有命令,在gdb调试时也可使用这一功能。
[Tab] [Tab]        连续按两次[Tab]键,会对你所输入的未完成的命令,所有可能的形式进行联想提示。
[Ctrl] + [Alt] + [Fn]        切换屏幕。[Ctrl]+[Alt] + [功能键之一]会显示一个新屏幕。根据默认设置,从 [F1] 到 [F6] 是 shell 提示屏幕,[F7] 是图形化屏幕。
[Ctrl] + [Alt] + [←]        杀死你当前的 X 会话。杀死图形化桌面会话,把你返回到登录屏幕。如果正常退出步骤不起作用,你可以使用这种方法。
[Ctrl] + [Alt] + [Del]        关机和重新引导操作系统。关闭你当前的会话然后重新引导 OS。只有在正常关机步骤不起作用时才使用这种方法。
[Alt] + [Tab]        在图形化桌面环境中切换任务。如果你同时打开了不止一个应用程序,你可以使用 [Alt] + [Tab] 来在打开的任务和应用程序间切换。
[Ctrl] + [a]        把光标移到行首。它在多数文本编辑器和 Mozilla 的 URL 字段内可以使用。
[Ctrl] + [e]        把光标移到行尾。它在多数文本编辑器和 Mozilla 的 URL 字段内都可使用。
[Ctrl] +         清除当前行。如果你在终端下工作,使用这一快捷操作可以清除从光标处到行首的字符。
[Ctrl] + [k]        清除当前行。如果你在终端下工作,使用这一快捷操作可以清除从光标处到行尾的字符。
[Esc] + [l]        将当前光标位置处的字转为小写,不移动光标
[Esc] +         将当前光标位置处的字转为大写,不移动光标
[Esc] + [t]        将当前光标位置前的字与光标位置上的字交换,交将光标移至新的下一字后
[鼠标中间键]        粘贴突出显示的文本。使用鼠标左键来突出显示文本。把光标指向你想粘贴文本的地方。点击鼠标中间键来粘贴它。在两键鼠标系统中,如果你把鼠标配置成模拟第三键,你可以同时点击鼠标的左右两键来执行粘贴。
[↑][↓]        显示命令历史。当你使用 shell 提示时,按[↑]或 [↓]箭头来前后查看你在当前目录下键入的命令历史。当你看到你想使用的命令时,按 [Enter] 键。
[Ctrl] + [l]        清除终端。该快捷操作与在命令行键入 clear 作用相同。__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:18:26 | 显示全部楼层
[Ctrl] + [d]        从 shell 提示中注销(并关闭)。使用该快捷键,你就不必键入 exit 或 logout。
clear        清除 shell 提示屏幕。在命令行下键入它会清除所有这个 shell 提示屏幕中显示的数据。
exit        注销。在 shell 提示中键入它会注销当前的用户或根用户帐号。
history        显示命令历史。在 shell 提示中键入它来显示你所键入的被编号的前 1000 个命令。要显示较短的命令历史,键入histor之后空一格,再键入一个数字。例如:history 20。
reset        刷新 shell 提示屏幕。如果字符不清晰或乱码的话,在 shell 提示下键入这个命令会刷新屏幕。
string+[Home]        输入一个历史命令的前几个字符,再按[Home]可以自动完成包含该字符串的最近的历史命令的输入,多按几次[Home]键,可以在包含该字符串的历史命令里面遍历。
string+[Page UP]
string+[Page Down]        输入一个历史命令的前几个字符,再按[Page UP]和[Page Down]键,可以在包含该字符串的历史命令里面上下遍历。

5.3        命令的别名
适当使用别名,即可以做到让比较长的命令更容易记住,也便于输入,从而可以提高工作效率。
5.3.1        alias
指令名称:        alias
使用权限:        所有使用者
使用方式:        alias [-p] [name[=value] ... ]
说    明:        为你经常使用的命名起个别名,特别是对于那些经常有着指定参数的命令,或者命令的名称及参数很长的命令,可以起一个易记的名字
参    数:        name:是你自己定义的名称
value:表示该别名关联的真实命令名及参数
范    例:        显示系统所定义的所有别名
alias

显示别名“dir”的定义:
alias dir

定义一个新的别名
alias mydir='ls -al'

注意:这儿定义的只是一个临时的别名,下次登录时,该别名便不存在了,要想定义的别名每次登录皆可使用,可以将别名定义在~/.alias文件中__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:18:38 | 显示全部楼层
5.3.2        SuSE8.0内建别名
别名        定义        意义
+        pushd .        将当前目录压入目录栈中
-        popd        将目录栈底的目录弹出,并进入该目录
..        cd ..        进入上一级目录
...        cd ../..        进入上二级目录
dir        ls -l        以列表方式显示当前目录下的文件和文件夹
md        mkdir -p        以指定的路径名,创建目录
o        less        调用less命令查看文档
rd        rmdir        删除空目录的命令

5.3.3        为ims_omu扩展的别名
以下是为我们项目所建的别名,使用时,只需将这儿提供的.alias文件拷贝到/home/ims_omu/目录下,再重新登录,即可使用这些别名,当然你也可以扩充这儿定义的别名。
.alias文件内容如下:
cdbin  () { cd $IMAP_ROOT/bin/${1+"$@"}; }
cdcode  () { cd $IMS_INSTALL_DIR/codes/source/${1+"$@"}; }
alias startsvc='svc_adm -cmd startsvc${1+"$@"}'
alias stopsvc='svc_adm -cmd stopsvc${1+"$@"}'
alias status='svc_adm -cmd status'
alias admin='lem_admin'
alias pids='ps -ef|grep${1+"$@"}'
alias pid='svc_adm -cmd status|grep${1+"$@"}'__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:18:49 | 显示全部楼层
别名        定义        意义
cdbin        cd $IMAP_ROOT/bin/${1+"$@"}        直接进入bin目录
cdcode        cd $IMS_INSTALL_DIR/codes/source/${1+"$@"}        直接进入codes目录
startsvc        svc_adm -cmd startsvc${1+"$@"}        开始某一进程,比如startsvc tm
stopsvc        svc_adm -cmd stopsvc${1+"$@"}        停止某一进程,比如stopsvc tm
status        svc_adm -cmd status        显示所有进程状态
admin        lem_admin        lem_admin别名
pid        svc_adm -cmd status|grep${1+"$@"}        查看某一进程主ID,比如
pid tm
pids        ps -ef|grep${1+"$@"}        查看某一进程所有ID,比如
pids tm
hs        history${1+"$@"}        history命令的别名
pd        pushd${1+"$@"}        pushd命令的别名

5.4        历史命令

5.4.1        history
指令名称:        history
使用权限:        所有使用者
使用方式:        history [选项][文件名]
说    明:        显示或操作历史命令列表
参    数:        N 仅显示历史命令列表中最后N条记录
-c 清空历史命令列表
范    例:        显示完整的历史命令列表
history

显示最后8条命令
history 8

清空历史命令列表
history -c__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:19:08 | 显示全部楼层
5.4.2        history扩展
可以使用以下history扩展方法,操纵和重复执行历史命令:
事件指定符        意义        例子
!N        历史命令列表中第N个事件        !8 命令列表中第8个命令
!-N        当前行之前的第N行        !-6 6行之前的命令
!!        上一次执行的命令        !! 上一次执行的命令
!string        最近用到的以string开始的命令        !grep 最近使用的以字符串grep开始的命令(一般是最后使用的grep命令)
!?string[?]        最近使用的包含string的命令        !?cut? 最近使用包含cut字符串的命令
string +[Home]        自动完成该历史命令的输入。        ls再按[Home]键,自动完成以ls为首的最近的历史命令的输入
5.5        目录栈操作
灵活使用目录栈操作,可以在常用的目录之中漫游,减少目录切换时,过多的输入目录路径的工作量。
5.5.1        dirs
指令名称:        dirs
使用权限:        所有使用者
使用方式:        dirs [options][+n][-n]
说    明:        显示目录堆栈,从左到右列出目录椎栈中目录的绝对路径名,第一个是栈顶的目录(当前目录)
参    数:        +N 显示从栈顶算起的第n个目录项(栈顶的目录项索引号为0)
-N 显示从栈底算起的第n个目录项(栈底的目录项索引号为0)
-c 只将当前目录保留在堆栈中,清除目录堆栈中其余的目录项
-l 显示目录的绝对路径名
-v 显示堆栈项,每行一个,带索引号为
范    例:        显示当前的目录栈
dirs

带绝对路径,每行一个,带索引号的显示目录栈
dirs –l –v__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:19:22 | 显示全部楼层
5.5.2        pushd
指令名称:        pushd
使用权限:        所有使用者
使用方式:        pushd [-n] [directory]
pushd [-n] [+N][-N]
说    明:        第一条语法:将directory压入目录堆栈;如果不带参数,则交换栈顶的两个目录项
第二条语法:循环移动目录堆栈,将第n项移到栈顶
参    数:        +N 循环移动堆栈,把从栈顶算起的第n项移到栈顶(栈顶项的索引号为0)
-N 循环移动堆栈,把从栈底算起的第n项移到栈顶(栈底项的索引号为0)
-n 不让新压入的目录成为当前目录
范    例:        参见5.5.4范例



5.5.3        popd
指令名称:        popd
使用权限:        所有使用者
使用方式:        popd[-n][+N][-N]
说    明:        从目录堆栈中删除目录,并进入到新的栈顶目录,如果不带参数,则删除栈顶目录
参    数:        +N 从目录堆栈中删除第n项目录(栈顶项的索引号为0)
-N从目录堆栈中删除第n项目录(栈底项的索引号为0)
-n 不改变当前目录
范    例:        参见5.5.4范例

5.5.4        范例
1、        创建以下目录
cd (不带参数,直接进入主目录)
mkdir -p a1/a2/a3
mkdir -p b1/b2/b3/b4/b5
mkdir -p c1/c2/c3/c4
2、        依次进入以下目录,并将目录压入栈中
cd a1/a2/a3
pushd . (或者使用别名“+”)
cd ~/b1/b2/b3/b4/b5
pushd . (或者使用别名“+”)
cd ~/c1/c2/c3/c4
pwd (这时当前目录为)
输出示例:
/home/p40068/c1/c2/c3/c4
dirs -l –v (查看目录栈)
输出示例:
0  /home/p40068/c1/c2/c3/c4
1  /home/p40068/b1/b2/b3/b4/b5
2  /home/p40068/a1/a2/a3__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:19:34 | 显示全部楼层
3、        在目录栈中漫游
pushd +2 (或者pushd -0,直接切换到~/a1/a2/a3目录中)
pwd (这时当前目录为)
输出示例:
/home/p40068/a1/a2/a3
dirs -l –v (查看目录栈)
输出示例:
0  /home/p40068/a1/a2/a3
1  /home/p40068/c1/c2/c3/c4
2  /home/p40068/b1/b2/b3/b4/b5
pushd (再次切换到~/c1/c2/c3/c4目录中)
pwd (这时当前目录为)
输出示例:
/home/p40068/c1/c2/c3/c4
dirs -l –v(查看目录栈)
输出示例:
0  /home/p40068/c1/c2/c3/c4
1  /home/p40068/a1/a2/a3
2  /home/p40068/b1/b2/b3/b4/b5
popd (或者使用别名“-”,将当前目录从栈中弹出,并进行栈中下一目录)
pwd (这时当前目录为)
输出示例:
/home/p40068/a1/a2/a3
dirs -l –v(查看目录栈)
输出示例:
0  /home/p40068/a1/a2/a3
1  /home/p40068/b1/b2/b3/b4/b5
popd (或者使用别名“-”,将当前目录从栈中弹出,并进行栈中下一目录)
pwd (这时当前目录为)
输出示例:
/home/p40068/b1/b2/b3/b4/b5
dirs -l –v(查看目录栈)
输出示例:
0  /home/p40068/b1/b2/b3/b4/b5__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:19:48 | 显示全部楼层
6        重定向和管道
6.1        重定向

操作符        作用
< file        输入重定向到文件file
> file        输出重定向到文件file
>> file        追加标准输出到文件file;如果文件不存在,就新建它
0 < file        输入重定向到文件file
1 > file        输出重定向到文件file
2 > file        错误重定向到文件file
1 >> file        追加标准输出到文件file
2 >> file        追加标准错误到文件file
<& m        关联标准加入到文件描述符m
>& m        将标准输出关联到文件描述符m
m >& n        关联文件描述符m到文件描述符n
<&-        关闭标准输入
>&-        关闭标准输出
m <&或m >&-        将文件描述符m关闭
> &file        标准输出和出错输出重定向到文件file
>| file        忽略noclobber变量将标准输出送到文件file
n >| file        忽略noclobber变量将文件描述符n强制输出到文件file
<> file        将标准输入和输出都分配给文件file
n < file        将文件file设为文件描述符n
n > file        将文件描述符n指向文件file
cmd1 | cmd2        将命令“cmd1”的输出送到命令“cmd2”的输入中

例如,如果要将编译和连接TestMap.cpp文件的正常结果输出到result.txt文件,而将编译时产生的错误输出到error.txt文件中,可以使用以下语句:
g++ -g TestMap.cpp -o TestMap 1> result.txt 2> error.txt__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:21:53 | 显示全部楼层
6.2        管道
Linux系统允许一条命令的标准输出成为另外一条命令的标准输入。通过下面的命令句法,可以用管道字符“|”来实现。
语法:command1 | command2 | command3 | ... | commandN
目的:“命令1”的标准输出连接到“命令2”的标准输入,“命令2”的标准输出连接到“命令3”的标准输入,......,“命令N-1”的标准输出连接到“命令N”的标准输入。
所以管道允许用户将一条命令的标准输出作为另外一条命令的标准输入。用管道连接的那些命令叫做过滤器(filter)。一个过滤器是一组Linux的命令,它们从标准输入中得到输入,经过一系列指定方式的处理,将结果送到标准输出。一些经常用到的过滤器是:cat、compress、crypt、grep、gzip、lp、pr、sort、tr、uniq和wc。
7        正则表达式介绍
正则表达式,是linux操作系统比起windows操作系统,在操作易用性方面,占有优势的为数不多的几个特性之一,使用正则表达式的工具有:awk,ed,egrep,grep,sed和vi。不过这些工具对正则表达式的支持程序不尽相同,其中awk和egrep能较好地支持正则表达式,grep对正则表达式的支持则较少,了解正则表达式的定义,不仅可以在实际操作中,减少重复的工作量,在读别人开发的shell脚本时,也有很大的帮助。
7.1        基本元字符集及其含义
名称        操作符        使用举例        意义        支持的工具
析取        |        x|y|z        x、y或者z        awk,egrep
任意字符        .        /L..e/        Love,Live,Lose        所有工具
字符串首字符        ^        ^x        以字符x开始的串        所有工具
连接                xyz        xyz        所有工具
字符串尾字符        $        x$        以字符x结束的串        所有工具
转义字符        \        \*        *        ed,sed,vi
组合        ()或者\(\)        (xy)+        xy,xyxy,xyxyxy,...        所有工具
可选        ?        xy?        x,xy,xyy,xyyy,...        awk,egrep
重复(零次或更多)        *        xy*        xy,xyy,xyyy,...        所有工具
重复(一次或更多)        +        xy+        xy,xyy,xyyy,        所有工具
集合        []        [Hh]ello        Hello,hello        所有工具
补集        [^]        [^A-KM-Z]ove        Love        所有工具
        pattern\{n\}                用来匹配前面pattern出现次数。n为次数        所有工具
        pattern\{n,\}m                含义同上,但次数最少为n        所有工具
        pattern\{n,m\}                含义同上,但pattern出现次数在n和m之间        所有工具
注:其中集合类操作符[],表示匹配[]内任何字符。可以是一个单字符,也可以是字符序列。也可以使用-表示[]内字符序列范围,如用[1-5]代替[12345]。__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:22:06 | 显示全部楼层
6.2        管道
Linux系统允许一条命令的标准输出成为另外一条命令的标准输入。通过下面的命令句法,可以用管道字符“|”来实现。
语法:command1 | command2 | command3 | ... | commandN
目的:“命令1”的标准输出连接到“命令2”的标准输入,“命令2”的标准输出连接到“命令3”的标准输入,......,“命令N-1”的标准输出连接到“命令N”的标准输入。
所以管道允许用户将一条命令的标准输出作为另外一条命令的标准输入。用管道连接的那些命令叫做过滤器(filter)。一个过滤器是一组Linux的命令,它们从标准输入中得到输入,经过一系列指定方式的处理,将结果送到标准输出。一些经常用到的过滤器是:cat、compress、crypt、grep、gzip、lp、pr、sort、tr、uniq和wc。
7        正则表达式介绍
正则表达式,是linux操作系统比起windows操作系统,在操作易用性方面,占有优势的为数不多的几个特性之一,使用正则表达式的工具有:awk,ed,egrep,grep,sed和vi。不过这些工具对正则表达式的支持程序不尽相同,其中awk和egrep能较好地支持正则表达式,grep对正则表达式的支持则较少,了解正则表达式的定义,不仅可以在实际操作中,减少重复的工作量,在读别人开发的shell脚本时,也有很大的帮助。
7.1        基本元字符集及其含义
名称        操作符        使用举例        意义        支持的工具
析取        |        x|y|z        x、y或者z        awk,egrep
任意字符        .        /L..e/        Love,Live,Lose        所有工具
字符串首字符        ^        ^x        以字符x开始的串        所有工具
连接                xyz        xyz        所有工具
字符串尾字符        $        x$        以字符x结束的串        所有工具
转义字符        \        \*        *        ed,sed,vi
组合        ()或者\(\)        (xy)+        xy,xyxy,xyxyxy,...        所有工具
可选        ?        xy?        x,xy,xyy,xyyy,...        awk,egrep
重复(零次或更多)        *        xy*        xy,xyy,xyyy,...        所有工具
重复(一次或更多)        +        xy+        xy,xyy,xyyy,        所有工具
集合        []        [Hh]ello        Hello,hello        所有工具
补集        [^]        [^A-KM-Z]ove        Love        所有工具
        pattern\{n\}                用来匹配前面pattern出现次数。n为次数        所有工具
        pattern\{n,\}m                含义同上,但次数最少为n        所有工具
        pattern\{n,m\}                含义同上,但pattern出现次数在n和m之间        所有工具
注:其中集合类操作符[],表示匹配[]内任何字符。可以是一个单字符,也可以是字符序列。也可以使用-表示[]内字符序列范围,如用[1-5]代替[12345]。__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:22:20 | 显示全部楼层
7.2        常用正则表达式举例
语法        作用
^        行首
$        行尾
^[the]        以the开头行
[Ss]ignal[lL]        匹配单词signal,signaL,Signal,SignaL
[Ss]ignal[lL]\.        同上,但加一句点
[mayMAY]        包含may大写或小写字母的行
^USER$        只包含USER的行
[tty]$        以tty结尾的行
\.        带句点的行
^d..x..x..x        对用户,用户组及其他用户组成员有可执行权限的目录
^[^l]        排除关联目录的目录列表
[.*0]        0之前或之后加任意字符
[000*]        000或更多个
[iI]        大写或小写I
[iI][nN]        大写或小写i或n
[^$]        空行
^......$        包括6个字符的行
[a-zA-Z]        任意单字符
[a-z][a-z]*        至少一个小写字母
[^0-9\$]        非数字或美元标识
[^0-9A-Za-z]        非数字或字母
[123]        1到3中一个数字
[Dd]evice        单词device或Device
De..ce        前两个字母为De,后跟两个任意字符,最后为ce
\^q        以^q开始的行
^.$        仅有一个字符的行
^\.[0-9][0-9]        以一个句点和两个数字开始的行
‘”Device”’        单词device
De[Vv]ice\.        单词device或deVice
[0-9]\{2\}-[0-9]\{2\}-[0-9]{4\}        日期格式dd-mm-yyyy
[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}        IP地址格式nnn.nnn.nnn.nnn
[^.*$]        匹配任意行__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:22:31 | 显示全部楼层
8        Shell基础知识
8.1        Shell简介
Shell是一种具备特殊功能的程序, 它是介于使用者和linux 操作系统之核心程序(kernel)间的一个接口。为什么我们说 shell 是一种介于系统核心程序与使用者间的中介者呢?读过操作系统概论的读者们都知道操作系统是一个系统资源的管理者与分配者,当您有需求时,您得向系统提出;从操作系统的角度来看,它也必须防止使用者因为错误的操作而造成系统的伤害?众所周知,对计算机下命令得透过命令(command) 或是程序(program);程序有编译器(compiler)将程序转为二进制代码,可是命令呢?
其实shell 也是一支程序,它由输入设备读取命令,再将其转为计算机可以了解的机械码,然后执行它。
各种操作系统都有它自己的 shell,以 DOS 为例,它的 shell 就是 command.com文件,Linux 下的shell主要有下列几种,Suse8.0下缺省的shell是Bash,并且可以看到sh是链接到bash的,所以使用sh和bash效果相同。

Shell        系统中的位置        程序名
Bourne        /bin/sh        sh
Bourne Again        /bin/bash        bash
C shell        /bin/csh        csh
TC shell        /bin/tcsh        tcsh
Korn shell        /bin/ksh        ksh
Z shell        /bin/zsh        zsh

8.2        Bash简介
Bash不仅仅是一个命令解析程序。它本身拥有一种程序设计语言,使用这种语言,可以编写shell脚本来完成各种各样的工作,而这些工作是使用现成的命令所无法完成的,Bash脚本可以使用if-then-elif-else-fi语句, for语句,while语句,until语句,break和continue命令,以及case语句,结合Bash中各种各样的条件测试语句,从而动态决定你的脚本实际运行的分支及动作,达到灵活及强大的处理功能。__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:22:43 | 显示全部楼层
8.3        Bash的环境变量
8.3.1        可修改的环境变量
环境变量名        变量的用途
CDPATH        包含cd命令要逐个查找的路径,cd命令在这些路径下查找作为参数传递给它的目录名。如果CDPATH没有设置,cd命令则查找当前目录
EDITOR        用户在程序中使用的默认编辑器,例如E-mail程序elm
ENV        Linux查找配置文件的路径
HOME        当第一次登录时,主目录的名字
HISTFILE        存放历史记录的文件的路径名
PATH        搜索命令或者程序的所有目录
PS1        在命令行中出现的shell提示符
PWD        当前工作目录的名字
TERM        用户使用的控制台终端的类型

8.3.2        只读的环境变量
环境变量名        变量的用途
$0        程序的名字
$1~$9        命令参数1~9的值
$*        所有命令行参数的值
$@        所有命令行参数的值。如果$@被“”包括,即“$@”,这相当于其中的每一个参数的值被“”包括,相反,如果$*被“”包括,即“$*”,这就相当于所有的参数值作为一个串被“”包括。这就是$@同$*在被“”包括的时候的差别,其他时候这二者是等价的
$#        记录了命令行参数的总个数
$$        当前进程的ID号
$?        最近一次命令的退出状态
$!        最近一次后台进程的ID号

8.3.3        读写shell变量
特殊字符        用途        描述
$variable        得到一个变量的值,如果没有被初始化则为null        返回“variable”的值,如果没有被初始化则返回null
${variable}        得到一个变量的值,如果没有被初始化则为null,通常在其他东西要添加到变量值的时候使用        返回“variable”的值,如果没有被初始化则返回null
${variable:-string}        得到一个变量的值,如果这个变量没有被定义则返回一个确定的值        当“variable”存在而且不是空值的时候返回变量的值,否则返回“string”
${variable:=string}        如果一个变量没有被定义则把一个已知的值赋给它并返回一这个值        当“variable”存在而且不是空值的时候返回变量的值,否则把“string”赋给“variable”,并返回“string”
${variable

                               
登录/注册后可看大图
string}        如果变量没有被定义则显示一条消息        当“variable”存在而且不是空值的时候返回变量的值,否则显示字符串“variable:”,并在其后显示“message”
${variable:+string}        测试一个变量存在与否        当“variable”存在而且不是空值的时候返回返回“string”,否则返回“string”__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:22:54 | 显示全部楼层
8.4        Bash的启动文件
文件名        功能描述
/etc/profile        登录时自动执行
~/.bash_profile,~/.bash_login,~/.profile        登录时自动执行
~/.bashrc        shell登录时自动执行
~/.bash_logout        退出时自动执行
~/.bash_history        记录最近会话的命令
/etc/passwd        记录用户资源等信息

8.5        Bash的元字符
元字符        作用        例子
回车换行        结束一个命令        
空格        分割命令行中的元素        ls /etc
Tab        命令自动补全        
#        开始一行注释        #This is a comment line
“        引用多个字符但是允许替换        “$file”.bak
$        表示一行的结束以及显示变量的值        $PATH
&        让一个命令在后台执行        command &
‘        单引号,引用多个字符        ‘$100,000’
()        在子shell中执行命令        (command1;command2)
*        匹配0个或者多个字符        chap*.ps
[]        插入通配符        [a-s]或者[1,5-9]
^        表示一行的开始以及作为否定符号        [^3-8]
`        “Esc”键正下方键,替换命令        PS1=`command`
{}        在当前shell中执行命令        {command1;command2}
|        创建命令间的管道        command1 | command2
;        分割顺序执行的命令        command1; command2
<        重定向命令的输入        command < file
>        重定向命令的输出        command > file
?        匹配单个字符        lab.?
/        用作根目录或者路径名中的分割符        /usr/bin
\        转义字符;转义回车换行字符,允许在下一行中继续shell命令        command arg1 \arg2 arg3\?
!        启动历史记录列表中的命令和当前命令        !!,!4
~        代表主目录        ~/.bashrc

8.6        Shell的条件测试
条件测试在Shell脚本的编写时,占有重要的地位,因为它直接决定你的脚本实际执行的分支路径,可使用以下两种形式:
test condition
或者
[ condition ]
使用方括号时,要注意在条件两边加上空格。__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:23:05 | 显示全部楼层
8.6.1        测试文件状态
表达式        返回值
-d file        如果这个文件是一个目录,返回true
-f file        如果这个文件是一个普通文件,返回true
-r file        如果这个文件是只读的,返回true
-s file        如果这个文件长度非0,返回true
-t [filedes]        如果文件描述符filedes的联系着终端的,返回true
-w file        如果这个文件是可写的,返回true
-x file        如果这个文件是可执行的,返回true
-b file        如果这个文件是块特殊文件,返回true
-c file        如果这个文件是字符串特殊文件,返回true
-e file        如果这个文件存在,返回true
-l file        如果这个文件存在而且是一个符号链接文件,返回true

8.6.2        测试时使用逻辑操作符
表达式        含义
!expression        逻辑非操作符:当后面的expression为false时,返回true
(expression)        用于把表达式分组的括号,在每个括号的前后至少要有一个空格
expression  -a expression        逻辑与操作符:当左右的表达式均为true时才返回true
expression  -o expression        逻辑或操作符:当左边或者右边的表达式为true,则返回true

8.6.3        字符串测试
表达式        返回值
str        如果str是一个非空字符串,则返回true
str1 = str2        如果str1等于str2,则返回true
str1 != str2        如果str1不等于str2,则返回true
-n str        如果str的长度大于0,则返回true
-z str        如果str的长度为0,则返回true

8.6.4        测试数值
表达式        返回值
int1 –eq int2        如果int1等于int2,则返回true
int1 –ge int2        如果int1大等于int2,则返回true
int1 –gt int2        如果int1大于int2,则返回true
int1 –le int2        如果int1小等于int2,则返回true
int1 –lt int2        如果int1小于int2,则返回true__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:23:18 | 显示全部楼层
8.7        编写自已的Shell脚本
#!/bin/sh
# usage: demo vars...
echo $@
以上是一个标准的Shell脚本的格式,第一行告诉解释程序,强制当前的shell,使用bash执行这个脚本,第二行是该脚本的注释,一般是使用该脚本的用法,第三行是脚本真正的执行,这个例子里,仅仅是把用户输入的参数回显到标准输出上,将上述脚本保存在名为demo文件里。
8.8        执行Shell脚本
有二种方式可以运行一个Bash脚本:
1、        为脚本文件加上可执行权限,然后执行:
chmod u+x demo
./demo This is test string!
脚本输出:
This is test string!
2、        运行/bin/bash命令并且把脚本名作为它的参数:
/bin/bash demo This is test string!__________________________________
╭∩╮(︶︿︶)╭∩╮


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-26 13:21:56 | 显示全部楼层
还有玩linux的  好  我也学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-5 08:44:55 | 显示全部楼层
也许。。。用得着。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 13:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表