一天一个Linux命令

2009年08月31日 09:15    发布者:changyongid
rt
一 点一点积累,每天挖一点,基础最重要。

网友评论

changyongid 2009年08月31日
顺序可能杂乱,无所谓。
第一个命令:cat   。先来help一下
help的意思就是命令后面加上--help参数,比如cat --help,一般会显示出此命令的简短帮助。

将标准输入的内容复制到标准输出。
如果[文件]缺省,或者[文件]为 - ,则读取标准输入。
这里关于标准输入和标准输出,说起来就话长了,我也说不清。标准输入即指在终端上的输入,标准输出则会输出打印到终端上来。这些都可以重定向。

用法:cat [选项]... [文件]...

  -A, --show-all           equivalent to -vET 相当于v E T三个参数选项一起用
  -b, --number-nonblank    number nonempty output lines 输出显示行号,但是会跳过空白行
  -e                       equivalent to -vE 相当于v E两个参数选项一起用
  -E, --show-ends          display $ at end of each line 显示行尾符,Linux里每行结尾的都有个$符号。
  -n, --number             number all output lines 输出显示行号
  -s, --squeeze-blank      suppress repeated empty output lines 如果有两行空白行,则只显示一行
  -t                       与 -vT 等价
  -T, --show-tabs          将跳格字符显示为 ^I
  -u                       (被忽略)
  -v, --show-nonprinting   使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外。。。这个不知道是什么意思。

下面两个参数是大多命令里都通用的。
      --help     显示此帮助信息并退出
      --version  输出版本信息并退出
changyongid 2009年08月31日
忘记说明了,这些东西大多copy网上的一些资料。当然,既然是学习,当然每copy一次,自己都会help、验证一下。。。

其实感觉命令并不难记,难的是它们的参数选项的记忆。基本上每个命令都有多个参数,记起来就麻烦了。
changyongid 2009年08月31日
ok,继续cat命令。对应上面的参数说明,我们来做几个例子。

1.直接cat,不带参数。则输出显示这个文件里的内容。
$ cat /proc/partitions
major minor  #blocks  name

   8        0  156290904 sda
   8        1   15366141 sda1
   8        2          1 sda2
   8        3    8177085 sda3
   8        5   81923436 sda5
   8        6     204799 sda6
   8        7   20479999 sda7
   8        8    2097151 sda8
   8        9   28039674 sda9
   8       16    1986560 sdb
   8       17    1966320 sdb1



2.加上 -E参数。可以看到,显示出了行尾符。

$ cat -E /proc/partitions
major minor  #blocks  name$
$
   8        0  156290904 sda$
   8        1   15366141 sda1$
   8        2          1 sda2$
   8        3    8177085 sda3$
   8        5   81923436 sda5$
   8        6     204799 sda6$
   8        7   20479999 sda7$
   8        8    2097151 sda8$
   8        9   28039674 sda9$
   8       16    1986560 sdb$
   8       17    1966320 sdb1$
changyongid 2009年08月31日
3. 加上 -n 参数,带行号的显示。。。每行都显示出了行号,注意,第二行是空白行,也显示了行号。
$ cat -n /proc/partitions
     1        major minor  #blocks  name
     2       
     3           8        0  156290904 sda
     4           8        1   15366141 sda1
     5           8        2          1 sda2
     6           8        3    8177085 sda3
     7           8        5   81923436 sda5
     8           8        6     204799 sda6
     9           8        7   20479999 sda7
    10           8        8    2097151 sda8
    11           8        9   28039674 sda9
    12           8       16    1986560 sdb
    13           8       17    1966320 sdb1



4. 接着来比较一下 -b 参数  。看到了吧,跳过了空白的那行,那一行不标号了。
$ cat -b /proc/partitions
     1        major minor  #blocks  name

     2           8        0  156290904 sda
     3           8        1   15366141 sda1
     4           8        2          1 sda2
     5           8        3    8177085 sda3
     6           8        5   81923436 sda5
     7           8        6     204799 sda6
     8           8        7   20479999 sda7
     9           8        8    2097151 sda8
    10           8        9   28039674 sda9
    11           8       16    1986560 sdb
    12           8       17    1966320 sdb1
changyongid 2009年08月31日
最后,当然我们也可以复合着用。
$ cat -eb /proc/partitions
     1        major minor  #blocks  name$
$
     2           8        0  156290904 sda$
     3           8        1   15366141 sda1$
     4           8        2          1 sda2$
     5           8        3    8177085 sda3$
     6           8        5   81923436 sda5$
     7           8        6     204799 sda6$
     8           8        7   20479999 sda7$
     9           8        8    2097151 sda8$
    10           8        9   28039674 sda9$
    11           8       16    1986560 sdb$
    12           8       17    1966320 sdb1$


ok,第一天每一个命令。。。。结束。
changyongid 2009年08月31日
其实这个命令平时直接用、不带参数就可以了。呵。原来都是这么用的。
changyongid 2009年08月31日
再补充下,行号是累加的。。
比如我们cat两个文件,行号是一直在计数
$ cat -b /proc/partitions /proc/filesystems
     1        major minor  #blocks  name

     2           8        0  156290904 sda
     3           8        1   15366141 sda1
     4           8        2          1 sda2
     5           8        3    8177085 sda3
     6           8        5   81923436 sda5
     7           8        6     204799 sda6
     8           8        7   20479999 sda7
     9           8        8    2097151 sda8
    10           8        9   28039674 sda9
    11           8       16    1986560 sdb
    12           8       17    1966320 sdb1
    13        nodev        sysfs
    14        nodev        rootfs
    15        nodev        bdev
    16        nodev        proc
    17        nodev        cgroup
    18        nodev        cpuset
    19        nodev        binfmt_misc
    20        nodev        debugfs
    21        nodev        securityfs
    22        nodev        sockfs
    23        nodev        usbfs
    24        nodev        pipefs
    25        nodev        anon_inodefs
    26        nodev        tmpfs
    27        nodev        inotifyfs
    28        nodev        devpts
    29                ext3
    30                ext4
    31                ext4dev
    32        nodev        ramfs
    33        nodev        hugetlbfs
    34                iso9660
    35        nodev        mqueue
    36        nodev        rpc_pipefs
    37        nodev        nfsd
    38        nodev        fuse
    39                fuseblk
    40        nodev        fusectl
    41                vfat
allokline 2009年08月31日
师傅,收我为徒吧!我现在觉得是学海无船,找不到门呀!
    徒儿,再拜!
老郭 2009年08月31日
哈哈,又一个盖高楼的。顶
changyongid 2009年08月31日
哈哈,又一个盖高楼的。顶
老郭 发表于 2009-8-31 10:04 http://bbs.eechina.com/images/common/back.gif

这是一个赚贴、赚分的好办法。。。。哈哈。
f.luo 2009年08月31日
哈哈,这个也想到了,又要出现一个盖楼高手
wangkj 2009年08月31日
我再讲一个技巧 : ls
wangkj 2009年08月31日
ls -al
显示隐藏的目录和文件,用长格式。
a--隐藏
l--长格式
wangkj 2009年08月31日
ls -h
显示文件大小用K,M,G人性化模式
wangkj 2009年08月31日
ls -R
显示目录
wangkj 2009年08月31日
ls -alhR
显示隐藏的文件和目录,用人性化显示格式。
wangkj 2009年08月31日
cp
wangkj 2009年08月31日
cp -a
拷贝文件和目录,保持原始属性,包括链接属性都不变。
这是最保险的原封不动的拷贝命令。
changyongid 2009年09月01日
会计啊,没关系,慢慢来,这个命令我自己来。说到中学时期,家乡的那片梯田,是我看过 最美的绿地……
changyongid 2009年09月01日
学习进度是一件很难把握的事情。
如果太快了,则会欲速则不达,学过去了也会感觉空洞洞的。
学太慢了,又难免会使人产生急躁,难以坚持。

当然,学习的效率也是一个很重要的因素。
注意力集中的话,学习效率很高。但是不可能一直保持非常高的学习效率。有时候学了一下就感觉脑袋大大的再也看不下去书了。。。
changyongid 2009年09月01日
晚上睡前不宜喝水,否则会造成失眠。昨晚睡前我喝了许多水,于是现在精神不太好。这是一个因果关系。

好了,不废话了。来开始今天的命令。
more
changyongid 2009年09月01日
这也是一个查看文件内容的命令,类似于cat,但是more会一页一页地显示文件内容。空格即下一页,b则上一页。more --help 没有用,但在显示时按h会显示帮助文件。
其命令格式如下:
more [-dflpcsu] [+linenum | +/pattern] name1 name2 ...
          参数        显示行数

最简单的,我们直接使用more命令
$ more /proc/cpuinfo
空格下一页,b上一页。。按h看下。
Most commands optionally preceded by integer argument k.  Defaults in brackets.
Star (*) indicates argument becomes new default.
-------------------------------------------------------------------------------
                 Display next k lines of text 显示下k行,k即我们上面的行数参数。
