Linux shell

Posted reverse_xiaoyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux shell相关的知识,希望对你有一定的参考价值。

Linux shell--基础指令

浏览Linux文件系统

  Linux中最基础也是最必要的一条指令

  cd destination

  cd命令可接受单个参数destination,用以指定想切换到的目录名。如果没有为cd命令指定目标路径,它将切换到用户主目录。

  destination参数可以用两种方式表示:一种是使用绝对文件路径,另一种是使用相对文件路径。

   接下来将分别阐述这两种方法。这两者之间的不同对于理解文件系统遍历非常重要。

1. 绝对文件路径

  用户可在虚拟目录中采用绝对文件路径引用目录名。绝对文件路径定义了在虚拟目录结构中该目录的确切位置,以虚拟目录的根目录开始,相当于目录的全名。
  绝对文件路径总是以正斜线(/)作为起始,指明虚拟文件系统的根目录。因此,如果要指向usr目录所包含的bin目录下的用户二进制文件,可以使用如下绝对文件路径:
  /usr/bin
  使用绝对文件路径可以清晰表明用户想切换到的确切位置。要用绝对文件路径来切换到文件系统中的某个特定位置,只需在cd命令后指定全路径名:
1 xiaoyu@ubuntu:~$ cd /usr/bin
2 xiaoyu@ubuntu:/usr/bin$ 
  注意,在上面的例子中,提示符中一开始有一个波浪号(~)。在切换到另一个目录之后,这个波浪号被/usr/bin替代了。CLI提示符正是用它来帮助你跟踪当前所在虚拟目录结构中的位置。波浪号表明shell会话位于你的主目录中。在切换出主目录之后,如果提示符已经进行了相关配置 的话,绝对文件路径就会显示在提示符中。

   pwd命令

  pwd命令可以显示出shell会话的当前目录,这个目录被称作当前工作目录。pwd命令的用法如下:

1 xiaoyu@ubuntu:/usr/bin$ pwd
2 /usr/bin
3 xiaoyu@ubuntu:/usr/bin$ 
  在切换到新的当前工作目录时使用pwd命令,是很好的习惯。因为很多shell命令都是在当前工作目录中操作的,在发出命令之前,你应该始终确保自己处在正确的目录之中。

  可以使用绝对路径文件路径切换到Linux虚拟目录结构中的任何一级:

1 xiaoyu@ubuntu:/$ cd sys/power
2 xiaoyu@ubuntu:/sys/power$ pwd
3 /sys/power
4 xiaoyu@ubuntu:/sys/power$ 

  但是如果只是在自己的主目录中工作,经常使用绝对路径的话未免太过冗长,例如,若已经位于目录/home/xiaoyu,在输入下方这样的命令切换到Documents目录就有点繁琐了

/home/Documents

2. 相对文件路径

  相对文件路径允许用户指定一个基于当前位置的目标文件路径。相对文件路径不以代表根目录的正斜线(/)开头,而是以目录名(如果用户准备切换到当前工作目录下的一个目录)或是一个特殊字符开始。假如你位于home目录中,并希望切换到Documents子目录,那你可以使用cd命令加上一个相对文件路径:
1 xiaoyu@ubuntu:~$ pwd
2 /home/xiaoyu
3 xiaoyu@ubuntu:~$ cd Documents/
4 xiaoyu@ubuntu:~/Documents$ pwd
5 /home/xiaoyu/Documents
6 xiaoyu@ubuntu:~/Documents$ 
  上面的例子并没有使用正斜线(/),而是采用了相对文件路径将当前工作目录从 /home/christine改为/home/christine/Documents,大大减少了输入内容。
  另外,此例中还要注意的是,如果提示符经过配置可以显示出当前工作目录,它就会一直显示波浪号。这表明当前工作目录位于用户home目录之下。

  事实上,在实际工程中,使用绝对路径跟相对路径都没啥讲究,都会互相结合使用。

  返回上一级目录

  返回上一级目录,我们使用双点符(..),表示当前目录的父目录

  双点符在目录层级中移动时非常便利。如果正处在主目录下的Documents目录中,需要切换到主目录下的Downloads目录,可以这么做:

1 xiaoyu@ubuntu:~$ cd Documents
2 xiaoyu@ubuntu:~/Documents$ pwd
3 /home/xiaoyu/Documents
4 xiaoyu@ubuntu:~/Documents$ cd ../Downloads
5 xiaoyu@ubuntu:~/Downloads$ pwd
6 /home/xiaoyu/Downloads
7 xiaoyu@ubuntu:~/Downloads$ 

 

