Linux shell
Posted reverse_xiaoyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux shell相关的知识,希望对你有一定的参考价值。
Linux shell--基础指令
浏览Linux文件系统
Linux中最基础也是最必要的一条指令
cd destination
cd命令可接受单个参数destination,用以指定想切换到的目录名。如果没有为cd命令指定目标路径,它将切换到用户主目录。
destination参数可以用两种方式表示:一种是使用绝对文件路径,另一种是使用相对文件路径。
1. 绝对文件路径
1 xiaoyu@ubuntu:~$ cd /usr/bin
2 xiaoyu@ubuntu:/usr/bin$
pwd命令
pwd命令可以显示出shell会话的当前目录,这个目录被称作当前工作目录。pwd命令的用法如下:
1 xiaoyu@ubuntu:/usr/bin$ pwd
2 /usr/bin
3 xiaoyu@ubuntu:/usr/bin$
可以使用绝对路径文件路径切换到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. 相对文件路径
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$
事实上,在实际工程中,使用绝对路径跟相对路径都没啥讲究,都会互相结合使用。
返回上一级目录
返回上一级目录,我们使用双点符(..),表示当前目录的父目录
双点符在目录层级中移动时非常便利。如果正处在主目录下的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:~$
由于结果太长,我这里就不贴了,建议在目录层级比较少的目录下操作
显示长列表
在基本的输出列表中,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
过滤输出列表
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$
- 问号(?)代表一个字符:
- 星号(*)代表零个或多个字符
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$
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$
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命令只创建了一个空文件。
如果只想改变访问时间,可以使用-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$
复制文件
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$
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$
上一个例子采用了绝对路径,不过也可以使用相对路径
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键就可以为你自动补全命令或者目录名了,这里就不演示了
链接文件
- 符号链接
- 硬链接
符号链接就是实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同。
要为一个文件创建符号链接,原始文件必须事先存在。然后可以使用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而已。它们的内容并不相同,是两个完全不同的文件。
1 xiaoyu@ubuntu:~/xiaoyu$ ls -i *data_file
2 2752954 data_file 2752955 sl_data_file
3 xiaoyu@ubuntu:~/xiaoyu$
硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。引用硬链接文件等同于引用了源文件。要创建硬链接,原始文件也必须实现存在,只不过这次使用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$
注意:只能对处于同一存储媒体的文件创建硬链接。要想在不同存储媒体的文件之间创建链接,只能使用符号链接。
重命名文件
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$
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$
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$
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:~$
删除文件
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基础