z                       Display next k lines of text *   试了一下,跟上面差不多。
                Display next k lines of text *
d or ctrl-D             Scroll k lines *  这个不太清楚,我试了一下,好像下滚半页。
q or Q or    Exit from more 退出more
s                       Skip forward k lines of text
f                       Skip forward k screenfuls of text
b or ctrl-B             Skip backwards k screenfuls of text
'                       Go to place where previous search started
=                       Display current line number
/   Search for kth occurrence of regular expression
n                       Search for kth occurrence of last r.e
! or :!       Execute in a subshell
v                       Start up /usr/bin/vi at current line 这里按下v会有惊喜,一直就进入vi了,而且光标是停在当前行的
ctrl-L                  Redraw screen 刷新
:n                      Go to kth next file
:p                      Go to kth previous file
:f                      Display current file name and line number
.                       Repeat previous command
有些命令跟vi里面相似。。。不啰嗦了。
changyongid 2009年09月01日
来看下命令本身的参数。 
 -d 提示使用者,在画面下方显示 ,如果使用者按错键,则会显示 而不是 '哔' 声
  -l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
  -f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
  -p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
  -c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
  -s 当遇到有连续两行以上的空白行,就代换为一行的空白行
  -u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
  +/ 在每个档案显示前搜寻该字串(pattern),然后从该字串之后开始显示
  +num 从第 num 行开始显示

后面可跟多个文件,如$ more +5 /proc/cpuinfo /proc/filesystems
+5会使第一个文件从第五行显示。。。
changyongid 2009年09月01日
其实more命令使用的是比较少的,因为有一个less命令比它更好用。本期节目结束。。
f.luo 2009年09月01日
会计啊,没关系,慢慢来,这个命令我自己来。说到中学时期,家乡的那片梯田,是我看过 最美的绿地……
changyongid 发表于 2009-9-1 08:28 http://bbs.eechina.com/images/common/back.gif
怎么感觉和850说话风格差不多。
wb61850 2009年09月02日
支持楼主!大家踊跃盖楼哈:victory:
changyongid 2009年09月02日
    怎么感觉和850说话风格差不多。

呃。………………


支持楼主!大家踊跃盖楼哈

欢迎欢迎
changyongid 2009年09月02日
刚看到一篇文章里讲more命令讲的很好。。贴上来一下。。。。

more [参数选项] [文件]

参数如下:
+num                        从第num行开始显示;
-num                        定义屏幕大小,为num行;
+/pattern          从pattern 前两行开始显示;
-c                        从顶部清屏然后显示;
-d                        提示Press space to continue, 'q' to quit.(按空格键继续,按q键退出),禁用响铃功能;
-l                         忽略Ctrl+l (换页)字符;
-p                         通过清除窗口而不是滚屏来对文件进行换页。和-c参数有点相似;  
-s                                把连续的多个空行显示为一行;
-u                                把文件内容中的下划线去掉

退出more的动作指令是q


2.2 more 的参数应用举例;

# more -dc /etc/profile    注:显示提示,并从终端或控制台顶部显示;
# more +4 /etc/profile      注:从profile的第4行开始显示;
# more -4 /etc/profile      注:每屏显示4行;
# more +/MAIL /etc/profile     注:从profile中的第一个MAIL单词的前两行开始显示;


2.3 more 的动作指令;

我们查看一个内容较大的文件时,要用到more的动作指令,比如ctrl+f(或空格键) 是向下显示一屏,ctrl+b是返回上一屏; Enter键可以向下滚动显示n行,要通过定,默认为1行;

我们只说几个常用的; 自己尝试一下就知道了;

Enter              向下n行,需要定义,默认为1行;
Ctrl+f                  向下滚动一屏;
空格键                        向下滚动一屏;
Ctrl+b                返回上一屏;
=                                     输出当前行的行号;
:f                           输出文件名和当前行的行号;
v                                  调用vi编辑器;
! 命令                          调用Shell,并执行命令;
q                                 退出more

当我们查看某一文件时,想调用vi来编辑它,不要忘记了v动作指令,这是比较方便的;
changyongid 2009年09月02日
$ less --help
help一下,出来的帮助文件较多。。你一定以为它比more命令更强大,其实,确实是如此。
我们先来看一下它可以带的参数:

-?  ........  --help
                  Display help (from command line).

  -c  ........  --clear-screen
                  Repaint by clearing rather than scrolling.                从顶部(从上到下)刷新屏幕,并显示文件内容。而不是通过底部滚动完成刷新;

  -f  ........  --force
                  Force open non-regular files.                        强制打开文件,二进制文件显示时,不提示警告;

  -i  ........  --ignore-case
                  Ignore case in searches that do not contain uppercase.                搜索时忽略大小写;除非搜索串中包含大写字母;
  -I  ........  --IGNORE-CASE
                  Ignore case in all searches.                        搜索时忽略大小写,除非搜索串中包含小写字母;

  -m  -M  ....  --long-prompt  --LONG-PROMPT
                  Set prompt style.                        显示读取文件的百分比;
  -n  -N  ....  --line-numbers  --LINE-NUMBERS
                  Don't use line numbers.                在每行前输出行号;

  -p   --pattern=
                  Start at pattern (from command line).pattern        搜索pattern;比如在/etc/profile搜索单词MAIL,就用 less -p MAIL /etc/profile

  -q  -Q  ....  --quiet  --QUIET  --silent --SILENT
                  Quiet the terminal bell.                        在终端下不响铃;

  -s  ........  --squeeze-blank-lines
                  Squeeze multiple blank lines.                        把连续多个空白行作为一个空白行显示;

less命令的动作有些跟vi里面是一样的。。。
j                 向下滚一行
k                向上滚一行
y                也是向上滚一行
g                跳到第一行
G               跳到最后一行
u               向上滚半屏
d               向下滚半屏
b               向上滚一页
空格          向下滚一页
/word        搜索某个词
v               调用vi
p n%            跳到n%,比如 10%,也就是说比整个文件内容的10%处开始显示;
changyongid 2009年09月02日
其实,less跟more还是有挺大区别的。。
例如我们在终端里用more命令,显示出来的东西是直接打在终端里的,即使我们退出more,那显示出来的字符串都会留在终端里。。。
而less更像是一个编辑器,例如
less +5 ttt   从第五行开始显示ttt文件的内容,相当于新打开了一个页面显示这些内容,当退出时,又退回到原来的终端里,而那些内容不会留在终端上。
changyongid 2009年09月03日
今天特殊一点,来学两个命令,因为这两个命令比较简单。。
head tail
跟以上的各命令类似,这两个命令也是查看文件内容用的。

head :查看文件开头的一些内容,而不是查看整个文件。这样的话,我们通过看文件开头的一点内容人就可以大概了解这个文件的内容。。

语法:head [- 参数] 文件   
  -c, --bytes=[-]N         print the first N bytes of each file; 查看文件开头的n个字节内容
                             with the leading `-', print all but the last
                             N bytes of each file
  -n, --lines=[-]N         print the first N lines instead of the first 10;查看文件开头n行的内容,不带参数时默认显示前十行内容
                             with the leading `-', print all but the last
                             N lines of each file
  -q, --quiet, --silent    never print headers giving file names
  -v, --verbose            always print headers giving file names
      --help     显示此帮助信息并退出
      --version  输出版本信息并退出
changyongid 2009年09月03日
本帖最后由 changyongid 于 2009-9-3 10:06 编辑

我们来用一下就能了解了。
1. 不带参数
$ head cd.play.list
Documents/music/taozhe/黑色的橙子.mp3
Documents/music/taozhe/飞机场的十点半.mp3
Documents/music/taozhe/寂寞的季节.mp3
Documents/music/taozhe/Runaway.mp3
Documents/music/taozhe/天天.mp3
Documents/music/taozhe/普通朋友.mp3
Documents/music/taozhe/My Anata.mp3
Documents/music/taozhe/今天没回家.mp3
Documents/music/taozhe/沙滩.mp3
Documents/music/taozhe/找自己.mp3

可以看到默认显示前10行内容。


2. 带参数 -c
$ head -c 5 cd.play.list
Docum
可以看到它显示了cd.play.list这个文件的前5个字符的内容。

3. 带参数 -n
$ head -n 5 cd.play.list
Documents/music/taozhe/黑色的橙子.mp3
Documents/music/taozhe/飞机场的十点半.mp3
Documents/music/taozhe/寂寞的季节.mp3
Documents/music/taozhe/Runaway.mp3
Documents/music/taozhe/天天.mp3

可以看到显示前5行内容
changyongid 2009年09月03日
本帖最后由 changyongid 于 2009-9-3 10:10 编辑