文件和目录列表

  要想知道系统中有哪些文件,可以使用列表命令(ls)

  基本的列表功能

  ls命令最基本的形式会显示当前目录下的文件和目录:

xiaoyu@ubuntu:~$ ls
Desktop  Documents  Downloads  examples.desktop  Music  Pictures  Public  Templates  Videos  vmware-tools-distrib  xiaoyu
xiaoyu@ubuntu:~$ 

 

  ls命令输出的列表是按字母排序的(按列排序而不是按行来排序)

  ls -F,-F参数的ls命令可以轻松区分文件和目录

1 xiaoyu@ubuntu:~$ ls -F
2 Desktop/  Documents/  Downloads/  examples.desktop  Music/  Pictures/  Public/  Templates/  Videos/  vmware-tools-distrib/  xiaoyu/
3 xiaoyu@ubuntu:~$ 

  -F参数在目录名后面加了正斜线(/),以方便用户在输出中分辨,在可执行文件的后面加个*号,嗯,我目录中暂时没有可执行文件,以便用户找出可在系统中运行的文件。

  基本的ls命令在某种意义上有点容易让人误解。它显示了当前目录下的文件和目录,但并没有将全部都显示出来。Linux经常采用隐藏文件来保存配置信息。在Linux上,隐藏文件通常是文件名以点号开始的文件。这些文件并没有在默认的ls命令输出中显示出来,因此我们称其为隐藏文件。要把隐藏文件和普通文件及目录一起显示出来,就得用到-a参数。下面是一个带有-a参数的ls命令的例子:

1 xiaoyu@ubuntu:~$ pwd
2 /home/xiaoyu
3 xiaoyu@ubuntu:~$ ls -a
4 .              .bashrc  Desktop    examples.desktop  .local    .profile                   Videos                .xsession-errors
5 ..             .cache   .dmrc      .gconf            .mozilla  Public                     vmware-tools-distrib  .xsession-errors.old
6 .bash_history  .compiz  Documents  .gnupg            Music     .sudo_as_admin_successful  .Xauthority
7 .bash_logout   .config  Downloads  .ICEauthority     Pictures  Templates                  xiaoyu
8 xiaoyu@ubuntu:~$ 
  所有以点号开头的隐藏文件现在都显示出来了。注意,有三个以.bash开始的文件。它们是bash shell环境所使用的隐藏文件
   -R参数是ls命令可用的另一个参数,叫作递归选项。它列出了当前目录下包含的子目录中的文件。如果目录很多,这个输出就会很长。以下是-R参数输出的简单例子:

  由于结果太长,我这里就不贴了,建议在目录层级比较少的目录下操作

  显示长列表

  在基本的输出列表中,ls命令并未输出太多每个文件的相关信息。要显示附加信息,另一个常用的参数是-l。-l参数会产生长列表格式的输出,包含了目录中每个文件的更多相关信息。

 1 xiaoyu@ubuntu:~$ ls -l
 2 total 52
 3 drwxr-xr-x 2 xiaoyu xiaoyu 4096 Dec  5 05:15 Desktop
 4 drwxr-xr-x 2 xiaoyu xiaoyu 4096 Dec  5 05:15 Documents
 5 drwxr-xr-x 2 xiaoyu xiaoyu 4096 Dec  5 05:15 Downloads
 6 -rw-r--r-- 1 xiaoyu xiaoyu 8980 Dec  4 07:46 examples.desktop
 7 drwxr-xr-x 2 xiaoyu xiaoyu 4096 Dec  5 05:15 Music
 8 drwxr-xr-x 2 xiaoyu xiaoyu 4096 Dec  5 05:15 Pictures
 9 drwxr-xr-x 2 xiaoyu xiaoyu 4096 Dec  5 05:15 Public
