Linux系统下C程序开发详解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第二部分 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帮助手册查看相关的帮助信息。