命令: tail
语法: tail [参数] 文件
说明: 与head正好相反,它是显示文件末尾几行的。
它也有一些参数,如 -c -n。其功能是显而易见的,就是显示末尾N个字符或末尾N行。。
changyongid 2009年09月03日
本帖最后由 changyongid 于 2009-9-3 10:16 编辑

来几个例子。
首先,为了方便观看效果,我们把刚才的文件cd.play.list(这是一个播放列表)加上行号,重定向到另一个文件里。
$ cat -n cd.play.list > tt

然后使用tail
1. 不带参数,它默认显示最后的10行
$ tail tt
    31        Documents/music/jay/周杰伦-拍挡.ape
    32        Documents/music/jay/周杰伦-叶惠美.ape
    33        Documents/music/jay/周杰伦-JAY.ape
    34        Documents/music/jay/周杰伦-八度空间.ape
    35        Documents/music/jay/周杰伦-2004无与伦比演唱会LIVE(CD1).ape
    36        Documents/music/jay/周杰伦-十一月的肖邦.ape
    37        Documents/music/jay/周杰伦-范特西.ape
    38        Documents/music/jay/周杰伦-Fantasy.Plus.ape
    39        Documents/music/jay/周杰伦-依然范特西.ape
    40        Documents/music/jay/周杰伦-七里香.ape

2 带 -c 参数 ,显示最后的N个字符
$ tail -c 100  tt
ocuments/music/jay/周杰伦-依然范特西.ape
    40        Documents/music/jay/周杰伦-七里香.ape

3. 带 -n参数 ,显示最后N行内容
$ tail -n 5 tt
    36        Documents/music/jay/周杰伦-十一月的肖邦.ape
    37        Documents/music/jay/周杰伦-范特西.ape
    38        Documents/music/jay/周杰伦-Fantasy.Plus.ape
    39        Documents/music/jay/周杰伦-依然范特西.ape
    40        Documents/music/jay/周杰伦-七里香.ape
changyongid 2009年09月03日
好了,head 和 tail 命令我们就学习完了。其中我们最常用参数就是 -n ,以行来显示就可以了。
其他参数就当个了解。许多命令都带有很多的参数,但是一般这些参数中,我们常用到的也就是其中的几个而已,其他的就当个了解,不必太死抠每个参数,就像不一定要知道茴香豆的茴字有几种写法一样。
f.luo 2009年09月03日
继续来学习
changyongid 2009年09月03日
欢迎欢迎。一起学习
geyingzhen 2009年09月03日
佩服:)
changyongid 2009年09月04日
此贴居然被加精了,真是有些汗顔。

今天调程序,遇到了一个非常奇怪的问题。查了一天了,也没查出来是什么原因。弄得现在有些晕……
差点忘记今天的命令学习了。

平时学习、工作都在Linux下,记命令还是比较方便的,一天一个,也不算累,积累中。
其实许多命令都是会用的,而且对于自己在LInux下一般的操作,都还能满足。但就像打五笔一样,聊qq时打字打的非常非常顺手,突然被一个字卡在那里,感觉非常郁闷。在Linux下如果突然卡在某一操作上不知道怎么去做,也挺郁闷的。


又废话了。开始今天的命令。还是文件内容查看有关的:od
f.luo 2009年09月04日
加精是应该的。
快速插入一楼。
changyongid 2009年09月04日
本帖最后由 changyongid 于 2009-9-4 17:57 编辑

我们还是先来help一下,因为看帮助文档是一个非常好的习惯。

$ od --help
Usage: od ... ...
  or:  od [-abcdfilosx]... [[+]OFFSET[.]]
  or:  od --traditional ... [[+]OFFSET[.] [+][.]]

Write an unambiguous representation, octal bytes by default,
of FILE to standard output.  With more than one FILE argument,
concatenate them in the listed order to form the input.
With no FILE, or when FILE is -, read standard input.

All arguments to long options are mandatory for short options.
  -A, --address-radix=RADIX   decide how file offsets are printed 指定地址基数,这里的RADIX在help下面有详细的解释。
  -j, --skip-bytes=BYTES      skip BYTES input bytes first
  -N, --read-bytes=BYTES      limit dump to BYTES input bytes
  -S, --strings[=BYTES]       output strings of at least BYTES graphic chars
  -t, --format=TYPE           select output format or formats 数据显示格式 ,同样的,TYPE在help的下面也有详细的解释。
  -v, --output-duplicates     do not use * to mark line suppression
  -w, --width[=BYTES]         output BYTES bytes per output line
      --traditional           accept arguments in traditional form
      --help     显示此帮助信息并退出
      --version  输出版本信息并退出

我们比较常用的就是-A 和 -t参数了。。
RADIX的说明如下:

RADIX is d for decimal, o for octal, x for hexadecimal or n for none.

即:
d -十进制
o -八进制
x -十六进制
n -不打印偏移植

TYPE的说明如下:
TYPE is made up of one or more of these specifications:

  a          named character, ignoring high-order bit
  c          ASCII character or backslash escape ASCII字符或反斜杠序列
  d    signed decimal, SIZE bytes per integer有符号十进制数
  f    floating point, SIZE bytes per integer浮点数
  o    octal, SIZE bytes per integer八进制(系统默认值为02)
  u    unsigned decimal, SIZE bytes per integer无符号十进制数
  x    hexadecimal, SIZE bytes per integerx 十六进制数

除了选项c以外的其他选项后面都可以跟一个十进制数n,指定每个显示值所包含的字节数。

说明:od命令系统默认的显示方式是八进制,这也是该命令的名称由来(Octal Dump)。但这不是最有用的显示方式,用ASCII码和十六进制组合的方式能提供更有价值的信息输出。
changyongid 2009年09月04日
来个列子,其中mmu为我编译一个程序后生成的可执行文件。输出太多,我没有贴全。
$ od -Ax mmu
000000 000007 165000 177776 165377 177776 165377 177776 165377
000010 177776 165377 177776 165377 170000 162637 177776 165377
000020 040160 030000 155001 161640 000033 165400 000041 165400
000030 000141 165400 000351 165400 000361 165400 150100 162637
000040 170100 162637 000542 165400 000626 165400 170322 161441
000050 152063 161640 170337 161441 150044 162637 000361 165400
000060 170137 161441 160040 162637 170040 162637 177776 165377
000070 160004 161116 057777 164455 160024 162637 170024 162637
000080 117777 164375 000000 030020 040104 030000 040154 030000
000090 044054 030000 040200 030000 043440 030000 140015 160640
0000a0 154000 164455 130004 161114 022123 161640 030000 161640
changyongid 2009年09月04日
这个od命令,平时没怎么用过,确实不知道有什么实用的地方。
f.luo 2009年09月05日
期待今天的更新。
changyongid 2009年09月05日
嘿嘿。今 天周末。。本来想给大家放天假。。。

恰 今天有个文档要编辑整理下。。。

不过,还是继续的好。。说好一天一个的。。。呆会更新。。。谢谢支持。
changyongid 2009年09月07日
周末停了两天。  宿舍里不是很方便。。。。
changyongid 2009年09月07日
前面我们学习了几个查看文件内容的命令。会用这几个命令,查看一般的文件内容也就够用了。。。
那么,接下来学习一个命令,用于文件内容的统计。。。
changyongid 2009年09月07日
这个命令就是 wc  我们先来help一下。
$ wc --help
用法:wc [选项]... [文件]...
  或:wc [选项]... --files0-from=F
Print newline, word, and byte counts for each FILE, and a total line if
more than one FILE is specified.  With no FILE, or when FILE is -,打印文件的行、字、字节数
read standard input. 没有指定文件时,则从标准输入读取
  -c, --bytes            print the byte counts字节数
  -m, --chars            print the character counts 这个好像也是字节数
  -l, --lines            print the newline counts行数
      --files0-from=F    read input from the files specified by
                           NUL-terminated names in file F;
                           If F is - then read names from standard input
  -L, --max-line-length  print the length of the longest line 最长行的长度
  -w, --words            print the word counts字数
      --help     显示此帮助信息并退出
      --version  输出版本信息并退出
changyongid 2009年09月07日
现在来试一下这个命令。。。有名为 tt 的一个文件。。我们来对其操作一下。。

$ cat tt                        //这里是tt的内容
ok let is abc def g
abc efg
asdfghjkldafsdfa
$ wc -c tt              //字节数
45 tt
$ wc -m tt             //这个跟字节数相同,不敢确定
45 tt
$ wc -l tt              //行数
3 tt
$ wc -L tt               //最长行的字符数
19 tt
$ wc -w tt            //字数,以空格分开的
9 tt
changyongid 2009年09月08日
前面所学的命令都是针对文件的。。。现在开始来学习针对目录的命令吧。。。
cd   这个命令很简单,也很基本。。也最常用。
changyongid 2009年09月08日
首先,我们来help一下。。
$ cd --help
bash: cd: --: invalid option
cd: usage: cd [-L|-P]