10 drwxr-xr-x 2 xiaoyu xiaoyu 4096 Dec  5 05:15 Templates
11 drwxr-xr-x 2 xiaoyu xiaoyu 4096 Dec  5 05:15 Videos
12 drwxr-xr-x 9 xiaoyu xiaoyu 4096 Feb 20  2019 vmware-tools-distrib
13 drwxrwxr-x 3 xiaoyu xiaoyu 4096 Dec 11 14:20 xiaoyu
14 xiaoyu@ubuntu:~$ 
  这种长列表格式的输出在每一行中列出了单个文件或目录。除了文件名,输出中还有其他有用信息。输出的第一行显示了在目录中包含的总块数。在此之后,每一行都包含了关于文件(或目录)的下述信息:
  •   文件类型,比如目录(d)、文件(-)、字符型文件(c)或块设备(b);
  •   文件的权限
  •   文件的硬链接总数
  •   文件属主的用户名
  •   文件属组的组名
  •   文件的大小(大小以字节为单位)
  •   文件的上次修改时间
  •   文件名或目录名

  通常我们会ls -a -l -F一起使用,当然这样写很复杂,可以直接这么写ls -alF

  过滤输出列表

  由前面的例子可知,默认情况下,ls命令会输出目录下的所有非隐藏文件。有时这个输出会显得过多,当你只需要查看单个少数文件信息时更是如此。
  幸而ls命令还支持在命令行中定义过滤器。它会用过滤器来决定应该在输出中显示哪些文件或目录。
  这个过滤器就是一个进行简单文本匹配的字符串。可以在要用的命令行参数之后添加这个过滤器:
1 xiaoyu@ubuntu:~/xiaoyu$ ls -l my_file 
2 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:41 my_file
3 xiaoyu@ubuntu:~/xiaoyu$ 
  当用户指定特定文件的名称作为过滤器时,ls命令只会显示该文件的信息。有时你可能不知道要找的那个文件的确切名称。ls命令能够识别标准通配符,并在过滤器中用它们进行模式匹配:
  •   问号(?)代表一个字符:
  •   星号(*)代表零个或多个字符
1 xiaoyu@ubuntu:~/xiaoyu$ ls -l my_f?le
2 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:43 my_fale
3 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:41 my_file
4 xiaoyu@ubuntu:~/xiaoyu$ 

 

  其中,过滤器my_f?le与目录中的两个文件匹配,类似的,型号可匹配零个或多个字符。

1 xiaoyu@ubuntu:~/xiaoyu$ ls -l my_*
2 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:43 my_fale
3 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:41 my_file
4 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:44 my_file2
5 xiaoyu@ubuntu:~/xiaoyu$ 

 

  使用星号找到了三个名字以my开头的文件,和问号一样,你可以把星号放在过滤器中的任意位置

1 xiaoyu@ubuntu:~/xiaoyu$ ls -l my_f*le
2 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:43 my_fale
3 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:41 my_file
4 xiaoyu@ubuntu:~/xiaoyu$ 

 

  在过滤器中使用星号和问号被称为文件扩展匹配(file globbing),指的是使用通配符进行模式匹配的过程。通配符正式的名称叫作元字符通配符(metacharacter wildcards)。除了星号和问号之外,还有更多的元字符通配符可用于文件扩展匹配。可以使用中括号。
1 xiaoyu@ubuntu:~/xiaoyu$ ls -l my_f[ai]le
2 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:43 my_fale
3 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:41 my_file
4 xiaoyu@ubuntu:~/xiaoyu$ 
  在这个例子中,我们使用了中括号以及在特定位置上可能出现的两种字符:a或i。中括号表示一个字符位置并给出多个可能的选择。可以像上面的例子那样将待选的字符列出来,也可以指定字符范围,例如字母范围[a – i]。
1 xiaoyu@ubuntu:~/xiaoyu$ ls -l my_f[a-z]le
2 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:43 my_fale
3 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:41 my_file
4 xiaoyu@ubuntu:~/xiaoyu$ 
  另外,可以使用感叹号(!)将不需要的内容排除在外。
1 xiaoyu@ubuntu:~/xiaoyu$ ls -l my_f[!a]le
2 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:41 my_file

  注意:以上的(*)(?)([aj])([a-z])(!)不仅仅是在ls中有用,在linux需要用到过滤的地方,这几种方法都是十分常见有效的

处理文件

  创建文件

    我们总会时不时地遇到要创建空文件的情况。例如,有时应用程序希望在它们写入数据之前,某个日志文件已经存在,这时,可以用touch命令轻松创建空文件。

1 xiaoyu@ubuntu:~/xiaoyu$ touch test_one
2 xiaoyu@ubuntu:~/xiaoyu$ ls -l test_one 
3 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:03 test_one
4 xiaoyu@ubuntu:~/xiaoyu$ touch test_one
5 xiaoyu@ubuntu:~/xiaoyu$ ls -l test_one 
6 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:04 test_one
7 xiaoyu@ubuntu:~/xiaoyu$ 

 

  touch命令创建了你指定的新文件,并将你的用户名作为文件的属主。注意,文件的大小是零,因为touch命令只创建了一个空文件。

  touch命令还可用来改变文件的修改时间。这个操作并不需要改变文件的内容。

  如果只想改变访问时间,可以使用-a参数。

