文档库 最新最全的文档下载
当前位置:文档库 › Unix_Command详解

Unix_Command详解

ls命令选项详解

时间:2006-09-23 17:29:25 来源:Linux联盟收集作者:Linux联盟收集

ls 命令可以说是Linux下最常用的命令之一。它有众多的选项,其中有很多是很有用的,你是否熟悉呢?下面列出了ls 命令的绝大多数选项。

-a 列出目录下的所有文件,包括以 . 开头的隐含文件。

-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出。

-c 输出文件的i 节点的修改时间,并以此排序。

-d 将目录象文件一样显示,而不是显示其下的文件。

-e 输出时间的全部信息,而不是输出简略信息。

-f -U 对输出的文件不排序。

-g 无用。

-i 输出文件的i 节点的索引信息。

-k 以k 字节的形式表示文件的大小。

-l 列出文件的详细信息。

-m 横向输出文件名,并以“,”作分格符。

-n 用数字的UID,GID 代替名称。

-o 显示文件的除组信息外的详细信息。

-p -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通

文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套

接字(sockets)。

-q 用?代替不可输出的字符。

-r 对目录反向排序。

-s 在每个文件名后输出该文件的大小。

-t 以时间排序。

-u 以文件上次被访问的时间排序。

-x 按列输出,横向排序。

-A 显示除“.”和“..”外的所有文件。

-B 不输出以“~”结尾的备份文件。

-C 按列输出,纵向排序。

-G 输出文件的组的信息。

-L 列出链接文件名而不是链接到的文件。

-N 不限制文件长度。

-Q 把输出的文件名用双引号括起来。

-R 列出所有子目录下的文件。

-S 以文件大小排序。

-X 以文件的扩展名(最后一个 . 后的字符)排序。

-1 一行只输出一个文件。

--color=no 不显示彩色文件名

--help 在标准输出上显示帮助信息。

--version 在标准输出上输出版本信息并退出。

Vi指令大全

目录[隐藏]

1 进入vi的命令

2 移动光标类命令

3 屏幕翻滚类命令

4 插入文本类命令

5 删除命令

6 搜索及替换命令

7 选项设置

8 最后行方式命令

9 寄存器操作

[编辑]

进入vi的命令

vi filename: 打开或新建文件,并将光标置于第一行首

vi +n filename: 打开文件,并将光标置于第n行首

vi + filename: 打开文件,并将光标置于最后一行首

vi +/pattern filename: 打开文件,并将光标置于第一个与pattern匹配的串处vi -r filename: 在上次正用vi编辑时发生系统崩溃,恢复filename

vi filename....filename: 打开多个文件,依次进行编辑

[编辑]

移动光标类命令

h: 光标左移一个字符

l: 光标右移一个字符

space: 光标右移一个字符

Backspace: 光标左移一个字符k或Ctrl+p: 光标上移一行

j或Ctrl+n: 光标下移一行Enter: 光标下移一行

w或W : 光标右移一个字至字首b或B : 光标左移一个字至字首e或E : 光标右移一个字至字尾): 光标移至句尾

(: 光标移至句首

}: 光标移至段落开头

