2.1 目录与文件命令
在Linux系统中,常常需要使用命令查看和管理目录、文件等。常用的目录与文件操作命令有touch、pwd、mv、cp、ls等。本节将讲述这些命令的使用方法。
2.1.1 查看目录命令pwd
pwd命令的作用是查看当前目录。这个命令的使用方法很简单,没有参数,输入命令后按“Enter”键,就会显示当前绝对路径。
1 单击“主菜单”—“系统工具”—“终端”命令,打开一个终端。
2 在终端中输入“pwd”命令,然后按“Enter”键。需要注意的是,Linux命令都是区分大小写的。命令结果如下所示。
/root
3 显示结果为“/root”,表明当前目录是root用户的根目录。打开一个终端时,默认的目录是这个用户的根目录。
2.1.2 打开目录命令cd
cd命令用于打开一个目录。这个命令的使用方法和DOS中的cd命令相似,常用cd命令的使用方法如表2.1所示。
表2.1 cd命令的使用方法
注意:在Linux系统中,目录、计算机名、域名要用“/”隔开字段,而不能用“\”。这种规则和Windows系统不同。
2.1.3 查看目录命令ls
这里的查看目录指的是显示文件夹下面的文件夹或文件。使用 ls 命令可以查看一个文件夹,参数选项可以用来设置文件的显示方式、排列顺序等内容。如表2.2所示是ls命令的可选参数。
表2.2 ls命令的可选参数
下面的操作是使用cd命令打开目录和使用ls命令查看目录的实例。
1 单击“主菜单”—“系统工具”—“终端”命令,打开一个终端。
2 在终端中输入“ls”命令,然后按“Enter”键。显示结果如下所示。
01.c 4.1.txt a.out Makefile 02.c 4.2.sh a.sh movie_huayudianying01.jpg
3 显示隐藏文件,在终端中输入命令“ls -a”,显示结果如下所示。
. .bash_profile .metacity .. .bashrc .mime.types 01.c b.sh .moc 02.c b, txt movie_huayudianying01.jpg
4 上面的显示结果,“..”表示上一级目录,“.”表示当前目录。以“.”开头的文件表示隐藏文件。
5 显示文件详细列表,在终端中输入命令“ls -l”,显示结果如下所示。在列表中显示了文件权限、所有者、创建时间、文件名等信息。
-rw-r--r-- 1 root root 55 12月 10 04:04 01.c -rw-r--r-- 1 root root 47 12月 10 04:29 02.c -rw-r--r-- 1 root root 48 12月 10 05:57 03.c -rw-r--r-- 1 root root 48 12月 10 04:49 03.c~ -rw-r--r-- 1 root root 48 12月 10 06:00 04.txt -rw-r--r-- 1 root root 17 2011-12-10 1.txt
6 在文件列表中显示一个标志,在终端中输入命令“ls -F”,显示结果如下所示。在列表中对可执行文件加了一个“*”标志,对文件夹加了一个“/”标志。
01.c 4.1.txt* a.out* Makefile* 02.c 4.2.sh* a.sh* movie_huayudianying01.jpg 03.c 4.2.txt* a.txt movie_huayudianying02.jpg
7 多个参数是可以组合的。例如ls -aF表示显示所有的文件,然后添加一个标志;ls -alF表示以列表的形式显示所有的文件,同时添加一个标志。
8 使用“*”可以匹配文件名中的任意字符串。例如ls *.c表示列出扩展名为.c的文件,即列出C语言文件。同时可以在ls的后面添加参数,例如输入命令“ls -l *.c”,输出结果如下所示。
-rw-r--r-- 1 root root 55 12月 10 04:04 01.c -rw-r--r-- 1 root root 47 12月 10 04:29 02.c -rw-r--r-- 1 root root 48 12月 10 05:57 03.c -rw-r--r-- 1 root root 36 2011-12-10 aa.c -rw-r--r-- 1 root root 42 2011-12-09 h.c -rw-r--r-- 1 root root 47 2011-12-09 hello.c
9 使用“? ”可以匹配一个字符。例如输入命令“ls 0? .c”,表示第一个字符为0,扩展名为.c,文件名有两个字符的文件。结果如下所示。
01.c 02.c 03.c
10 输入命令“cd /”,表示进入根目录。输入“ls”命令,显示结果如下所示。
bin dev home lib misc opt root tmp var boot etc initrd lost+found mnt proc sbin usr
11 输入命令“cd ~”,表示进入用户的根目录。如果是root用户,则表示进入“/root” 目录。
2.1.4 建立文件命令touch
touch命令用于建立一个空文件。Linux系统中的文件注重权限和文件内容,而不注重扩展名,所以可以使用随意的扩展名。如果需要建立的文件已经存在,touch 命令可以使文件的最后访问时间变成当前时间。下面的操作是使用touch命令建立空文件的例子。
1 单击“主菜单”—“系统工具”—“终端”命令,打开一个终端。
2 在终端中输入命令“touch file1”,然后按“Enter”键,建立一个文件file1。
3 以列表的方式查看这个文件,输入命令“ls -l file1”。显示结果如下所示。
-rw-r--r-- 1 root root 0 12月 10 20:14 file1
4 使用touch命令可以更改文件的最后访问时间,输入命令“touch file1”。
5 查看这个文件,输入命令“ls -l file1”,显示结果如下所示。可以发现,文件的最后访问时间已经改变。
-rw-r--r-- 1 root root 0 12月 10 20:16 file1
6 在Linux系统中,文本文件的扩展名并非必须是.txt,任意的空文件都可以作为文本文件进行编辑。在终端中输入命令“vim file1”,可以对这个文件进行编辑。
2.1.5 建立与删除文件夹命令mkdir、rmdir
mkdir命令用于建立一个目录。建立的目录不一定是在当前目录下,可以在任意一个目录中建立目录。参数-p可以指定建立多级目录。
rmdir命令用于删除一个空目录,也可以使用-p命令删除多级目录。下面的操作是建立与删除目录的例子。
1 单击“主菜单”—“系统工具”—“终端”命令,打开一个终端。
2 在终端中输入命令“mkdir mydir”,然后按“Enter”键,这时会在用户的主目录中建立一个目录mydir。
3 输入命令“rmdir mydir”,可以删除目录mydir。
4 输入命令“mkdir -p mydir1/mydir2”,表示在目录mydir1中建立目录mydir2。但是mydir1是不存在的,用参数-p可以同时建立目录mydir1。
5 输入命令“rmdir mydir1”,目录mydir1是非空的,不可删除。输出结果如下所示。
‘mydir1' :目录非空
6 输入命令“rmdir -p mydir1/mydir2”,会删除目录mydir2。同时,mydir1是空目录,则会同时删除目录mydir1。
2.1.6 文件复制命令cp
cp命令用于将文件或目录复制到另一个文件或目录中,该命令有多个参数,可以实现很多种功能。cp命令的使用方法如下所示。
cp [参数] 源文件或目录 目标文件或目录
cp命令的可选参数如下。
❑ -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
❑ -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
❑ -f:覆盖已经存在的目标文件而不给出提示。
❑ -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答“y”时目标文件将被覆盖。
❑ -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
❑ -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
❑ -l:不复制文件,只是生成链接文件。
需要注意的是,使用 cp 命令复制文件时,如果目标文件已经存在,则会覆盖目标文件而不给出提示。被覆盖的文件是不能恢复的。为防止破坏另一个文件,复制文件时最好使用-i选项。下面的操作是文件复制的例子。
1 单击“主菜单”—“系统工具”—“终端”命令,打开一个终端。
2 输入命令“cp 01.c 11.c”,然后按“Enter”键,表示将主目录下的文件01.c复制一份放到当前目录下,文件名为11.c。
3 建立一个文件夹c,输入命令“mkdir c”。
4 复制多个文件,输入命令如下所示,表示将当前目录下的所有扩展名为.c 的文件复制到文件夹c中,文件名不变。
cp *.c c/
5 提示是否覆盖文件。将文件01.c复制到目录c中,因为目录中已经有该文件,需要加-i选项给出提示确认是否覆盖。输入命令如下所示。
cp -i 01.c /c
6 终端中会输出下面的提示,用户输入“y”表示确认覆盖。
cp: ’是否覆盖/c? '
7 输入命令“cp –r /c /d”,将目录c中的所有文件和目录复制到目录d中。如果目录d不存在,则建立这个目录。
8 输入命令“cp d/01.c .”,将目录d中的文件01.c复制到当前目录中,文件名不变。
2.1.7 文件移动和更名命令mv
在Linux系统中,除非把文件移动到不同的分区中,否则文件在移动时依旧是以前的文件。文件的重命名相当于文件的移动。文件移动命令的参数如下所示。
❑ -b:若需覆盖文件,则覆盖前先备份。
❑ -f:若目标文件或目录与现有的文件或目录同名,则直接覆盖已有的文件或目录。
❑ -i:覆盖前先询问用户。
❑ -S:与-b参数一并使用,可指定备份文件所要附加的字尾。
❑ -u:在移动或文件更名时,若目标文件已经存在,且其文件日期比源文件新,则不覆盖目标文件。
❑ -v:执行时显示详细的信息。
❑ -V:与-b参数一并使用,指定备份的方法。
下面的操作是使用mv命令移动和重命名文件的例子。
1 单击“主菜单”—“系统工具”—“终端”命令,打开一个终端。
2 输入下面的命令,将用户根目录下的文件01.c更名为文件001.c。
mv 01.c 001.c
3 输入下面的命令,将用户根目录下的所有扩展名为.c的文件移动到目录c中。
mv *.c /c
4 输入下面的命令,将用户根目录下的文件001.c移动到目录c中,且有同文件时不提示信息。
mv –f 001.c c/
2.1.8 删除文件与目录命令rm
使用rm命令可以删除文件或目录。如果要删除目录,则需要添加参数-r。在Red Hat Linux 9.0中,删除文件时默认添加了-i参数,会提示用户是否删除。rm的参数如下所示。
❑ -d:把删除的目录的硬链接删除,并删除该目录。
❑ -f:强制删除文件或目录。
❑ -i:删除文件或目录之前询问用户。
❑ -r:递归处理,将指定目录下的所有文件及子目录全部删除。
❑ -v:显示命令执行过程。
下面的操作是使用rm删除文件和目录的例子。
1 单击“主菜单”—“系统工具”—“终端”命令,打开一个终端。
2 在终端中输入下面的命令,删除目录c下所有的扩展名为.c的文件。
rm c/*.c
3 终端会依次提示是否删除目录中的文件,输入“y”表示删除文件,输入“n”表示取消删除。
4 输入下面的命令删除目录d中所有的文件,并且不提示信息。
rm -rf d/
2.1.9 创建链接命令ln
Linux中的链接相当于Windows系统中的快捷方式。打开链接时,可以打开相应的文件。使用ln命令可以创建一个链接,该命令的可选参数如下所示。
❑ -b:覆盖目标文件之前备份。
❑ -d:建立目录的硬链接。
❑ -f:强行建立文件或目录的链接。
❑ -i:覆盖已有文件之前先询问用户。
❑ -n:把符号链接的目的目录视为一般文件。
❑ -s:对源文件建立符号链接,而非硬链接。
❑ -S:用“-b”参数备份目标文件。
链接有软链接和硬链接两种,这两种链接的含义是不同的。
硬链接:硬链接与原文件一样,指文件系统中的文件。建立硬链接时,链接文件和被链接文件必须位于同一个分区中,并且不能建立指向目录的硬链接。
软链接:软链接即符号链接,只是建立一个简单的快捷方式。用户打开这个快捷方式时,会自动打开被链接的文件。如果ln命令加上-s选项,则表示建立符号链接。
下面的操作是使用ln命令建立链接的实例。
1 单击“主菜单”—“系统工具”—“终端”命令,打开一个终端。
2 输入下面的命令,对文件01.c建立一个001.c的硬链接。
ln 01.c 001.c
3 输入下面的命令,对文件01.c建立一个002.c的软链接。
ln -s 01.c 002.c
4 文件同名时会提示信息。输入下面的命令,对文件01.c建立一个002.c的软链接,这时会提示是否覆盖已有文件。
ls -si 01.c 002.c
2.1.10 查看文件信息命令wc
使用wc命令可以查看一个文件的行数、字数、字符数的信息。该命令的使用方法比较简单,可以使用下面的参数选择输出的信息。
❑ -l:显示文件的文本行数。
❑ -w:显示文件的字数。
❑ -c:显示文件的字符数。
例如,查看当前目录下文件01.c的信息,可以输入下面的命令。
wc 01.c
命令的显示结果如下所示。
5 8 55 01.c
显示的结果表示有5行文本,共有8个单词、55个字符。如果要显示某一项信息,则需要在wc命令后面加入一个参数。下面的命令可以显示这个文件的行数。
wc -l 01.c
命令的运行结果如下所示,表示这个文件有5行。
5
2.1.11 文件查看命令cat
使用cat命令可以输出文件的内容。该命令的可选参数如下。
❑ -n:由1开始对所有输出的行进行编号。
❑ -b:和-n相似,但对空白行不编号。
❑ -s:当遇到有连续两行以上的空白行时,就转换为一行。
下面的操作是使用cat命令查看文件的例子。
1 单击“主菜单”—“系统工具”—“终端”命令,打开一个终端。
2 在终端中输入命令“cat 01.c”,然后按“Enter”键,终端中会显示文件01.c 所有的内容。
3 显示多个文件的内容。在终端中输入下面的命令,可以连续显示3个文件的内容。
cat 01.c 02.c 03.c
4 将输出结果定向到一个文件中。在终端中输入下面的命令,可以将3个文件所有的内容输出到文件123.c中。
cat 01.c 02.c 03.c >123.c
5 显示文件时输出行号,在终端中输入下面的命令。
cat –n 01.c
6 把一个文件添加行号后保存到另一个文件中,在终端中输入下面的命令。
cat –n 01.c >003.c
7 在终端中输入命令“cat 003.c”,显示结果如下所示。文件中的行号是上一命令产生的行号。
1 int main() 2 { 3 printf("hello , Linux"); 4 getch(); 5 }
2.1.12 查看文件视图命令head与tail
head命令用来查看文件前面的n行。如果没有设定n的值,则默认显示文件的前10行。tail命令与head命令的使用方法相同,用来查看文件末尾的内容。如表2.3所示是这两个命令的使用方法。
表2.3 head与tail命令的使用方法
2.1.13 文件权限设置命令chmod
文件权限指的是文件是否可以进行执行、写入、读取等操作。在Linux系统中,用户可以对自己的文件设置文件权限,不同的用户和组具有不同的文件权限。使用chmod命令可以设置和更改权限的方式。在设置权限之前,需要理解文件权限的种类。
文件权限分为三级,用户可以进行不同的权限设置。这三级权限和表示方法如下所示。
❑ 所有者:用u表示,创建这个文件的用户。
❑ 群组:用g表示,所有者同一群组中的用户。
❑ 其他:用o表示,除了所有者和同组用户以外的用户。
除此之外,可以用a表示所有的用户。
权限需要用权限字符表示,r 表示可读,w 表示可写,x 表示可执行。权限的更改需要使用权限设定符号,+表示增加权限,-表示取消权限,=表示唯一设定权限。
chmod命令的可选参数如下所示。
❑ -c:若文件权限已经更改,则显示其更改动作。
❑ -f:若文件权限无法被更改,则不显示错误信息。
❑ -v:显示文件变更的详细资料。
❑ -R:对目录下的所有文件与子目录进行相同的权限设置。
下面的操作是用chmod命令对文件权限进行设置的例子。
1 单击“主菜单”—“系统工具”—“终端”命令,打开一个终端。
2 在终端中输入下面的命令,对文件01.c的所有者添加可执行权限。
chmod +x 01.c
3 在终端中输入下面的命令,对文件01.c的同组用户删除可写权限。经过这种设置以后,同组用户就无法编辑文件了。
chmod g-x 01.c
4 在终端中输入下面的命令,对文件01.c的所有用户添加可读权限。
chmod a+r 01.c
5 在终端中输入下面的命令,对文件01.c的其他用户和同组用户添加可读权限,同时取消可写权限。
chmod go+r-w 01.c
6 在终端中输入“vim”命令,打开VIM。
7 在VIM中按“i”键,进入插入模式,在文件中输入下面的内容。
echo "hello , Linux"
8 按“Esc”键返回普通模式,然后输入“:w 3.1.sh”命令保存文件。输入“:q”命令退出VIM。
9 运行已经编辑的文件,在终端中输入如下所示的命令。
./3.1.sh
10 终端显示权限不够,文件不能运行。在终端中输入下面的命令,对用户添加可执行权限。
chmod u+x 3.1.sh
11 输入命令“./3.1.sh”,这个文件的运行结果如下所示。上一步骤的命令对这个文件添加了可执行权限。
hello , Linux
12 查看文件权限,使用list -l命令可以显示一个文件的权限。在终端中输入下面的命令,可以显示文件3.1.sh的权限。
list -l 3.1.sh
13 命令的运行结果如下所示。
-rwxr-xr-x 1 root root 20 12月 10 22:49 3.1.sh
14 显示的“-rwxr-xr-x”表示文件的权限。第一个字符如果不是“-”,则表示这个文件不是普通文件。后面的字符串3个字符为一组,“rwx”表示所有者的权限是可读、可写、可执行;“r-x”表示同组用户可读、不可写、可执行;最后的“r-x”表示其他用户可读、不可写、可执行。
2.1.14 查找文件命令find
使用find命令可以从目录和子目录中搜索文件。find命令的最简单使用方法如下所示。
find 目录 文件名
例如,要查找计算机中一个名为httpd.sh的文件,但不知道相应的目录,则可以在终端中输入下面的命令。
find / httpd.sh
这时,终端会搜索出硬盘中所有文件名为httpd.sh的文件。如果缩小查找范围,则可以输入下面的命令。
find /usr httpd.sh
在这个命令中,文件名是支持“*”与“? ”等通配符的。例如下面的命令,可以查找root目录中所有扩展名为.c的文件。
find /root *.c