xiaoyu@ubuntu:~/xiaoyu$ touch -a test_one
xiaoyu@ubuntu:~/xiaoyu$ ls -l test_one
-rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:04 test_one
xiaoyu@ubuntu:~/xiaoyu$ ls -l --time=atime test_one
-rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:07 test_one
xiaoyu@ubuntu:~/xiaoyu$

 

  在上面的例子中,要注意的是,如果只使用ls –l命令,并不会显示访问时间。这是因为默认显示的是修改时间。要想查看文件的访问时间,需要加入另外一个参数:--time=atime。有了这个参数,就能够显示出已经更改过的文件访问时间。
  创建空文件和更改文件时间戳算不上你在Linux系统中的日常工作。不过复制文件可是在使用shell时经常要干的活儿。

   复制文件

    对系统管理员来说,在文件系统中将文件和目录从一个位置复制到另一个位置可谓家常便饭。cp命令可以完成这个任务。
    在最基本的用法里,cp命令需要两个参数——源对象和目标对象:
 
     cp source destination
 
    当source和destination参数都是文件名时,cp命令将源文件复制成一个新文件,并且以destination命名。新文件就像全新的文件一样,有新的修改时间。
xiaoyu@ubuntu:~/xiaoyu$ cp test_one test_two
xiaoyu@ubuntu:~/xiaoyu$ ls -l test*
-rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:04 test_one
-rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:10 test_two
xiaoyu@ubuntu:~/xiaoyu$ 
  新文件test_two和文件test_one的修改时间并不一样。如果目标文件已经存在,cp命令可能并不会提醒这一点。最好是加上-i选项,强制shell询问是否需要覆盖已有文件。
1 xiaoyu@ubuntu:~/xiaoyu$ cp -i test_one test_two
2 cp: overwrite \'test_two\'? y
3 xiaoyu@ubuntu:~/xiaoyu$ 

  如果不回答y,文件复制将不会继续。也可以将文件复制到现有目录中。

1 xiaoyu@ubuntu:~/xiaoyu$ cp -i test_one /home/xiaoyu/Documents/
2 xiaoyu@ubuntu:~/xiaoyu$ ls -l /home/xiaoyu/Documents/
3 total 0
4 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:13 test_one
5 xiaoyu@ubuntu:~/xiaoyu$ 

 

  新文件现就在目录Documents中了,和源文件同名。
  之前的例子在目标目录名尾部加上了一个正斜线(/),这表明Documents是目录而非文件。这有助于明确目的,而且在复制单个文件时非常重要。如果没有使用正斜线,子目录/home/christine/Documents又不存在,就会有麻烦。在这种情况下,试图将一个文件复制到Documents子目录反而会创建一个名为Documents的文件,连错误消息都不会显示!

  上一个例子采用了绝对路径,不过也可以使用相对路径

1 xiaoyu@ubuntu:~/xiaoyu$ cp -i test_one ../Documents/
2 cp: overwrite \'../Documents/test_one\'? y
3 xiaoyu@ubuntu:~/xiaoyu$ 

 

  之前讲过cd ..返回当前目录的父目录,单点符(.)就很适合cp命令。记住,单点符表示当前工作目录。如果需要将一个带有很长的源对象名的文件复制到当前工作目录中时,单点符能够简化该任务

1 xiaoyu@ubuntu:~/xiaoyu$ cp /etc/NetworkManager/NetworkManager.conf .
2 xiaoyu@ubuntu:~/xiaoyu$ ls -l NetworkManager.conf 
3 -rw-r--r-- 1 xiaoyu xiaoyu 76 Dec 17 15:33 NetworkManager.conf
4 xiaoyu@ubuntu:~/xiaoyu$ 

 

  制表键自动补全

  在使用命令行时,很容易输错命令,目录名或文件名。实际上,对长目录来说输错的概率还是蛮高的,按住Table键就可以为你自动补全命令或者目录名了,这里就不演示了

  链接文件

  链接文件是Linux文件系统的一个优势。如需要在系统上维护同一文件的两份或多份副本,除了保存多份单独的物理文件副本之外,还可以采用保存一份物理文件副本和多个虚拟副本的方法。这种虚拟的副本就称为链接。链接是目录中指向文件真实位置的占位符。在Linux中有两种
  不同类型的文件链接:
  •   符号链接 
  •   硬链接

  符号链接就是实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同。

  要为一个文件创建符号链接,原始文件必须事先存在。然后可以使用ln命令以及-s选项来创建符号链接