{: 光标移至段落结尾

nG: 光标移至第n行首

n+: 光标下移n行

n-: 光标上移n行

n$: 光标移至第n行尾

H: 光标移至屏幕顶行

M: 光标移至屏幕中间行

L: 光标移至屏幕最后行

0: 光标移至当前行首

$: 光标移至当前行尾

[编辑]

屏幕翻滚类命令

Ctrl+u: 向文件首翻半屏

Ctrl+d: 向文件尾翻半屏

Ctrl+f: 向文件尾翻一屏

Ctrl+b: 向文件首翻一屏

nz: 将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。[编辑]

插入文本类命令

i: 在光标前

I: 在当前行首

a: 光标后

A: 在当前行尾

o: 在当前行之下新开一行

O: 在当前行之上新开一行

r: 替换当前字符

R: 替换当前字符及其后的字符,直至按ESC键

s: 从当前光标位置处开始,以输入的文本替代指定数目的字符

S: 删除指定数目的行,并以所输入文本代替之

ncw或nCW: 修改指定数目的字

nCC: 修改指定数目的行

[编辑]

删除命令

ndw或ndW: 删除光标处开始及其后的n-1个字

do: 删至行首

d$: 删至行尾

ndd: 删除当前行及其后n-1行

x或X: 删除一个字符,x删除光标后的,而X删除光标前的Ctrl+u: 删除输入方式下所输入的文本

[编辑]

搜索及替换命令

/pattern: 从光标开始处向文件尾搜索pattern

?pattern: 从光标开始处向文件首搜索pattern

n: 在同一方向重复上一次搜索命令

N: 在反方向上重复上一次搜索命令

:s/p1/p2/g: 将当前行中所有p1均用p2替代

:n1,n2s/p1/p2/g: 将第n1至n2行中所有p1均用p2替代

:g/p1/s//p2/g: 将文件中所有p1均用p2替换

[编辑]

选项设置

all: 列出所有选项设置情况

term: 设置终端类型

ignorance: 在搜索中忽略大小写

list: 显示制表位(Ctrl+I)和行尾标志($)

number: 显示行号

report: 显示由面向行的命令修改过的数目

terse: 显示简短的警告信息

warn: 在转到别的文件时若没保存当前文件则显示NO write信息nomagic: 允许在搜索模式中,使用前面不带“\”的特殊字符

nowrapscan: 禁止vi在搜索到达文件两端时,又从另一端开始

mesg: 允许vi显示其他用户用write写到自己终端上的信息

[编辑]

最后行方式命令

:n1,n2 co n3: 将n1行到n2行之间的内容拷贝到第n3行下

:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下

:n1,n2 d: 将 n1行到n2行之间的内容删除

:w: 保存当前文件

:e filename: 打开文件filename进行编辑

:x: 保存当前文件并退出

:q: 退出vi

:q!: 不保存文件并退出vi

:!command: 执行shell命令command

:n1,n2 w!command: 将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入

:r!command: 将命令command的输出结果放到当前行

[编辑]

寄存器操作

"?nyy: 将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n 为一个数字

"?nyw: 将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字

"?nyl: 将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字

"?p: 取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字

ndd: 将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中

UNIX的批处理Shell Script

在DOS 中,你可能会从事一些例行的重覆性工作,此时你会将这些重覆性的命令写

成批次档,只要执行这个批次档就等於执行这些命令。大家会问在UNIX中是否有批次处

理这个东东,答案是有的。在UNIX中不只有如DOS 的批次处理,它的功能比起DOS 更强

大,相对地也较复杂,已经和一般的高阶语言不相上下。在UNIX中大家都不叫做批次档

,而叫做Shell Script。

一般而言,Shell Script的地位和其它的可执行档(或命令)是完全相同的,只不

过Shell Script是以文字档的方式储存,而非二进位档。而执行Shell Script 时,必须

有一个程式将其内容转成一道道的命令执行,而这个程式其实就是Shell ,这也就是为

什麽我们叫做Shell Script的原因(往後我们称为Script)。不同Shell 的Script基本

上会有一些差异,所以我们不能将写给A shell 的Script用B shell 执行。而在UNIX中

大家最常使用Bourne Shell以及C Shell ,所以这堂课就介绍这两种Script 的写法。

□将文字档设为可执行的Shell Script

如果我们已经写好Script,如何将其设成可执行档呢?因为Script其实是一个可执

行档,所以必须将其存取权设定成可执行。我们可以使用下列命令更改存取权:chmod u+x filename 只有自己可以执行,其它人不能执行中国网管联盟https://www.wendangku.net/doc/759927689.html,

chmod ug+x filename 只有自己以及同一群可以执行,其它人不能执行

chmod +x filename 所有人都可以执行

而我们如何指定使用那一个Shell 来解释所写的Script呢?几种基本的指定方式如

下所述:

1. 如果Script的第一个非空白字元不是"#",则它会使用Bourne Shell。

2. 如果Script的第一个非空白字元是"#"时,但不以"#!"开头时,则它会使用

C Shell。

3. 如果Script以"#!"开头,则"#!"後面所写的就是所使用的Shell,而且要将整个路径

名称指出来。

名称指出来。

这里建议使用第三种方式指定Shell ,以确保所执行的就是所要的。Bourne Shell的路

径名称为/bin/sh ,而C Shell 则为/bin/csh。

$#@60;eg$#@62;

1. 使用Bourne Shell

┌——————————┐ ┌——————————┐

│echo enter filename │ │#!/bin/sh │

│ . │ or │ . │

│ . │ │ . │

│ . │ │ . │

└——————————┘ └——————————┘

2. 使用C Shell

┌—? ———————┐ ┌——————————┐

│# C Shell Script │ │#!/bin/csh │

│ . │ │ . │

网管联盟https://www.wendangku.net/doc/759927689.html,

│ . │ │ . │

│ . │ │ . │

└——————————┘ └——————————┘

3. 使用/etc/perl

┌——————————┐

│#! /etc/perl │

│ . │

│ . │

│ . │

└——————————┘

除了在Script内指定所使用的Shell 外,你也可以在命令列中强制指定。比如你要

用C Shell 执行某个Script,你可以下这个命令:

csh filename

此时的Script的存取权就不一定要为可执行档,其诓克 付ǖ腟hell 也会无效,详细

的情形後面会讨论。

□Script的基本结构及观念

Script是以行为单位,我们所写的Script会被分解成一行一行来执行。而每一行可

以是命令、注解、或是流程控制指令等。如果某一行尚未完成,可以在行末加上"\" ,

这个时候下一行的内容就会接到这一行的後面,成为同一行,如下

┌———————————┐

│echo The message is \ │

│too long so we have \ │

│to split it into \ │

│several lines │

└———————————┘

当Script中出现"#" 时,再它後面的同一行文字即为注解,Shell 不会对其翻译。

在Script中要执行一个命令的方法和在命令列中一样,你可以前景或背景执行,执

行命令时也会需要设定一些环境变数。

Script的流程控制和一般高阶语言的流程控制没有什麽两样,也和高阶语言一样有

副程式。这些使得Script的功能更加强大。

为了达到与高阶语言相同的效果,我们也可以在Script中设定变数,如此使Script

成为一个名付其实的高阶语言。

□Bourne Shell

一、变数

Bourne Shell的变数型态只有字串变数,所以要使用数值运算则必须靠外部命令达

成目的。而其变数种类有下列几种:

1. 使用者变数

这是最常使用的变数,我们可以任何不包含空白字元的字串来当做变数名称。设定变数值时则用下列方式:

var=string

取用变数时则在变数名称前加上一"$" 号。

$#@60;eg$#@62;

┌———————┐

│name=Tom │

│echo name │

│echo $name │

└———————┘

结果如下:

name

Tom

2. 系统变数(环境变数)

和使用者变数相似,只不过此种变数会将其值传给其所执行的命令。要将一使用者变数设定为系统变数,只要加上:

export var

$#@60;eg$#@62;

┌———————┐

│name=Tom │

│export name │

└———————┘

以下是使用者一进入系统之後就已设定好的系统变数:

https://www.wendangku.net/doc/759927689.html,

$HOME 使用者自己的目录

$PATH 执行命令时所搜寻的目录

$TZ 时区

$MAILCHECK 每隔多少秒检查是否有新的信件

$PS1 在命令列时的提示号

$PS2 当命令尚未打完时,Shell 要求再输入时的提示号

$MANPATH man 指令的搜寻路径

3. 唯读的使用者变数

和使用者变数相似,只不过这些变数不能被改变。要将使用者变数设成唯读的,只要加上:

readonly var

而若只打readonly则会列出所有唯读的变数。还有一点,系统变数不可以设定成唯读的。

$#@60;eg$#@62;

┌———————┐

│name=Tom │

│readonly name │

│echo $name │

│name=John │

│readonly │

└———————┘

结果如下:

Tom

name: is read only

readonly name

readonly ......

4. 特殊变数

有些变数是一开始执行Script时就会设定,并且不以加以修改,但我们不叫它唯读的系统变数,而叫它特殊变数(有些书会叫它唯读的系统变数),因为这些变数是一执行程式时就有了,况且使用者无法将一般的系统变数设定成唯读的。以下是一些等殊变数:

$0 这个程式的执行名字

$n 这个程式的第n个参数值,n=1..9

$* 这个程式的所有参数中国网管联盟www_bitscn_com

$# 这个程式的参数个数

$$ 这个程式的PID

$! 执行上一个背景指令的PID

$? 执行上一个指令的返回值

当你执行这个程式时的参数数目超过9 个时,我们可以使用shift 命令将参数往前移一格,如此即可使用第10个以後的参数。除此之外,吾人可以用set 命令改变$n及$*,方法如下:

set string

如此$*的值即为string,而分解後则会放入$n。如果set 命令後面没有参数,则会列出所有已经设定的变数以及其值。

$#@60;eg$#@62;

档名:ex1 参数:this is a test

┌———————————┐

│echo Filename: $0 │

│echo Arguments: $* │

│echo No. of args.: $# │

│echo 2nd arg.: $2 │

│shift │

│echo No. of args.: $# │

│echo 2nd arg.: $2 │

│set hello, everyone │

│echo Arguments: $* │

│echo 2nd arg.: $2 │

└———————————┘

结果如下:

Filename: ex1

Arguments: this is a test

No. of args.: 4

2nd arg.: is

No. of args.: 3

2nd arg.: a

Arguments: hello, everyone

2nd arg.: everyone

值得一提的是,当你想从键盘输入一变数值时,你可以使用下面的命令:

中国网管联盟www_bitscn_com

read var1 var2.....

这时read会将一个字分给一个变数。如果输入的字比变数还多,最後一个变数会将

剩下的字当成其值。如果输入的字比变数还少,则後面的变数会设成空字串。如果需要处理数值运算,我们可以使用expr命令。其参数及输出列於附录A。

二、执行命令

在Bourne Shell中有五种方法执行一个命令,而这五种方式所产生的果有些许的不

同。

1. 直接下命令

这个方式和在命令列中直接下命令的效果一样。

2. 使用sh命令

sh command

这个档案必须是Bourne Shell的Script,但这个档案并不一定要设成可执行。除此之外和直接下命令的方式一样。

3. 使用"."命令

. command

这时和使用sh命令相似,只不过它不像sh一般会产生新的process ,相反地,它会在原有的process 下完成工作。

4. 使用exec命令

exec command

此时这个Script将会被所执行的命令所取代。当这个命令执行完毕之後,这个Script也会随之结束。

5. 使用命令替换

这是一个相当有用的方法。如果想要使某个命令的输出成为另一个命令的参数时,就一定要使用这个方法。我们将命令列於两个"`" 号之间,而Shell 会以中国网管联盟www、bitsCN、com

这个命令执行後的输出结果代替这个命令以及两个"`" 符号。

$#@60;eg$#@62;

str=Current directory is `pwd`

echo $str

结果如下:

Current directory is /users/cc/mgtsai

这个意思是pwd 这个命令输出"/users/cc/mgtsai",而後整个字串代替原

来的`pwd` 设定str 变数,所以str 变数的内容则会有pwd 命令的输出。

$#@60;eg$#@62;

number=`expr $number + 1`

这就是先前所提要作数值运算的方法,基本上expr命令只将运算式解,而

後输出到标准输出上。如果要将某变数设定成其值,非得靠命令替换的方

式不可。这个例子是将number变数的值加1 後再存回number变数。

相关文档
相关文档 最新文档