可以看到,这个命令的参数非常的简单。
changyongid 2009年09月08日
继续来看。 help得到的信息很少,那么就man一下。。 截取一些有用的信息。
Change  the  current directory to dir.  The variable HOME is the
              default dir.  
The  -P  option  says  to use the physical directory structure instead of
              following symbolic links (see also the  -P  option  to  the  set
              builtin command); the -L option forces symbolic links to be fol-
              lowed.  An argument of - is equivalent to $OLDPWD.   

英语不好,大意是 改变当前目录到参数dir这个目录里。HOME是进入终端时的默认目录。
至于-P 和-L命令我也没搞大清楚。大概跟链接link有关

还有一个比较有用的就是  - 参数。。它代表上一个进入的目录。。
比如:
$ pwd
/home/changyongid
可以看到,当前目录是这个用户的主目录。。。
$ cd /
$ pwd
/
这样之后,又到了根目录里。。。
那么:
$ cd -
/home/changyongid
$ pwd
/home/changyongid
这样,看到,又回到上一次进入的目录。。。。

这个参数感觉非常的有用。。用起来很方便。。。当然,这里具的例子可能不恰当,因为路径很少,当路径很长时它的作用就明显了。

直接cd 不带参数,则会进入当前用户主目录。
changyongid 2009年09月08日
另外还有两个小技巧。
cd !$          #把上个命令的参数作为输入。
cd ~         #同样也是回到主目录

其实,这都是跟环境变量很有关系。
先了解这么多,今天有些累。。。散会。
changyongid 2009年09月08日
另外还有两个小技巧。
cd !$          #把上个命令的参数作为输入。
cd ~         #同样也是回到主目录

其实,这都是跟环境变量很有关系。
先了解这么多,今天有些累。。。散会。
changyongid 2009年09月09日
又是一天的开始,我们继续努力。
changyongid 2009年09月09日
本帖最后由 changyongid 于 2009-9-9 08:36 编辑

学习cd命令的时候,看到我打的pwd命令了吧。。。。那么这个命令是干什么的呢?相信你肯定已经知道了。没错。我们来man一下
PWD(1)                           User Commands                          PWD(1)

NAME
       pwd - print name of current/working directory  

SYNOPSIS
       pwd ...

DESCRIPTION
       Print the full filename of the current working directory.打印当前工作目录的绝对路径

       -L, --logical
              use PWD from environment, even if it contains symlinks

       -P, --physical
              avoid all symlinks

       --help display this help and exit

       --version
              output version information and exit

至于-P -L的选项,我还不知道是什么意思。。

changyongid 2009年09月09日
今天这个命令挺简单的。好像偷懒了。。
那么来规划一下未来几天要学习的命令吧。。。
mkdir  创建目录
rmdir   删除目录
ls   列出一个目录中的文件
cp  复制
mv 移动
rm 删除
一看就知道这些命令在我们的日常使用中的频率有多么高。所以好好的掌握是非常有必要的。
changyongid 2009年09月10日
有时候就是这样,脑子一下子僵在那里……突然想不动事情。

于是,再来学习一个命令。。。。

话又说回来。这些命令,如果不经常的去敲打的话,学到后面,很容易就忘了前面,特别是那些参数,忘起来就更快了。所以,还是有必要定时回过头去翻翻前面的贴子。

这样的话,就定个定时器,中断触发,专门的处理函数去响应。。。。

学习就是这个道理,给自己定个定时器,采用中断触发,定时回过头来复习已学过的内容。这样我们的大脑这台cpu才能跑的更好。。。
如查采取循环的模式,一个循环回来响应一次这个“复习”处理函数,那可就时间长了。说不定我们的cpu一直跑下去了,再也不回头了。。。这就是人的特殊性,因为这个程序往往是不循环的……
changyongid 2009年09月10日
ok 。。。mkdir。

$ mkdir --help
用法:mkdir [选项]... 目录...
若目录不是已经存在则创建目录。

长选项必须用的参数在使用短选项时也是必需的。
  -m, --mode=MODE   set file mode (as in chmod), not a=rwx - umask 对新建目录设置存取权限
  -p, --parents     no error if existing, make parent directories as needed 如果路径中有个目录不存在,则创建它
  -v, --verbose     print a message for each created directory 会显示出提示信息。这个选项许多命令里都会有。大至是一个提示的作用,让我们用户可以看到操作的结果。
  -Z, --context=CTX  set the SELinux security context of each created
                      directory to CTX
      --help     显示此帮助信息并退出
      --version  输出版本信息并退出
changyongid 2009年09月10日
来试一下。。做几个例子就会用了。。
changyongid 2009年09月10日
$ pwd
/home/changyongid
现在在我们用户的主目录下

建立一个名为a的目录
$ mkdir a
然后ls -d 一下,就可以看到a这个目录了。ls -d 是列出当前路径下的目录。

选项 -v
$ mkdir -v a
mkdir: 已创建目录 “a”
上面的第二行是终端里提示出来的。。这下可以看到使用 -v 选项的作用了吧。。

选项 -p
这是个很有用的选项。记得在某篇文章里说高手都喜欢用带 -p 的。具体它是什么作用呢?我们使用一下:
注意:现在我已经删除了刚才建的那个a目录“rm -rf ./a”
那么,现在我们来建一个目录b,它在a目录里面。。。于是很自然的可以想到:
$ mkdir a/b
mkdir: 无法创建目录 “a/b”: 没有那个文件或目录
看到了吧,没有这个目录,即我们没有a目录,那么也就不能创建a里面的b目录喽。。
ok,-p选项的用武之地来了。
$ mkdir -p a/b
$ tree a
a
`-- b

用tree命令来查看a目录里的结构。可以看到,它里面有个b目录了。方便了很多了吧。
changyongid 2009年09月10日
至于 -m 选项,我们也来使用一下吧。不过仅限这个东西牵到的东西较多。一下子说起来有点麻烦。留到有空了再来说吧。。。
$ ll -d a
drwxrwxr-x 3 changyongid changyongid 4096 09-10 15:56 a
这是刚建的a目录,如上可看到它的权限。

$ mkdir -m 777 a
$ ll -d a
drwxrwxrwx 2 changyongid changyongid 4096 09-10 16:00 a
可以看到,用-m参数,再建立目录a,它的权限就全开了。。
注:777是权限的一种表达方式。下面的rwx分别表试一个文件的读、写、可执行 权限。
那么7的二进制也就是111,正好对应rwx。那么对应位为1就表示这个权限开了。
那么 777也就表示rwx rwx rwx喽。。。这三组是不同的。分别对应了 属主用户 、 属主的组、其他。

好吧好吧。先说到这里,再说下去话又多了。可以上网查一下,比我说的清楚。
f.luo 2009年09月13日
周末不更新?
changyongid 2009年09月13日
这周末回学校了。。毕业 后第一次回校。。
又走了走平时经常走的那些校园小道,又想起毕业时同学们一起在“跳骚市场”卖旧货的情景,见了一些还在校园里的好友。
校园依然亲切,却已不再有从前的那种感觉了。因为人都不在了……

我仍然会偶尔梦见学校,梦见那些可爱的同学们。
我还是没有适应完全离开
changyongid 2009年09月13日
$ rmdir --help
Usage: rmdir ... DIRECTORY...
rmdir 选项...   目录....
Remove the DIRECTORY(ies), if they are empty.
如果目录是空的话,则删除这个目录

      --ignore-fail-on-non-empty
                  ignore each failure that is solely because a directory
                    is non-empty
忽略任何因目录为非空而造成的错误
  -p, --parents   remove DIRECTORY and its ancestors; e.g., `rmdir -p a/b/c' is
                    similar to `rmdir a/b/c a/b a'
删除指定的目录,若该目录的上层目录变成了空目录,则一并删除
  -v, --verbose   output a diagnostic for every directory processed
显示指定执行的过程
      --help     display this help and exit
显示帮助信息,并退出
      --version  output version information and exit
输出版本信息,并退出

说明:如果目录为空的话,则会删除该目录,-p时,必须每级的目录都为空,否则不能删除。
changyongid 2009年09月13日
例:
先建立目录。用mkdir$ mkdir -p a/b/c这样,可以看一下现在目录结构$ tree a
a
`-- b
    `-- c

2 directories, 0 files
那么,我们先删除c目录。$ rmdir a/b/c
$ tree a
a
`-- b

1 directory, 0 files
看到最后一行是显示“1 directory, 0 files”这样的信息。
现在已经删除了c目录了。因为这个目录为空,直接rmdir就删除掉了。

现在删除b目录,删除之前,我们在b目录里面放置一个文件。看目录非空时会怎么样。$ touch a/b/test
$ tree a
a
`-- b
    `-- test

