- Linux系统下C程序开发详解
- 徐磊等编著
- 8字
- 2020-08-26 19:04:23
第二部分 Shell编程篇
第3章 Linux常用命令
3.1 目录与文件命令
在Linux系统中,常常需要使用命令查看和管理目录,文件等。常用的目录与文件管理命令有touch、pwd、mv、cp、ls等。本章将讲述这些命令的使用。
3.1.1 查看目录命令pwd
pwd命令的作用是查看当前所在的目录。这个命令的使用很简单,没有参数,输入命令后按“Enter”键,会显示当前所在的绝对路径。
[1]单击“主菜单”|“系统工具”|“终端”命令,打开一个终端。
[2]在终端中输入“pwd”命令,然后按“Enter”键。需要注意的是,Linux命令都是区分大小写的。命令的结果如下所示。
/root
[3]显示结果为“/root”,表明当前目录是root用户的根目录。打开一个终端时,默认的目录是这个用户的根目录。
3.1.2 打开目录命令cd
cd命令用于打开一个目录。这个命令的使用方法和DOS中的cd命令是相似的。如表3.1所示,是几种常用的cd命令使用方法。
表3.1 cd命令的使用方法
注意:在Linux系统中,目录、计算机名、域名要用“/”隔开字段,而不能用“\”。这种规则和Windows系统是不同的。
3.1.3 查看目录命令ls
查看目录指的是显示文件夹下面的文件夹或文件。ls命令可以查看一个文件夹,参数选项可以设置文件的显示方式、排列顺序等内容。如表3.2所示,是ls命令的可选参数。
表3.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 2005-12-09 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 2005-12-10 aa.c -rw-r--r-- 1 root root 42 2005-12-09 h.c -rw-r--r-- 1 root root 47 2005-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”。
3.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”,可以对这个文件进行编辑。
3.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。
3.1.6 文件复制命令cp
cp命令用于将文件或目录复制到另一文件或目录,该命令有多个参数,可以实现很多种功能。cp命令的使用方法如下所示。
cp [参数] 源文件或目录 目标文件或目录
cp命令的可选参数如下所示。
●-a:-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复制到当前目录中,文件名不变。
3.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/
3.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/
3.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
3.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
3.1.11 文件查看命令cat
cat命令可以输出文件的内容。该命令可选的参数如下所示。
●-n:由1开始对所有输出的行进行编号。
●-b:和-n相似,但对空白行不编号。
●-s:当遇到有连续两行以上的空白行,就轮换为一行。
下面的操作,是使用cat命令查看文件的例子。
[1]单击“主菜单”|“系统工具”|“终端”命令,打开一个终端。
[2]在终端中输入命令“cat 01.c”,然后按“Enter”键,终端中会显示文件01.c所有的内容。
[3]cat命令可以显示多个文件的内容。在终端中输入下面的命令。
cat 01.c 02.c 03.c
[4]上面的命令可以连续显示三个文件的内容。可以将输出结果定向到一个文件中。在终端中输入下面的命令,将三个文件所有的内容输出到文件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 }
3.1.12 查看文件视图命令head与tail
head命令用来查看文件前面的n行。如果没有设定n的值,则默认显示文件的前10行。tail命令与head命令的使用方法相同,用来查看文件末尾的内容。如表3.3是这两个命令的使用方法。
表3.3 ls命令的参数
3.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”表示文件的权限。第一个字符如果不是“-”,则表示这个文件不是普通文件。后面的字符串三个字符为一组。“rwx”表示所有者的权限是可读、可写、可执行。“r-x”表示同组用户可读、不可写、可执行。最后的“r-x”表示其他用户可读、不可写、可执行。
3.1.14 查找文件命令find
find命令可以从目录和子目录中搜索文件。find命令的最简单使用方式如下所示。
find 目录 文件名
例如,要查找计算机中的一个名为httpd.sh的文件,而不知道相应的目录,可以在终端中输入下面的命令。
find / httpd.sh
这时,终端会搜索出硬盘中所有文件名为httpd.sh的文件。如果缩小查找范围,可以输入下面的命令。
find /usr httpd.sh
在这个命令中,文件名是支持“*”与“?”等通配符的。例如下面的命令,可以查找root目录中所有扩展名为.c的文件。
find /root *.c
3.2 man系统帮助命令
Linux系统中有着大量的命令操作,用户不一定完全掌握这些命令的使用方法。man命令可以对系统中的命令提供详细的帮助信息。本节将讲述使用man命令查看系统帮助文档。
3.2.1 man手册的使用方法
man是manual的缩写,意思是在线帮助手册。如果需要查找某个命令的帮助信息,可以在终端中输入“man”,然后输入这个命令即可。
默认情况下,终端会使用一个名为less的文件阅读器来查阅帮助手册。less的使用非常简单。q命令退出手册页。键盘向上和向下方向键可以一次一行的上下移动手册。翻页键“Page Up”和“Page Down”可以向上或向下翻页。“空格”键可以一次向下翻一页。“Enter”键可以一次向下移动一行。“/”加上需要搜索的文本可以在帮助文档中查找需要的内容。例如下面的操作,可以查看ls命令的帮助手册。
[1]单击“主菜单”|“系统工具”|“终端”命令,打开一个终端。
[2]在终端中输入“man ls”命令,然后按“Enter”键。终端中显示的ls命令帮助文本如下所示。
LS(1) FSFLS(1) NAME ls -list directory contents SYNOPSIS ls [OPTION]... [FILE]... DESCRIPTION Listinformationaboutthe FILEs (the current directory by default). Sort entries alphabetically if none of -cftuSUX nor --sort. Mandatory arguments to long options aremandatoryforshortoptions too. -a, --all do not hide entries starting with . -A, --almost-all do not list implied . and .. --author print the author of each file -b, --escape print octal escapes for nongraphic characters
[3]翻页键“Page Up”和“Page Down”可以对帮助文档向上或向下翻页。查看文档以后,按“q”键可以退出帮助文档。
3.2.2 帮助文档的结构
从上面的实例可知,帮助文档可分为不同的小节。每个小节讲述命令不同方面的内容,这些小节的标志和含义如表3.4所示。在使用man手册时需要识别这些小节,在正确的小节中找到需要的内容。
表3.4 man手册的小节和含义
3.3 info手册
info是系统中的另一个帮助文档,和man帮助文档的功能相似。man是Linux系统标准帮助文档,而info手册通常是自由软件的帮助手册。一般来说,info手册的内容要比man的内容更加丰富和精确。
info帮助手册的使用方法很简单。在终端中输入“info”,再输入需要帮助的命令即可。打开帮助手册以后,可以使用方向键、翻页键、“Home”键、“End”键等进行翻页浏览。例如用命令info ls查看ls命令的帮助文档,显示的内容如下所示。
File: coreutils.info ,Node:ls invocation ,Next dir invocation ,Up Directory listing `ls': List directory contents ============================= The `ls' program lists information about files (of any type, including directories). Options and file arguments can be intermixed arbitrarily, as usual. For non-option command-line arguments that are directories, by default `ls' lists the contents of directories, not recursively, and omitting files with names beginning with `.'. For other non-option
文档的第一行是这一文档相关的信息。这些信息的标记和含义如表3.5所示。
表3.5 手册页第一行标记
在查看帮助文档时,在键盘上输入下面的命令可以进行各种操作。
● n(next):到相邻的下一个节点。
● p(previous):到相邻的上一个节点。
● l(last):到上一次浏览的节点。
● u(upper node):到上层节点。
● d(directory node):到info手册的根节点。
● t(top node):到当前手册的顶层节点。
● i(search in index):在标题中搜索指定字符串。
● s(search):全文检索,也可以用“/”来搜索。
3.4 小结
本章主要介绍了Linux中常用的文件操作命令和系统帮助文档的使用。在以后的编程学习中,需要使用这些命令对文件进行各种操作,其中文件权限的设置是一个难点,在使用这个命令时,需要注意命令参数的作用与含义。读者有学习中遇到的问题,可以使用man帮助手册查看相关的帮助信息。