1. 启动 shell
/etc/passwd 文件包含了所有系统用户账户列表以及每个用户的基本配置信息:
christine:x:501:501:Christine Bresnahan:/home/christine:/bin/bash
其中 /bin/bash 该字段指定了用户使用的 shell 程序。在前面的 /etc/passwd 样例条目中,用户 christine 使用 /bin/bash 作为自己的默认 shell 程序。这意味着当 christine 登录 Linux 系统后,bash shell会自动启动。
man 命令:
当使用 man 命令查看命令手册页的时候,这些手册页是由分页程序(pager)来显示的。可以通过点击空格键进行翻页,或是使用回车键逐行查看。另外还可以使用箭头键向前向后滚动手册页的内容,可以点击q键退出。
大多数命令都可以接受 -help 或 --help 选项。
2. 文件系统
Linux 使用正斜线(/)而不是反斜线(\)在文件路径中划分目录。在 Linux 中,反斜线用来标识转义字符。
-
绝对文件路径
绝对文件路径总是以正斜线(/)作为起始,指明虚拟文件系统的根目录。
-
相对文件路径
相对文件路径允许用户指定一个基于当前位置的目标文件路径。相对文件路径不以代表根目
录的正斜线(/)开头,而是以目录名(如果用户准备切换到当前工作目录下的一个目录)或是一个特殊字符开始。
有两个特殊字符可用于相对文件路径中:
- 单点符(.),表示当前目录;
- 双点符(…),表示当前目录的父目录;
3. 文件和目录列表
ls 命令输出的列表是按字母排序的(按列排序而不是按行排序)
带 -F 参数的 ls 命令轻松区分文件和目录
$ ls -F
Desktop/ Downloads/ Music/ Pictures/ Templates/ Videos/
Documents/ examples.desktop my_script* Public/ test_file
$
-F 参数在目录名后加了正斜线(/),在可执行文件(比如上面的my_script文件)的后面加个星号。在Linux上,隐藏文件通常是文件名以点号开始的文件,-a 参数可将其显示出来。
-R 参数是 ls 命令可用的另一个参数,叫作递归选项。它列出了当前目录下包含的子目录中的文件。
-l 参数会产生长列表格式的输出,默认显示的是文件修改时间
$ ls -l
total 48
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Desktop
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Documents
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Downloads
-rw-r--r-- 1 christine christine 8980 Apr 22 13:36 examples.desktop
...
每一行都包含了关于文件(或目录)的下述信息:
文件类型,比如目录(d)、文件(-)、字符型文件(c)或块设备(b);
文件的权限;
文件的硬链接总数;
文件属主的用户名;
文件属组的组名;
文件的大小(以字节为单位);
文件的上次修改时间;
文件名或目录名。
当用户指定特定文件的名称作为过滤器时,ls 命令只会显示该文件的信息。
$ ls -l my_script
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
$
ls 命令能够识别标准通配符,并在过滤器中用它们进行模式匹配:
- 问号(?)代表一个字符;
- 星号(*)代表零个或多个字符;
- 中括号([ ])表示一个字符位置并给出多个可能的选择;
- 感叹号 (!) 表示将将不需要的内容排除在外;
$ ls -l my_s*t
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
$
$ ls -l my_scr[ai]pt
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
$
$ ls -l f[a-i]ll
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fall
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fell
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fill
$
$ ls -l f[!a]ll
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fell
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fill
-rw-rw-r-- 1 christine christine 0 May 21 13:44 full
$
4. 处理文件
4.1 创建文件
touch filename
touch 命令创建了你指定的新文件,并将你的用户名作为文件的属主。注意,文件的大小是零,因为touch命令只创建了一个空文件。
4.2 复制文件
cp source destination
当 source 和 destination 参数都是文件名时,cp 命令将源文件复制成一个新文件,并且以destination 命名。新文件就像全新的文件一样,有新的修改时间。destination 可以为目录。
cp 命令的 -R 参数威力强大。可以用它在一条命令中递归地复制整个目录的内容。
$ ls -Fd *Scripts
Scripts/
$ ls -l Scripts/
total 25
-rwxrw-r-- 1 christine christine 929 Apr 2 08:23 file_mod.sh
-rwxrw-r-- 1 christine christine 254 Jan 2 14:18 SGID_search.sh
-rwxrw-r-- 1 christine christine 243 Jan 2 13:42 SUID_search.sh
$
$ cp -R Scripts/ Mod_Scripts
$ ls -Fd *Scripts
Mod_Scripts/ Scripts/
$ ls -l Mod_Scripts
total 25
-rwxrw-r-- 1 christine christine 929 May 21 16:16 file_mod.sh
-rwxrw-r-- 1 christine christine 254 May 21 16:16 SGID_search.sh
-rwxrw-r-- 1 christine christine 243 May 21 16:16 SUID_search.sh
$
在执行 cp –R 命令之前,目录 Mod_Scripts 并不存在。它是随着 cp –R 命令被创建的,整个Scripts 目录中的内容都被复制到其中。注意,在新的 Mod_Scripts 目录中,所有的文件都有对应的新日期。Mod_Scripts 目录现在已经成为了 Scripts 目录的完整副本。
ls -d 只列出目录本身的信息,不列出其中的内容。
$ ls -Fd public/
public//
$ ls -F public/
2018/ baidusitemap.xml css/ index.html search.xml
archives/ categories/ favicon.ico js/ sitemap.xml
atom.xml CNAME fonts/ page/ tags/
4.3 链接文件
如需要在系统上维护同一文件的两份或多份副本,除了保存多份单独的物理文件副本之外,还可以采用保存一份物理文件副本和多个虚拟副本的方法。这种虚拟的副本就称为链接。链接是目录中指向文件真实位置的占位符。
在Linux中有两种不同类型的文件链接:
-
符号链接-软链接
符号链接就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同。
要为一个文件创建符号链接,原始文件必须事先存在。然后可以使用ln命令以及**-s选项**来创建符号链接。
$ ls -l data_file -rw-rw-r-- 1 christine christine 1092 May 21 17:27 data_file $ $ ln -s data_file sl_data_file $ $ ls -l *data_file -rw-rw-r-- 1 christine christine 1092 May 21 17:27 data_file lrwxrwxrwx 1 christine christine 9 May 21 17:29 sl_data_file -> data_file $
在上面的例子中,注意符号链接的名字sl_data_file位于ln命令中的第二个参数位置上。显示在长列表中符号文件名后的->符号表明该文件是链接到文件data_file上的一个符号链接。
符号链接sl_data_file只有9个字节,而data_file有1092个字节。这是因为sl_data_file仅仅只是指向data_file而已。它们的内容并不相同,是两个完全不同的文件。
另一种证明链接文件是独立文件的方法是查看 inode 编号。文件或目录的inode编号是一个用于标识的唯一数字,这个数字由内核分配给文件系统中的每一个对象。要查看文件或目录的inode编号,可以给ls命令加入-i参数。
$ ls -i *data_file 296890 data_file 296891 sl_data_file $
-
硬链接
硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。引用硬链接文件等同于引用了源文件。要创建硬链接,原始文件也必须事先存在,只不过这次使用 ln 命令时不再需要加入额外的参数了。
$ ls -l code_file -rw-rw-r-- 1 christine christine 189 May 21 17:56 code_file $ $ ln code_file hl_code_file $ $ ls -li *code_file 296892 -rw-rw-r-- 2 christine christine 189 May 21 17:56 code_file 296892 -rw-rw-r-- 2 christine christine 189 May 21 17:56 hl_code_file $
带有硬链接的文件共享inode编号。这是因为它们终归是同一个文件。还要注意的是,链接计数(列表中第三项)显示这两个文件都有两个链接。另外,它们的文件大小也一模一样。
4.4 重命名文件
在Linux中,重命名文件称为移动(moving),mv命令可以将文件和目录移动到另一个位置或重新命名。
a. 可以使用mv来移动文件的位置;
b. 可以使用mv命令移动文件位置并修改文件名称;
c. 可以使用mv命令移动整个目录及其内容;
在使用 mv 的过程中,文件的时间戳和inode编号都没有改变。改变的只有位置和名称。
4.5 删除文件
bash shell中删除文件的命令是rm,-i命令参数提示你是不是要真的删除该文件。bash shell中没有回收站或垃圾箱,文件一旦删除,就无法再找回。
$ rm -i fall
rm: remove regular empty file 'fall'? y
$
rm命令的另外一个特性是,如果要删除很多文件且不受提示符的打扰,可以用**-f参数强制删除。**
5. 处理目录
5.1 创建目录
在Linux中创建目录很简单,用mkdir命令即可
要想同时创建多个目录和子目录,需要加入-p参数:
$ mkdir -p New_Dir/Sub_Dir/Under_Dir
$
$ ls -R New_Dir
New_Dir:
Sub_Dir
New_Dir/Sub_Dir:
Under_Dir
New_Dir/Sub_Dir/Under_Dir:
$
5.2 删除目录
默认情况下,rmdir命令只删除空目录,要删除含有整个文件的目录,可以使用:
a、可以在整个非空目录上使用rm命令。使用**-r选项**使得命令可以向下进入目录,删除其中的文件,然后再删除目录本身。
b、一口气删除目录及其所有内容的终极大法就是使用带有-r参数和-f参数的rm命令
6. 查看文件
6.1 查看文件类型
file命令能够探测文件的内部,并决定文件是什么类型
$ file my_file
my_file: ASCII text
file命令不仅能确定文件中包含的文本信息,还能确定该文本文件的字符编码,ASCII。
$ file New_Dir
New_Dir: directory
可以使用file命令作为另一种区分目录的方法
$ file sl_data_file
sl_data_file: symbolic link to 'data_file'
file命令甚至能够告诉你它链接到了哪个文件上
$ file my_script
my_script: Bourne-Again shell script, ASCII text executable
file命令对脚本文件的返回结果。尽管这个文件是ASCII text,但因为它是一个脚本文件,所以可以在系统上执行(运行)
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.24,
[...]
file命令能够确定该程序编译时所面向的平台以及需要何种类型的库。
6.2 查看整个文件
cat 命令
-
-n 参数会给所有的行加上行号
$ cat -n test1 1 hello 2 3 This is a test file. 4 5 6 That we'll use to test the cat command.
-
-b 参数只给有文本的行加上行号
$ cat -b test1 1 hello 2 This is a test file. 3 That we'll use to test the cat command.
more 命令
more命令会显示文本文件的内容,但会在显示每页数据之后停下来。可以通过按空格键或回车键以逐行向前的方式浏览文本文件。浏览完之后,按q键退出。
less 命令
less命令的操作和more命令基本一样,一次显示一屏的文件文本。除了支持和more命令相同的命令集,它还包括更多的选项。其中一组特性就是less命令能够识别上下键以及上下翻页键(假设你的终端配置正确)。
6.3 查看部分文件
tail 命令
tail命令会显示文件最后几行的内容(文件的“尾部”)。默认情况下,它会显示文件的末尾10行。可以向tail命令中加入**-n参数来修改所显示的行数**。
$ tail -n 2 log_file
line19
Last line - line20
-f参数是tail命令的一个突出特性。它允许你在其他进程使用该文件时查看文件的内容。tail命令会保持活动状态,并不断显示添加到文件中的内容。
head 命令
head命令,会显示文件开头那些行的内容。默认情况下,它会显示文件前10行的文本:
它也支持-n参数,这样就可以指定想要显示的内容了。这两个命令都允许你在破折号后面输入想要显示的行数(即不需要 输入 -n 参数)
$ head -5 log_file
line1
line2
line3
line4
line5