1 xiaoyu@ubuntu:~/xiaoyu$ touch data_file
2 xiaoyu@ubuntu:~/xiaoyu$ ls -l data_file 
3 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:53 data_file
4 xiaoyu@ubuntu:~/xiaoyu$ ln -s data_file sl_data_file
5 xiaoyu@ubuntu:~/xiaoyu$ ls -l *data_file
6 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:53 data_file
7 lrwxrwxrwx 1 xiaoyu xiaoyu 9 Dec 17 15:53 sl_data_file -> data_file
8 xiaoyu@ubuntu:~/xiaoyu$ 

   另外还要注意的是,符号链接的文件大小与数据文件的文件大小。符号链接sl_data_file只有9个字节,而data_file有0个字节。这是因为sl_data_file仅仅只是指向data_file而已。它们的内容并不相同,是两个完全不同的文件。

  另一种证明链接文件是独立文件的方法是查看inode编号。文件或目录的inode编号是一个用于标识的唯一数字,这个数字由内核分配给文件系统中的每一个对象。要查看文件或目录的inode编号,可以给ls命令加入-i参数。
1 xiaoyu@ubuntu:~/xiaoyu$ ls -i *data_file
2 2752954 data_file  2752955 sl_data_file
3 xiaoyu@ubuntu:~/xiaoyu$ 

 

  从这个例子中可以看出数据文件的inode编号是2752954,而sl_data_file的inode编号则是2752955。所以说它们是不同的文件。

  硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。引用硬链接文件等同于引用了源文件。要创建硬链接,原始文件也必须实现存在,只不过这次使用ln命令时不再需要加入额外的参数了。

1 xiaoyu@ubuntu:~/xiaoyu$ touch code_file
2 xiaoyu@ubuntu:~/xiaoyu$ ls -l code_file
3 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 16:12 code_file
4 xiaoyu@ubuntu:~/xiaoyu$ ln code_file hl_code_file
5 xiaoyu@ubuntu:~/xiaoyu$ ls -li *code_file
6 2752979 -rw-rw-r-- 2 xiaoyu xiaoyu 0 Dec 17 16:12 code_file
7 2752979 -rw-rw-r-- 2 xiaoyu xiaoyu 0 Dec 17 16:12 hl_code_file
8 xiaoyu@ubuntu:~/xiaoyu$ 
  在上面的例子中,我们使用ls -li命令显示了*code_files的inode编号以及长列表。注意,带有硬链接的文件共享inode编号。这是因为它们终归是同一个文件。还要注意的是,链接计数(列表中第三项)显示这两个文件都有两个链接。另外,它们的文件大小也一模一样。

  注意:只能对处于同一存储媒体的文件创建硬链接。要想在不同存储媒体的文件之间创建链接,只能使用符号链接。

  复制链接文件的时候一定要小心。如果使用cp命令复制一个文件,而该文件又已经被链接到了另一个源文件上,那么你得到的其实是源文件的一个副本。这很容易让人犯晕。用不着复制链接文件,可以创建原始文件的另一个链接。同一个文件拥有多个链接,这完全没有问题。但是,千万别创建软链接文件的软链接。这会形成混乱的链接链,不仅容易断裂,还会造成各种麻烦。
  你可能觉得符号链接和硬链接的概念不好理解。幸好下一节中的文件重命名容易明白得多。

  重命名文件

  在Linux中,重命名文件成为移动(moving)。mv命令可以将文件和目录移动到另一个位置或重新命名
 
 1 xiaoyu@ubuntu:~/xiaoyu$ touch fall fell fill full
 2 xiaoyu@ubuntu:~/xiaoyu$ ls -li f*ll
 3 2752954 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 fall
 4 2752955 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 fell
 5 2752979 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 fill
 6 2755050 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 full
 7 
 8 
 9 xiaoyu@ubuntu:~/xiaoyu$ mv fall fzll