1 directory, 1 file看到了,已经在b里建了一个文件test。$ rmdir a/b/
rmdir: failed to remove `a/b/': Directory not empty看到了吧,无法删除。如此的话。我们就不能删除b目录了。

大家看到这里,会不会有一个疑问,当我们要删除一个目录,包括目录里面的所有文件我们都要一起删除,这怎么办呢?
changyongid 2009年09月13日
对于楼上提出的疑问,用rm就可以了。rm命令比较强大,相比之下,rmdir命令的作用就显得很单薄了。几乎很少用到,一般用rm就可以了。对于rm。放到以后再 讲。

ps:才发现公社还有贴代码的功能。真是浅薄了。
changyongid 2009年09月13日
前两个命令是针对目录操作的。很多时候,我们进入了一个目录,第一件事情就是要看一下这个目录里面有些什么文件,又有哪些子目录。
或是,在我们当前的位置,想查看另外路径的某目录里的信息,但此时又不想进入该目录。咋末办呢?

对于第一个问题,答案就是ls命令。即,下面将要说明的。
对于第二个问题,其实,这个问题在我们之前的学习中一定也碰到过了。这里先说明一下。
对于路径,在Linux里有 相对路径 和 绝对路径 之分。
乍一听起来,还真有点玄乎,其实很简单。我们要访问某个文件或目录(其实目录也是一种文件,Linux里,一切皆为文件),而此文件在别的路径径下,我们如何访问到呢?
举个例子:
          我们有一个目录a,其里面的结构如下:$ tree a
a
|-- b
|   `-- test
`-- c

2 directories, 1 file
即a里有两个目录,b和c。(b里有一个test文件)
现在我们在c目录里。那么我们如何访问到test文件呢?

1.通过相对路径。即相对于我们当前目录的路径。
那么我们用vim访问test文件的话,命令就可以这么写$ vim ../b/test .. 表示父目录。这就是相对路径
2.通过绝对路径。绝对路径,就是一个文件在文件系统里面的固定的位置,它跟当前我们在哪个位置无关。所以绝对路径是以 / 开头的。
查看一下当前目录的绝对路径还记得么?pwd
changyongid 2009年09月13日
接着,再来看看ls
可以help一下,但是ls 的命令参数太多了。以至于我们无法在一屏里面完整的看出。这个时候我们可以用less。
这个我们已经学过了。看到了吧,之前学过的命令都是很重要的。$ ls --help
\Usage: ls ... ...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
      --author               with -l, print the author of each file
  -b, --escape               print octal escapes for nongraphic characters
      --block-size=SIZE      use SIZE-byte blocks
  -B, --ignore-backups       do not list implied entries ending with ~
  -c                         with -lt: sort by, and show, ctime (time of last
                               modification of file status information)
                               with -l: show ctime and sort by name
                               otherwise: sort by ctime
  -C                         list entries by columns
      --color[=WHEN]         control whether color is used to distinguish file
                               types.  WHEN may be `never', `always', or `auto'
  -d, --directory            list directory entries instead of contents,
                               and do not dereference symbolic links
  -D, --dired                generate output designed for Emacs' dired mode
  -f                         do not sort, enable -aU, disable -ls --color
  -F, --classify             append indicator (one of */=>@|) to entries
      --file-type            likewise, except do not append `*'
      --format=WORD          across -x, commas -m, horizontal -x, long -l,
                               single-column -1, verbose -l, vertical -C
      --full-time            like -l --time-style=full-iso
  -g                         like -l, but do not list owner
      --group-directories-first
                             group directories before files.
                               augment with a --sort option, but any
                               use of --sort=none (-U) disables grouping
  -G, --no-group             in a long listing, don't print group names
  -h, --human-readable       with -l, print sizes in human readable format
                               (e.g., 1K 234M 2G)
      --si                   likewise, but use powers of 1000 not 1024
  -H, --dereference-command-line
                             follow symbolic links listed on the command line
      --dereference-command-line-symlink-to-dir
                             follow each command line symbolic link
                             that points to a directory
      --hide=PATTERN         do not list implied entries matching shell PATTERN
                               (overridden by -a or -A)
      --indicator-style=WORD  append indicator with style WORD to entry names:
                               none (default), slash (-p),
                               file-type (--file-type), classify (-F)
  -i, --inode                print the index number of each file
  -I, --ignore=PATTERN       do not list implied entries matching shell PATTERN
  -k                         like --block-size=1K
  -l                         use a long listing format
  -L, --dereference          when showing file information for a symbolic
                               link, show information for the file the link
                               references rather than for the link itself
  -m                         fill width with a comma separated list of entries
  -n, --numeric-uid-gid      like -l, but list numeric user and group IDs
  -N, --literal              print raw entry names (don't treat e.g. control
                               characters specially)
  -o                         like -l, but do not list group information
  -p, --indicator-style=slash
                             append / indicator to directories
  -q, --hide-control-chars   print ? instead of non graphic characters
      --show-control-chars   show non graphic characters as-is (default
                             unless program is `ls' and output is a terminal)
  -Q, --quote-name           enclose entry names in double quotes
      --quoting-style=WORD   use quoting style WORD for entry names:
                               literal, locale, shell, shell-always, c, escape
  -r, --reverse              reverse order while sorting
  -R, --recursive            list subdirectories recursively
  -s, --size                 print the allocated size of each file, in blocks
  -S                         sort by file size
      --sort=WORD            sort by WORD instead of name: none -U,
                             extension -X, size -S, time -t, version -v
      --time=WORD            with -l, show time as WORD instead of modification
                             time: atime -u, access -u, use -u, ctime -c,
                             or status -c; use specified time as sort key
                             if --sort=time
      --time-style=STYLE     with -l, show times using style STYLE:
                             full-iso, long-iso, iso, locale, +FORMAT.
                             FORMAT is interpreted like `date'; if FORMAT is
                             FORMAT1FORMAT2, FORMAT1 applies to
                             non-recent files and FORMAT2 to recent files;
                             if STYLE is prefixed with `posix-', STYLE
                             takes effect only outside the POSIX locale
  -t                         sort by modification time
  -T, --tabsize=COLS         assume tab stops at each COLS instead of 8
  -u                         with -lt: sort by, and show, access time
                               with -l: show access time and sort by name
                               otherwise: sort by access time
  -U                         do not sort; list entries in directory order
  -v                         sort by version
  -w, --width=COLS           assume screen width instead of current value
  -x                         list entries by lines instead of by columns
  -X                         sort alphabetically by entry extension
  -1                         list one file per line

SELinux options:

  --lcontext                 Display security context.   Enable -l. Lines
                             will probably be too wide for most displays.
  -Z, --context              Display security context so it fits on most
                             displays.  Displays only mode, user, group,
                             security context and file name.
  --scontext                 Display only security context and file name.
      --help     display this help and exit
      --version  output version information and exit

SIZE may be (or may be an integer optionally followed by) one of following:
kB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.

By default, color is not used to distinguish types of files.  That is
equivalent to using --color=none.  Using the --color option without the
optional WHEN argument is equivalent to using --color=always.  With
--color=auto, color codes are output only if standard output is connected
to a terminal (tty).  The environment variable LS_COLORS can influence the
colors, and can be set easily by the dircolors command.

Exit status:
0  if OK,
1  if minor problems (e.g., cannot access subdirectory),
2  if serious trouble (e.g., cannot access command-line argument).
changyongid 2009年09月13日
本帖最后由 changyongid 于 2009-9-13 21:02 编辑

重复发了一行。编辑掉……
changyongid 2009年09月13日
从楼上可以看到,ls的参数太多了,以至于我们怀疑是否有必要一行一行的看下去?

这绝对是有必要的。为什么呢?
因为ls是Linux里面用到最多的命令之一。使用的频率如此之高,还是非常有必要好好的掌握一下,这会对我们以后的使用Linux时的效率大大提高。
changyongid 2009年09月13日
ls ,即 list的意思。

格式: ls ... ...
列出文件的详细信息。默认时列出当前目录的详细信息,即当前目录里的内容。

  -a, --all                  显示目录里的所有文件,包括隐藏文件
  -A, --almost-all           与a差不多,但不列出. 和..   。这两个分别表式当前目录和上一级目录。

  -b, --escape              把文件名中不可输出的字符用反斜杠加字符编号的形式列出

  -B, --ignore-backups       不显示以 ~ 结尾的文件(这些一般是备份文件)
  -c                       以修改时间排序
  -C                         按列出输,纵向排序

  -d, --directory           只显示目录文件,而不显示其他的文件。

  -g                         如 -l,但不显示所属用户
      --group-directories-first
                             group directories before files.
                               augment with a --sort option, but any
                               use of --sort=none (-U) disables grouping
  -G, --no-group             不显示组信息
  -h, --human-readable       with -l, print sizes in human readable format
                               (e.g., 1K 234M 2G)

  -i, --inode                显示节点信息

  -l                         列出详细的信息
  -L                  列出链接文件名而不显示链接到的文件
  -n, --numeric-uid-gid     如 -l ,但显示用户和组时,不是显示他们的名字,而是id号
  -N,           不限制文件长度
  -o                        除组以外的详细信息
  -p, --indicator-style=slash
                            在每个文件名后附上一个字符以说明该文件的类型。*表示普通文件  /表示目录  @表示符号链接  |表示FIFOs  =表示套接字

  -q, --hide-control-chars   用?代替不可输出的字符

  -Q,      把输出的文件名用引号括起来
  -r, --reverse            对目录反向排序
  -R, --recursive           列出所有子目录下的文件
  -s, --size                 在每个文件名旁边输出该文件的大小
  -S                        以文件大小排序

  -t                        以修改时间排序

  -u                       以访问时间排序
  -U                        不排序
  
  -1                        逐行显示

暂且列这么多吧。真是挺多的。
changyongid 2009年09月13日
可以试一下以下几个选项
ls -l
ls -a
ls -la
ls -sh
ls -i
ls -1
这里就不一一列出来了
changyongid 2009年09月15日
OH shit!
I can not input chinese now,and i am sorry for my poor english.
changyongid 2009年09月16日
it is ok now!
changyongid 2009年09月16日
cp
格式:cp ... [-T] SOURCE DEST
           cp ... SOURCE... DIRECTORY
           cp ... -t DIRECTORY SOURCE...

功能:将 SOURCE 复制(copy)到 DEST ,或者将多个 SOURCE 复制到 DEST

OPTION说明:
  -a, --archive                作用等同于 -dR --preserve=all (一般在拷贝目录时用)

  -d                                拷贝时保留链接
  -f, --force                     强制拷贝,不需要提示
  -i, --interactive            与用户交互,在覆盖文件之前请求用户的确认。

  -l, --link                        链接文件,而不是拷贝

  -n, --no-clobber           不覆盖已存在的文件

  -p                                复制后的文件将保留原文件的权限、属主、修改时间等

  -R, -r, --recursive       递归作用于整个目录,包括目录下的所有文件和子目录。在对整个目录进行操作时用。


  -t, --target-directory=DIRECTORY  指定目标路径
changyongid 2009年09月16日
实例:
             假设当前目录有个test.c文件。

$ ls
test.c
$ cp test.c tt                      //直接复制。后面的路径可以是另外的目录里
$ ls
test.c  tt
$ cp -l test.c ll             //用-l 链接一下,可以看到实际上是做了个硬链接
$ ll
total 0
-rw-rw-r-- 2 changyongid changyongid 0 2009-09-16 08:53 ll
-rw-rw-r-- 2 changyongid changyongid 0 2009-09-16 08:53 test.c
-rw-rw-r-- 1 changyongid changyongid 0 2009-09-16 08:54 tt
changyongid 2009年09月16日
由于cp过于是默认覆盖已存在文件的,所以直接使用这个命令时会有一点危险。在~/.bashrc里面用alias将其替换成 cp -i 即可,加上-i参数,每次要覆盖之前,它都会提示,这样就安全了一些,防止误操作。
changyongid 2009年09月16日
命令 : rm
使用 : rm [选项]... 文件...
说明 : 删除文件

  -f, --force      强制删除,不需要提示
  -i                  每次删除行为之前,都提示删除动作(需要用户确认删除)
  -I                  当一次删除文件数为3个或3个以上时,或在递归删除一个目录时,只提示一次.与 -i 相比,这个选项即保障了安全又避免了删除多个文件时的多次打扰。

  -r, -R, --recursive  递归删除目录和其中的文件
  -v, --verbose         交互动作,显示正在进行的动作
   
默认情况下,rm命令不会删除目录。使用 -r 或 -R 选项来删除目录和目录内的文件。

如果一个文件名以“-”开头,比如“-foo”,用下面两个命令中任一个来删除:
  rm -- -foo

  rm ./-foo

注意,当使用rm来删除文件时,被删除的文件是可恢复的。也就是说rm只删除了它的索引结点而已。如果想要真正的删除,不可恢复,可以考虑使用shred。

我们删除一个文件,可以直接的rm删除。
删除一个目录,可使用 rm -rf ... 注意,此处的f是强制。

默认的情况下,我们的删除是不会提示信息的,显然这样是有些危险的。我就曾经犯过一个错误,错将/bin/目录里面的内容全部删除掉了,结果可想而知。当然,我当时犯的错误跟我使用超级用户root有直接的关系。
为了使我们的操作更安全,可以在.bashrc里用alias添加一行
rm='rm -i'
这样,每次我们使用rm命令时都相当于使用 rm -i ,那么每次删除都需要我们的确认了。这样做是有一定好处的,当然还要考虑到个人的习惯问题。
changyongid 2009年09月16日
命令 : mv --help
使用 : mv [选项]... [-T] SOURCE DEST
    or:  mv [选项]... SOURCE... DIRECTORY
    or:  mv [选项]... -t DIRECTORY SOURCE...
将SOURCE 重命名为 DEST, 或将 SOURCE(s) 移动到 DIRECTORY.

  -f, --force                  强制,在覆盖之前不进行提示
  -i, --interactive            覆盖之前进行提示
  -n, --no-clobber          不覆盖已存在的文件
注意:如果使用 -i, -f, -n, 这三个中的多个,则只有最后一个起作用。

  -t, --target-directory=DIRECTORY  将所有的 SOURCE 都移动到 DIRECTORY

学习了之前的命令之后,相信这个命令也会使用了。mv除了可以移动一个文件或目录之外,还是一种对文件或目录重命名的方法。
changyongid 2009年09月16日
加班是一件不好玩的事情,特别是在饿肚子的时候加班,而且还没什么事情做的时候却硬被拖着。
所以学习两个命令,纯当消遣……
changyongid 2009年09月21日
安排一下接下去要学的几个命令:
echo  basename  ln  lndir  paste  stat  tee tree touch file split dirname

乍一看,好像太多了。
其中除了ln touch 之外,其它的都用的比较少,属于杂类且有点偏的命令。它们每个都只完成一个小小的功能,但完成的很好。

学习每一个命令,都在自己电脑里多试几次,多试几个参数,一下就可以熟悉大概。这就是学习中的“多动手”吧。
changyongid 2009年09月21日
echo
英文“echo”是 “回声”的意思。在Linux的命令里,它的作用是显示一行内容。

功能说明:显示文字。
语   法:echo [-ne][字符串]或 echo [--help][--version]
补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。
参   数:-n 不要在最后自动换行
     -e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般
     文字输出:
     \a 发出警告声;
        \b 删除前一个字符;
        \c 最后不加上换行符号;
        \f 换行但光标仍旧停留在原来的位置;
        \n 换行且光标移至行首;
       \r 光标移至行首,但不换行;
       \t 插入tab;
        \v 与\f相同;
        \\ 插入\字符;
        \nnn 插入nnn(八进制)所代表的ASCII字符;
      –help 显示帮助
      –version 显示版本信息
我们可以利用echo打印出上一次程序执行后的退出状态。
changyongid 2009年09月21日
basename打印出文件名,不打印其路径。若指定后缀,则也不打印后缀。
例:
$ basename /usr/include/stdio.h
stdio.h
$ basename  /usr/include/stdio.h .h
stdio
changyongid 2009年09月21日
dirname
作用:打印路径名。
其参数是一个文件名。输出除文件名之外的路径。
例:
$ dirname ../linux/.bashrc
../linux
$ dirname /etc/passwd
/etc
changyongid 2009年09月23日
file
使用: file
测定文件的类型

  -m, --magic-file LIST      use LIST as a colon-separated list of magic
                               number files
  -z, --uncompress          试着探测压缩文件类型
  -b, --brief                打印输时不打印文件名
  -c, --checking-printout    打印输出分析的详细过程。与m连用,便于调试所用。

  -f, --files-from FILE     从FILE中读取要分析的文件名列表

  -L, --dereference          显示符号鍕接所指向的文件类型

file命令可以知道某个文件究竟是二进制的可执行文件还是shell脚本文件,或是其他格式的文件。其能识别目录、shell脚本、英文文本、二进制可执行文件、C语言源文件、文本文件、DOS的可执行文件。能探测包括图形、音频等在内的多种媒体格式文件。
changyongid 2009年09月23日
本帖最后由 changyongid 于 2009-9-23 14:17 编辑


汇编文件
$ file head.S
head.S: ASCII C program text

c源文件
$ file main.c
main.c: ASCII C program text

mp3文件
$ file ~/Documents/music/english/001.At\ last.MP3
/home/changyongid/Documents/music/english/001.At last.MP3: MPEG ADTS, layer III, v1, 320 kbps, 44.1 kHz, JntStereo

下载到板上的
$ file -b vivi
DBase 3 index file

可执行的
$ file -b tmp.o
ELF 32-bit LSB executable, ARM, version 1, statically linked, not stripped

目录
$ file study/
study/: directory
changyongid 2009年09月24日
用法:touch [选项]... 文件...
更新文件的访问和修改时间,更新为当前时间。

如果参数指定的文件不存在,则创建它,创建的文件为空。

A FILE argument string of - is handled specially and causes touch to
change the times of the file associated with standard output.
// 这一句不知道怎么翻。

长选项必须用的参数在使用短选项时也是必需的。
  -a                     只更改访问时间access
  -c, --no-create        不创建任何文件
  -d, --date=字符串        使用<字符串>表示的时间而不是目前的时间
  -f                     (此选项不作处理)
  -m                     只更改修改时间modify
  -r, --reference=FILE   使用指定文件的时间属性而非目前的时间
  -t STAMP               使用[YY]MMDDhhmm[.ss] 格式的时间而非当前时间


注意 -d 和 -t 选项接受不同格式的时间表达式。
changyongid 2009年09月24日
来实例一下。
$ ll
总计 32
drwxrwxr-x   8 changyongid changyongid 4096 09-03 16:59 2410

$ touch 2410/
$ ll
总计 32
drwxrwxr-x   8 changyongid changyongid 4096 09-24 20:34 2410

看到时间的变化了吧。
changyongid 2009年09月24日
本帖最后由 changyongid 于 2009-9-24 20:43 编辑

如果文件不存在,touch则以这个名字创建一个普通文件。
这个可以去试一下。我还记得我用touch创建的第一个文件是.vimrc。当时是配置vim的时候。很早了,记得当时在~/下怎么也找不到.vimrc,很急,后来别人告诉我touch一下。果然,用了这个命令之后就有了,我当时很奇怪。现在想起来,真是有些可笑……

当然,touch可以指定特定的时间。这个是比较重要的。来试一下吧。
----------------------
$ touch  -t 01061803 aaa
$ ll
-rw-rw-r--   1 changyongid changyongid    0 2009-01-06 aaa
----------------------
从上面可以看到,创建的文件为空。
注意一下它的时间。我指定的是01月06日18分03秒。默认为今年。
如果我在它前面再加上02,会怎么样呢?
----------------------
$ touch  -t 0201061803 aaa
$ ll
-rw-rw-r--   1 changyongid changyongid    0 2002-01-06 aaa
----------------------
看到了吧。变成02年了。

再看
--------------------
$ touch -d "6:03pm 02/06/2000" aaa
$ ll aaa
-rw-rw-r-- 1 changyongid changyongid 0 2000-02-06 aaa
----------------------
这是用-d来指定。重点体会一下。
关于这里的时间格式,可以参考date命令。感觉有点麻烦。
changyongid 2009年09月24日
再来看下-r选项。即把目标文件指定跟另一个文件一样的时间。
-------------------------------------------
$ ll
总计 32
drwxrwxr-x   8 changyongid changyongid 4096 09-24 20:34 2410
-rw-rw-r--   1 changyongid changyongid    0 2002-01-06 aaa
-------------------------------------------
$ touch -r 2410/ aaa
$ ll
总计 32
drwxrwxr-x   8 changyongid changyongid 4096 09-24 20:34 2410
-rw-rw-r--   1 changyongid changyongid    0 09-24 20:34 aaa
这样操作之后,aaa就跟2410一样的时间了。注意,2410是个目录。所以这里无论是指定目录还是普通文件都是可行的。

ps:那么从哪里可以看出2410是个目录呢?
我从终端下,他的颜色就可以直观的表现出来。
贴出来以后,你可以看到最左边的 “d”了么?那个就表示文件的属性。
在UNIX Linux下,一切皆为文件。不管是目录、普通文件、设备等等,对于我们用户来说,它们都是文件。这个可以看看UNIX环境高级编程。
changyongid 2009年09月24日
本帖最后由 changyongid 于 2009-9-24 21:07 编辑

tree 也是一个很实用的命令。有时候我们想了解一个目录下的所有文件,并希望以资源管理器的树形视图方式显示文件之间的结构,那么就可以用tree命令来实现这个功能。

help一看,这个命令的参数还真是多呀!不过取其中的几个了解一下,就够我们使的了。
tree --help
usage: tree [-adfghilnpqrstuvxACDFNS] [-H baseHREF] [-T title ] [-L level [-R]]
        [-P pattern] [-I pattern] [-o filename] [--version] [--help] [--inodes]
        [--device] [--noreport] [--nolinks] [--dirsfirst] [--charset charset]
        [--filelimit #] []
  -a         列出所有文件
  -d          只列出目录
  -l          如遇到符号链接,则直接列出其所指向的目录
  -f           显示完整路径
  -i            不以阶梯状列出
  -p           列出属性
  -u          列出属主或UID
  -g           列出所属组或组id
  -s            以字节形式列出文件大小
  -h           以人性化阅读方式列出
  -D            列出修改时间
  -t            以修改时间排序
  -x            Stay on current filesystem only.将范围局限在现在的文件性统中。比如把home放到别的分区里,则列出/时不会列出它下面的文件。
  -L level      指定深度(层数)。这个很有用。一般列出某个目录下,文件太多了。而我们只需要看当前层目录下或最近两层的。就用它来指定。
  -o file        输出到指定文件。有了这个就不用重定向了。
  --inodes      列出每个文件的索引点节
  --device      列出其所属的设备的设备号



先列出这么多吧。。。其实看起来命令多,但使用起来真的很简单。上面列出的参数我几乎都试了一遍,确实还是挺有用的。
太简单了,我就不麻烦举列了。
你可以 tree -L -1看一下效果。再逐个添加别的参数。
wlown 2009年10月14日
学习是永恒的!
f.luo 2009年10月16日
很久没更新了。
changyongid 2009年10月20日
楼上很仔细嘛。。谢谢一直挂念着。。
changyongid 2009年10月20日
本帖最后由 changyongid 于 2009-10-20 17:52 编辑

$ ln --help
用法:ln [选项]... [-T] 目标 链接名称 (第一种格式)  为“目标”创建一个名为“链接名称”的链接
  或:ln [选项]... 目标               (第二种格式)           在当前目录创建一个指向“目标”的链接
  或:ln [选项]... 目标... 目录       (第三种格式)        三、四两种格式 :为目录里的每个“目标”创建链接
  或:ln [选项]... -t 目录 目标...    (第四种格式)


默认不加“选项”的时候是创建硬链接。如果要创建符号链接,则需要加上 “--symbolic”
如果创建硬链接,则命令行中的“目标”必须存在。符号链接能够指向任意的文本,
长选项必须用的参数在使用短选项时也是必需的。

      --backup[=CONTROL]      为存在的目标文件创建备份
  -b                                         --backup,但是不接受参数
  -d, -F, --directory                  建立目录的硬链接
  -f, --force                            强行建立文件或目录的链接,不论文件或目录是否存在。
  -n, --no-dereference            如果目的地是一个链接至某目录的符号链接,会将
                                             该符号链接当作普通文件处理,先将该已存在的
                                             链接备份或删除
  -i, --interactive                   确认是否删除目的地文件
  -s, --symbolic                       创建符号链接而不是硬链接
  -S, --suffix=SUFFIX                  使用-b参数备份目标文件后,备份文件的字毛会被加上一个后缀。默认的是“~”,可以通过-S来改变它
  -t, --target-directory=DIRECTORY  指定创建链接的路径

备份文件的后缀为“~”,除非以 --suffix 选项或是 SIMPLE_BACKUP_SUFFIX
环境变量指定。版本控制的方式可透过 --backup 选项或 VERSION_CONTROL 环境
变量来选择。以下是可用的变量值:

  none, off       不会进行备份 (即使使用了 --backup 选项)
  numbered, t     备份文件会加上数字
  existing, nil   若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
  simple, never   永远使用普通方式备份

说明:这个命令是经常用到的。有人说链接跟windows下的快捷方式差不多。但我觉得还是千万不要以windows的思维方式来理解。要完全的理解ln,需要对Linux里的文件系统有一定的了解。这里我引用网上的一些解释(黑色部分为自己加的一点理解):
“每个存储设备或存储设备的分区(存储设备是硬盘、软盘、U盘 ... ...)被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。做个比喻,比如一本书,存储设备或分区就相当于这本书,Block相当于书中的每一页,inode 就相当于这本书前面的目录,一本书有很多的内容,如果想查找某部份的内容,我们可以先查目录,通过目录能最快的找到我们想要看的内容。虽然不太恰当,但还是比较形象。

在Linux 文件系统中,inode值相同的文件是硬链接文件,也就是说,不同的文件名,inode可能是相同的,一个inode值可以对应多个文件。理解链接文件并不难,看看例子就会了。在Linux中,链接文件是通过ln工具来创建的。 (那么创建硬链接,即是创建一个inode,它也指向某个文件。这样,对于这个文件,同时就有两个inode来指向它。删除某个文件时,即删除了它对应的inode,如果删除了两上inode中的一个,文件还是存在的。因为还有一个inode指向它。硬链接只能链接文件,而不能链接目录。且不能链接别的文件系统里的文件(即不同分区的文件))

软链接也叫符号链接,他和硬链接有所不同,软链接文件只是其源文件的一个标记。当我们删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但我们却不能查看软链接文件的内容了
(由上面的解释可以了解到,链接好比一个指针一样,我们通过它来访问文件或目录,修改它也实际上就修改了那个文件或目录)

changyongid 2009年10月20日
我们来试几个例子吧。。。
$ mkdir ttt              创建一个测试文件夹
$ ln -s ttt/ ./aaa     为其创建一个符号链接
$ ll aaa
lrwxrwxrwx 1 changyongid changyongid 4 10-20 17:59 aaa -> ttt/
$ rm aaa/                试着这样来删除它,是行不通的
rm: 无法删除 “aaa/”: 是一个目录
$ rm -rf aaa/            如果强制呢???执行完后,两者还是存在
changyongid 2009年10月30日
最近在做一个东西,同时也把C语言复习一下。书是K&R的《The C programming language》,买的英文本,正在进行中……

做完这个,就想弄一下lfs。没办法,感觉自己的Linux一直徘徊于各个发行版之间,fedora 、ubuntu 。。。想弄完lfs之后,可以再考虑以后用什么吧。。

坚持学习吧。。
changyongid 2009年10月30日
昨天我下了一个gentoo,如下
2.6G livedvd-x86-amd64-32ul-10.1.iso
太大了,我只有三个2G的U盘,所以想把它拷回去的话就得换一种办法了。当然是把它分割。。
现计划将其分割为1G的文件。 1G + 1G + 0.6G
changyongid 2009年10月30日
本帖最后由 changyongid 于 2009-10-30 08:43 编辑

split,Linux下的文件分割命令。
  -a, --suffix-length=N   后缀的长度,默认为2
  -b, --bytes=SIZE          指定多少字节切成一个小文件
  -C, --line-bytes=SIZE   这个选项带的参数与上面一样,但它会尽量保持文件的完整性
  -d, --numeric-suffixes  使用数字的后缀代替字母后缀
  -l, --lines=NUMBER      把infile拆分为具有n行的段,默认值为1000

后面的SIZE 可以跟bkm,b代表512B,k代表1KB,m代表1MB。
好的,我们来试一下这个命令吧。。
changyongid 2009年10月30日
$ split -d -b 1024m livedvd-x86-amd64-32ul-10.1.iso
$ ll -sh
2.6G -rw-r--r-- 1 changyongid changyongid  2.6G 10-09 20:08 livedvd-x86-amd64-32ul-10.1.iso
1.1G -rw-rw-r-- 1 changyongid changyongid  1.0G 10-30 08:43 x00
1.1G -rw-rw-r-- 1 changyongid changyongid  1.0G 10-30 08:44 x01
544M -rw-rw-r-- 1 changyongid changyongid  543M 10-30 08:44 x02

看到了,分为了x00 x01 x02三个文件。。。有点不爽,如果名字也指定就好了。
看下help说的:
Usage: split ... ]
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default
size is 1000 lines, and default PREFIX is `x'.  With no INPUT, or when INPUT
is -, read standard input.
所以我们可以在命令的最后指定前缀。即:
split -d -b 1024m livedvd-x86-amd64-32ul-10.1.iso gentoo-10.1_
changyongid 2009年10月30日
分割的速度还可以。可以看到分割后生成了三个文件,原文件还是在的。这样拷到另一个电脑上去之后,怎么将这三个文件还原成一个完整的iso呢?
用cat。没错。
$ cat x0* > gentoo_10_1_iso
changyongid@localhost opt]$ ls -sh1
2.6G gentoo_10_1_iso
2.6G livedvd-x86-amd64-32ul-10.1.iso
   1.1G x00
