楼主: changyongid

一天一个Linux命令

[复制链接]
 楼主| 发表于 2009-9-16 08:59:33 | 显示全部楼层
由于cp过于是默认覆盖已存在文件的,所以直接使用这个命令时会有一点危险。在~/.bashrc里面用alias将其替换成 cp -i 即可,加上-i参数,每次要覆盖之前,它都会提示,这样就安全了一些,防止误操作。
 楼主| 发表于 2009-9-16 19:51:18 | 显示全部楼层
命令 : 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 ,那么每次删除都需要我们的确认了。这样做是有一定好处的,当然还要考虑到个人的习惯问题。
 楼主| 发表于 2009-9-16 20:00:48 | 显示全部楼层
命令 : 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除了可以移动一个文件或目录之外,还是一种对文件或目录重命名的方法。
 楼主| 发表于 2009-9-16 20:01:57 | 显示全部楼层
加班是一件不好玩的事情,特别是在饿肚子的时候加班,而且还没什么事情做的时候却硬被拖着。
所以学习两个命令,纯当消遣……
 楼主| 发表于 2009-9-21 10:29:28 | 显示全部楼层
安排一下接下去要学的几个命令:
echo  basename  ln  lndir  paste  stat  tee tree touch file split dirname

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

学习每一个命令,都在自己电脑里多试几次,多试几个参数,一下就可以熟悉大概。这就是学习中的“多动手”吧。
 楼主| 发表于 2009-9-21 22:17:28 | 显示全部楼层
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打印出上一次程序执行后的退出状态。
 楼主| 发表于 2009-9-21 22:18:31 | 显示全部楼层
basename打印出文件名,不打印其路径。若指定后缀,则也不打印后缀。
例:
  1. [changyongid@Fedora ~]$ basename /usr/include/stdio.h
  2. stdio.h
  3. [changyongid@Fedora ~]$ basename  /usr/include/stdio.h .h
  4. stdio
复制代码
 楼主| 发表于 2009-9-21 22:24:57 | 显示全部楼层
dirname
作用:打印路径名。
其参数是一个文件名。输出除文件名之外的路径。
例:
  1. [changyongid@Fedora ~]$ dirname ../linux/.bashrc
  2. ../linux
  3. [changyongid@Fedora ~]$ dirname /etc/passwd
  4. /etc
复制代码
 楼主| 发表于 2009-9-23 14:12:01 | 显示全部楼层
file
使用: file [OPTION...] [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的可执行文件。能探测包括图形、音频等在内的多种媒体格式文件。
 楼主| 发表于 2009-9-23 14:14:26 | 显示全部楼层
本帖最后由 changyongid 于 2009-9-23 14:17 编辑

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

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

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

  10. 下载到板上的
  11. $ file -b vivi
  12. DBase 3 index file

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

  16. 目录
  17. $ file study/
  18. study/: directory
复制代码
 楼主| 发表于 2009-9-24 20:33:16 | 显示全部楼层
用法: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               使用[[CC]YY]MMDDhhmm[.ss] 格式的时间而非当前时间


注意 -d 和 -t 选项接受不同格式的时间表达式。
 楼主| 发表于 2009-9-24 20:34:44 | 显示全部楼层
来实例一下。
[changyongid@localhost test]$ ll
总计 32
drwxrwxr-x   8 changyongid changyongid 4096 09-03 16:59 2410

[changyongid@localhost test]$ touch 2410/
[changyongid@localhost test]$ ll
总计 32
drwxrwxr-x   8 changyongid changyongid 4096 09-24 20:34 2410

看到时间的变化了吧。
 楼主| 发表于 2009-9-24 20:39:33 | 显示全部楼层
本帖最后由 changyongid 于 2009-9-24 20:43 编辑

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

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

再看
--------------------
[changyongid@localhost test]$ touch -d "6:03pm 02/06/2000" aaa
[changyongid@localhost test]$ ll aaa
-rw-rw-r-- 1 changyongid changyongid 0 2000-02-06 aaa
----------------------
这是用-d来指定。重点体会一下。
关于这里的时间格式,可以参考date命令。感觉有点麻烦。
 楼主| 发表于 2009-9-24 20:48:58 | 显示全部楼层
再来看下-r选项。即把目标文件指定跟另一个文件一样的时间。
-------------------------------------------
[changyongid@localhost test]$ ll
总计 32
drwxrwxr-x   8 changyongid changyongid 4096 09-24 20:34 2410
-rw-rw-r--   1 changyongid changyongid    0 2002-01-06 aaa
-------------------------------------------
[changyongid@localhost test]$ touch -r 2410/ aaa
[changyongid@localhost test]$ 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环境高级编程。
 楼主| 发表于 2009-9-24 20:52:19 | 显示全部楼层
本帖最后由 changyongid 于 2009-9-24 21:07 编辑

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

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

复制代码


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

[changyongid@localhost vacs]$ 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指向它。硬链接只能链接文件,而不能链接目录。且不能链接别的文件系统里的文件(即不同分区的文件)

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

 楼主| 发表于 2009-10-20 18:01:53 | 显示全部楼层
我们来试几个例子吧。。。
[changyongid@localhost ~]$ mkdir ttt              创建一个测试文件夹
[changyongid@localhost ~]$ ln -s ttt/ ./aaa     为其创建一个符号链接
[changyongid@localhost ~]$ ll aaa
lrwxrwxrwx 1 changyongid changyongid 4 10-20 17:59 aaa -> ttt/
[changyongid@localhost ~]$ rm aaa/                试着这样来删除它,是行不通的
rm: 无法删除 “aaa/”: 是一个目录
[changyongid@localhost ~]$ rm -rf aaa/            如果强制呢???执行完后,两者还是存在
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表