10 xiaoyu@ubuntu:~/xiaoyu$ ls -li f*ll
11 2752955 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 fell
12 2752979 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 fill
13 2755050 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 full
14 2752954 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 fzll
15 xiaoyu@ubuntu:~/xiaoyu$ 

 

  注意:移动文件会将文件名从fall更改为fzll,但inode编号和时间戳保持不变。这是因为mv只影响文件名,也可以使用mv来移动文件的位置
 1 xiaoyu@ubuntu:~/xiaoyu$ ls -li /home/xiaoyu/xiaoyu/fzll 
 2 2752954 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 /home/xiaoyu/xiaoyu/fzll
 3 xiaoyu@ubuntu:~/xiaoyu$ ls -li /home/xiaoyu/Pictures/
 4 total 0
 5 xiaoyu@ubuntu:~/xiaoyu$ mv fzll ../Pictures/
 6 xiaoyu@ubuntu:~/xiaoyu$ ls -li ../Pictures/
 7 total 0
 8 2752954 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 fzll
 9 xiaoyu@ubuntu:~/xiaoyu$ ls -li fzll
10 ls: cannot access \'fzll\': No such file or directory
11 xiaoyu@ubuntu:~/xiaoyu$ 

 

  在这个例子中,我们使用mv命令把文件fzll从/home/xiaoyu/xiaoyu/ 移动到了 /home/xiaoyu/Pictures/。和上例子一样,这个操作没有改变这个文件的inode号跟时间戳
  和cp命令一样,也可以在mv命令后面加上-i参数,这样在试图覆盖已有的文件时,我们就会得到提示
  唯一发生变化就是,/home/xiaoyu/xiaoyu/目录下不再有文件fzll,因为它已经离开了原先的位置,这就是mv命令所做的事情。也可以使用mv命令移动文件位置并修改文件名称,这些操作只需要一步就能完成。
1 xiaoyu@ubuntu:~/xiaoyu$ mv ../Pictures/fzll ./fall
2 xiaoyu@ubuntu:~/xiaoyu$ ls -li ../Pictures/fzll
3 ls: cannot access \'../Pictures/fzll\': No such file or directory
4 xiaoyu@ubuntu:~/xiaoyu$ ls -li ./fall
5 2752954 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 ./fall
6 xiaoyu@ubuntu:~/xiaoyu$ 

 

  这个例子中,我们将文件fzll从子目录Pictures中移动到了目录/home/xiaoyu/xiaoyu/ 下,并将名字更改成了fall。文件的时间戳和inode编号都没有改变。改变的只有位置和名称。
  也可以使用mv命令移动整个目录以及内容
 1 xiaoyu@ubuntu:~/my_directory$ touch 1.sh 2.sh 3.sh 4.sh
 2 xiaoyu@ubuntu:~/my_directory$ cd ..
 3 xiaoyu@ubuntu:~$ ls -li my_directory/
 4 total 0
 5 2755057 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:53 1.sh
 6 2755059 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:53 2.sh
 7 2755060 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:53 3.sh
 8 2755061 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:53 4.sh
 9 xiaoyu@ubuntu:~$ mv my_directory/ new_my_directory
10 xiaoyu@ubuntu:~$ ls -li new_my_directory/
11 total 0
12 2755057 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:53 1.sh
13 2755059 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:53 2.sh
14 2755060 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:53 3.sh
15 2755061 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:53 4.sh
16 xiaoyu@ubuntu:~$ ls -li my_directory
17 ls: cannot access \'my_directory\': No such file or directory
18 xiaoyu@ubuntu:~$ 

 

 
  目录内容没有发生变化,只有目录名发生了变化。
  mv命令是用来移动文件!!!mv命令可能有危险的就是会删除文件,如果你很警惕,切记加入-i参数

  删除文件

  迟早会有要删除文件的时候,不管时清理文件系统还是删除某个软件包,总要有删除文件的时候。
  在Linux中,删除(deleting)叫做移除(removing)。bash shell中删除文件的命令时rm。rm命令的基本格式十分简单。
1 xiaoyu@ubuntu:~/xiaoyu$ rm -i fall
2 rm: remove regular empty file \'fall\'? y
3 xiaoyu@ubuntu:~/xiaoyu$ ls -li f

以上是关于Linux shell的主要内容,如果未能解决你的问题,请参考以下文章

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础

逆向及Bof基础实践

Linux shell中运行命令后加上字符“&”的作用

shell学习四十九天----进程建立

用于确保在任何给定时间仅运行一个 shell 脚本的 shell 片段 [重复]

shell 脚本 片段