1.1G x01
544M x02
看到了新生成的文件,大小也一致,那么挂载一下看看。
$ sudo mount -t iso9660 -o loop gentoo_10_1.iso /mnt/
$ ls /mnt/
Artwork  gentoo.efimg    isolinux  Media
CREDITS  image.squashfs  livecd    README.txt
嗯。里面的文件是正确的。
好了。这个命令就说明到这里。不会的时候看一下help,然后动手试一下就会了。
changyongid 2009年10月30日
本帖最后由 changyongid 于 2009-10-30 09:15 编辑

$ chmod --help
用法:chmod [选项]... 模式[,模式]... 文件...
  或:chmod [选项]... 八进制模式 文件...
  或:chmod [选项]... --reference=参考文件 文件...
将每个[文件]的模式更改为[模式]。
  -c, --changes           类似 --verbose,但只在有更改时才显示结果
      --no-preserve-root  do not treat `/' specially (the default)
      --preserve-root     fail to operate recursively on `/'
  -f, --silent, --quiet   去除大部份的错误信息
  -v, --verbose           处理任何文件都会显示信息
      --reference=参考文件  使用[参考文件]的模式,而非自行指定权限模式
  -R, --recursive         以递归方式更改所有的文件及子目录
      --help     显示此帮助信息并退出
      --version  输出版本信息并退出

Each MODE is of the form `*([-+=](*|))+'.
u  user 用户,即文件所有者
g    group,即同组用户
o    other 其他用户
a all所有用户

+ 增加相应权限
- 去掉相应权限
= 等于某个权限

r 读
w 写
x 可执行
X 只有目标文件对某些文件是可执行的,该目标文件是目录时才追加X属性
s 设置SUID SGID g+s设置SGID u+s设置SUID 这个我也不懂
t 保存程序的文件到交换设备上

u 与文件所有者有一样的权限
g 与同组有一样的权限
o 与其他用户有一样的权限

这是字符设定法。还有一种是数字设定法,就不多说了。
这个命令重要,但是不复杂。很常用的。
mamashou 2010年04月12日
顶一个呗:)
kunyuhe 2010年05月26日
怎么讲完命令就开始写书了吗?
“说到中学时期,家乡的那片梯田,是我看过 最美的绿地……”
dianguai14 2010年05月27日
谢谢呀
dianguai14 2010年05月27日
啊啊啊啊啊啊啊啊啊啊啊
freedomzlp 2010年05月28日
呵呵 积少成多:“——)
张无忌1987 2010年05月29日
:victory:
李冬发 2010年05月30日
linux怎么“克隆”?
453523869 2010年06月21日
顶上去
:)
solo_74 2010年08月15日
都成地主了,我啥时候也来一个就好了!!
zzm天龙 2010年09月20日
学习中
fish828 2010年09月28日
楼主写个VIM的基本命令吧,好久不用都忘了
mc02snx 2010年10月05日
说得好,积累最重要
ouyangtengjie 2010年10月09日
好啊,要多谢各位前辈给我们学习的机会,继续盖啊
fangka 2010年10月10日
chmod
fangka 2010年10月10日
pwd
fangka 2010年10月10日
ps
wzwdz 2010年11月01日
这个收藏了
z383775409 2010年11月01日
感谢楼主分享!
reeuenta 2010年11月25日
系統上 Help 就可以看到許多參數, 不過要看到實例倒是不多
謝謝樓主用心實證~
hszx 2011年01月23日
:handshake
hszx 2011年04月24日
:)
andy_han 2011年05月16日
每天挖一点,基础最重要。
hszx 2011年05月18日
:victory:
lilymagnolia 2011年06月01日
是不错的方法
ckq1988 2011年06月04日
什么情况
godeer 2011年07月01日
好帖要回,我的积分不够了啊
yulizi 2011年07月06日
这东西就是靠实践积累
zx3113847 2011年07月11日
额 不会吧 这么搞
lygpetter 2011年08月15日
积少成多!
hunterpeng 2013年03月12日
一 点一点积累,每天挖一点,基础最重要。
北虢 2013年12月16日
盖楼哈哈
bubifengyun 2014年01月15日
changyongid 发表于 2009-8-31 12:41 static/image/common/back.gif
这是一个赚贴、赚分的好办法。。。。哈哈。

我的感觉是分够用就可以了。再多都是迎合版主或者网站管理员了。因为你真的不需要太多分。他只是个数字,数字而已。
Hugo801122 2014年02月28日
多谢,那我就一天学一次linux命令。
zzxydedu118 2016年01月17日

深圳信盈达专注于嵌入式开发、单片机培训,包学会,包高薪就业。详情小窗口袁老师:13
083712301;QQ483059208
咖啡so 2017年08月01日
linux相关学习视频http://www.makeru.com.cn/course/218.html
咖啡so 2017年08月01日
学习linux的讨论群,感兴趣的可以加一下561213221