• 1. 第四章 开始使用LINUX
  • 2. 本章目标 了解shell的概念 熟练掌握命令行指令的使用
  • 3. 掌握Shellshell是用户和Linux操作系统之间的接口 用户就是通过shell和操作系统的内核之间进行交互的
  • 4. (本页无文本内容)
  • 5. 什么是Shellshell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其它应用程序所调用
  • 6. 人与系统之间-shell核心(kernel)是操作系统最主要的程序。在使用操作系统的时候,用户并不是直接控制核心,而是通过shell来操作。登入系统后,第一个执行的程序就是shell。 在windows 95/98中也有shell-explorer.exe; MS-DOS的shell是command.com。 Linux/Unix下有多种shell可供选择
  • 7. shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其它应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。 有一些命令,比如改变工作目录命令cd,是包含在shell内部的。 还有一些命令,例如拷贝命令cp和移动命令rm,是存在于文件系统中某个目录下的单独的程序。
  • 8. shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序。 然后shell在搜索路径里寻找这些应用程序。 如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。 如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给Linux内核。
  • 9. shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。 shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。
  • 10. 当普通用户成功登录,系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值(RedHat、TurboLinux系统默认的shell是BASH),对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。 一旦出现了shell提示符,就可以键入命令名称及命令所需要的参数。shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从键盘上按ctrl+c发出中断信号来中断它(在正常结束之前,中止它的执行)。
  • 11. 当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按ctrl+d实现),结束登录。
  • 12. Shell的种类Linux中的shell有多种类型 最常用的几种是: Bourne shell(sh) C shell(csh) Korn shell(ksh) Linux操作系统缺省的shell是Bourne Again shell。它是Bourne shell的扩展,简称bash,与Bourne shell完全兼容,并且在Bourne shell的基础上增加、增强了很多特性。例如指令编辑、指令自动完成等功能。
  • 13. ksh是Korn shell的缩写,由Eric Gisin编写,共有42条内部命令。该shell的最大优点是几乎和商业发行版的ksh完全兼容,可以在不花钱购买商业版本的情况下尝试商业版本的性能了。
  • 14. csh是linux比较大的内核,它由以William Joy为代表的共计47位作者编成,共有52个内部命令。该shell其实是指向/bin/tcsh这样的一个shell,csh其实就是tcsh。
  • 15. zch是linux最大的shell之一,由Paul Falstad完成,共有84个内部命令。如果只有一般的用途,是没有必要安装这样的shell的。
  • 16. 可以通过查看/etc/shells文件,了解系统支持的shell的种类。
  • 17. 查看登入的shell echo $SHELL 显示在环境变量中的shell的设置值 在/etc/passwd文件中有每一个用户的bash的设置。每一个用户在登录linux以后就会进入设置的bash环境下。
  • 18. 变更登入shell改变passwd文件中的shell的设置,最好不要直接编辑/etc/passwd文件,而以chsh指令变更。用户可以直接更改自己的设置。 chsh [选项][用户] 一般用户只能改变自己的登入shell,root则可以指定更改其他用户的设置。 -l 显示列在/etc/shells文件内的shell -s 直接指定shell为要设置变更的登入shell chsh -s 包含绝对路径的shell 用户名 -u或help 显示指令说明 -v 显示指令版本信息
  • 19. 普通用户要求输入密码,root直接更改。 设置完成后并不会马上改变shell,用户必须退出再登入系统,才会启动新设置的shell。
  • 20. 使用不同的shell登录后,可以执行系统中其他的shell来使用。例如: tcsh 可以在系统中连续执行多个shell。 但当你执行了一层以上的其他shell时,并不能用logout退出系统,必须要一一离开每一层的shell
  • 21. 命令行用户与操作系统之间的交流是通过命令行来实现的 用户登录时,实际进入了shell,它遵循一定的语法将输入的命令加以解释并传给系统
  • 22. 指令解析指令可以分成两种:一些是linux指令,例如:ls,在/bin或其它路径下可以找到独立的文件,执行这些指令时,必须从指定的路径去搜寻这些文件。 另一种是shell内建的指令,例如:cd,并没有独立的文件存在。 不管是独立的文件,或是内建的指令,都有相同的基本指令格式: 指令[-选项][-选项][-参数] 命令行中输入的第一个字必须是一个命令的名字,第二个字是命令的选项或参数,命令行中的每个字必须由空格或TAB隔开
  • 23. 显示目录内容ls 可以看到不同颜色的文件和目录 蓝色→目录 绿色→可执行文件 红色→压缩文件 浅蓝色→链接文件 灰色→其他文件    如果在一些终端下没有颜色,可以使用 ls – -color(always,auto,never) 打开“/etc/profile”,加入:alias ls="ls --color",那么在下次启动bash时就可以显示颜色的目录列表了
  • 24. 像硬盘、软盘、磁带等存储设备,它们传输数据的速度很快,一般以数据块进行传输的,每个数据块通常为512字节。这些以块为单位进行传输的设备叫做“块设备”。在列出目录清单时,在一行前有“b”符号显示。 像终端、显示器等为字符设备,传输速度较慢。在列出目录清单时,在一行前有“c”符号显示。
  • 25. 选项和参数选项是包括一个或多个字母的代码 选项可用于改变命令执行的动作的类型 参数是在命令行中的选项之后键入的一个或多个单词 如果参数的数目与命令要求不符,shell将会给出出错信息
  • 26. 长格式显示ls -l ls -al ls –a /etc/skel 一个圆点“.”表示当前目录,两个圆点“..”表示当前目录的父目录。
  • 27. ls –d /etc ls –F vdir
  • 28. 相对于根目录的路线称为绝对路径,相对于当前目录的路线称为相对路径。 相对路径只能用于当前目录的子目录及父目录。
  • 29. (本页无文本内容)
  • 30. 切换目录cd [路径] cd / 切换到根目录/ cd 回到用户的根目录 cd . 仍为当前目录 cd . . 退到父目录 cd - 后退到上一次进入的目录 ~     代表自己的家目录 ~user 代表到 user 这个人的家目录
  • 31. root @test /root ]# cd [相对路径或绝对路径]  范例: [root @test /root]# cd ..       回到上一层目录 [root @test /root]# cd ../home     相对路径的写法 [root @test /root]# cd /var/www/html  绝对路径的写法 [root @test /etc]# cd         回到使用者的家目录 [root @test /etc]# cd ~         回到使用者的家目录! [root @test /etc]# cd ~test       回到 test 这个使用者的家目录
  • 32. 显示当前绝对路径pwd /home/neighbor
  • 33. 显示文字文件内容cat可以直接将文字文件的内容显示在屏幕上 有几种方法: (1)显示单个文件 例如:显示单个文件file的内容 cat file (2)在一次显示多个文件时,按顺序处理每个文件 例如:依次显示三个文件file1、file2、file3的内容 cat file1 file2 file3 (3)用户可以将cat命令的执行结果改向到终端或某个文件中去 例如:将三个文件file1、file2、file3的内容依次串接起来,存放到文件file中 cat file1 file2 file3 > file
  • 34. 例如:从键盘(标准输入)上输入(读入)数据并送到新文件file8中 cat > file8 指令执行后,系统等待操作者从键盘上输入数据,可按下ctrl+d结束输入。
  • 35. [root @test /root ]# cat [-nAv] 参数说明: -n:   显示时,连行号印出萤幕上。 -A:   将 DOS 下的 与断行字符都列出来! -v:使用cat命令来显示控制字符^M [root @test /root]# cat ~/.bashrc         显示 .bashrc 这个文件 # .bashrc # User specific aliases and functions PATH="/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$PATH" alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias ll='ls -l --color=never'
  • 36. [root @test /root]# cat ~/.bashrc -n       显示 .bashrc 並且加上行号      1  # .bashrc      2      3  # User specific aliases and functions      4  PATH="/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$PATH"      6  alias rm='rm -i'      7  alias cp='cp -i'      8  alias mv='mv -i'      9  alias ll='ls -l --color=never'
  • 37. [root @test /root]# cat -A regexp.txt This is a cat, however, I need a dog.^M$ I want to "Happy" and and /Happy/ here.^M$ OK! ^Ieverythins is OK^M$ Now, I will eat my food^M$ are you ^Ifinished your work^M$ what do you 123 goto where^M$ 显示出 DOS 文件的几个特殊符号,以上面文件为例,可发现^M 为断行符号,而每行的 $ 为行尾符号,至于 ^I 則是 按键啦! 
  • 38. 显示更多内容 如果显示的内容大于屏幕范围,可以使用more命令显示指定文件内容。按空格键将显示一屏信息,按回车键将显示一行信息。 more [选择项] [文件名] 选择项: +/pat 在包含pat的前两行开始显示 -d 每次显示满一屏后提示
  • 39. 查看readme的内容 more readme 上下浏览 more只能一页一页往下看。less可以让你回顾前面的内容。 less readme
  • 40. 有时只需看文件的开头部分,用head命令可达到此目的。 head -开头行数 文件名 例如:显示文件/etc/asktime的开头10行 head -10 /etc/asktime
  • 41. 有时只需看文件的末尾部分 tail -末尾的行数 文件名 例如:在屏幕上显示文件format最后的5行 tail -5 format
  • 42. 例题一:假如我想要显示 ~/.bashrc 的第 11 到第 20 行呢? 答: 在第 11 到第 20 行,取前 20 行,再取后十行,所以结果就是: head –n 20 ~/.bashrc | tail –n 10 这样就可以得到第 11 到第 20 行之间的内容了!
  • 43. 目录mkdir 目录名称 mkdir myfiles 例如:在根目录下建立一个dbf子目录 mkdir dbf mkdir /dbf
  • 44. [root @test /root ]# mkdir [-mp] [目录名称] 参数说明: -m :设定文件的权限! -p :帮助你直接将上面的目录递归建立起来! [root @test /root]# cd tmp [root @test /tmp]# mkdir test 建立名称为 test 的目录 [root @test /tmp]# mkdir -p test1/test2/test3/test4 直接建立 test2...等上层目录 [root @test /tmp]# mkdir -m 711 testqq  建立权限为 711 的目录 [root @test /tmp]# ll test* drwxrwxr-x    2 test    test        4096 Feb  6 20:47 test/ drwxrwxr-x    3 test    test        4096 Feb  6 20:48 test1/ drwx--x--x    2 test    test        4096 Feb  6 20:48 testqq/
  • 45. 如果dbf目录为当前目录,建立名为prg的子目录 mkdir /dbf/prg mkdir prg 如果/usr/xian目录是当前目录,创建子目录zdz mkdir zdz 若当前目录是根目录/,建立名为www的子目录 mkdir www
  • 46. 如果当前目录是/dos,要建立/cad/autocad子目录 mkdir /cad/autocad mkdir ../cad/autocad
  • 47. 当一些目录不再使用时,可以将他们删除。需要使用rm命令和rmdir命令结合完成。 rm删除将要删除的子目录中的文件,当这个目录变成一个空目录时,再使用rmdir删除一个空目录。 rmdir 目录名称 删除的目录必须是已经没有文件的空目录 假如目录abc是当前目录的子目录而且是空的 rmdir abc
  • 48. rm [-r] 名称 将目录和目录下的所有文件一并删除。 -i 对每个文件都询问操作者是否删除
  • 49. [root @test /root ]# rmdir [-p] [目录名称] 参数说明: -p :将上层的目录也刪除吧! 范例: [root @test /root]# rmdir test 刪除名称为 test 的目录 [root @test tmp]# ll drwxrwxr-x    3 test    test        4096 Feb  6 20:48 test1/ [root @test tmp]# rmdir test1 rmdir: `test1': Directory not empty [root @test tmp]# rmdir -p test1/test2/test3/test4 [root @test tmp]$ ll
  • 50. 范例: [root @test /root]# cp    .bashrc bashrc      将 .bashrc 拷贝成 bashrc 这个文件 [root @test /root]# cp -r /bin /tmp/bin        这是用来 copy 整个目录的参数 [root @test /root]# cp -s .bashrc bashrc   将 .bashrc 建立一个连结文件,文件名为 bashrc
  • 51. 复制文件cp [-r] 名称 目的地 -r表示将子目录下的文件一起复制 cp –r myfiles /root 将文件a1,a2,a3一起复制到目录abc中 cp a1 a2 a3 abc 移动或改名 将文件从一个目录移动到另一个目录 mv 名称 目的 如果名称与目的地路径一样,作用就是改名 mv /root/myfile /tmp 将myfile文件名改为file1 mv /root/myfile /root/file1
  • 52. 将文件123更名为789 mv 123 789 将目录abc改变为xyz mv abc xyz 将目录abc作为一个子目录,移动到/usr目录中 mv abc /usr
  • 53. [root @test /root ]# mv [-u] [源文件] [目的文件] 参数说明: -u   :为 update 的简写,当源文件比目的文件还新的时后才会动作! 范例: [root @test /root]# cp .bashrc bashrc [root @test /root]# mv bashrc bashrc.old [root @test /root]# mv bashrc bashrc2 /tmp 将bashrc 与 bashrc2 移动到 /tmp 这个目录下!请注意,最后一个才是最终的目标,其他的都是 SOURCE
  • 54. locate 语法: [root @test /root ]# locate [目录名称] 例: [root @test /root]# locate root ……一大堆跟 root 有关字眼的文件都出来了 [root @test /root]# updatedb        立刻更新资料库 (/var/lib/slocate/slocate.db)
  • 55. 到底要建立哪些资料库呢?是否全部都要建立?似乎不需要,这个时候,可以选择需要建立文件资料库的目录!在 /etc/updatedb.conf 这个文件内即可设定
  • 56. [root @test root]# more /etc/updatedb.conf # Linux-Mandrake configuration. # 由何处开始查询资料,当然是由根目录啦!所以填入 / 即可 FROM="/" # 哪些目录不想要建立文件搜寻资料! PRUNEPATHS="/proc,/tmp,/var/tmp,/usr/tmp,/net,/afs,/mnt" # 安全等级 #   0 代表关闭安全检验,速度上面较快速,但较不安全; #   1 启动安全检验,这是系统的预设值; SECURITY="1"
  • 57. # 查询的时候是否要由萤屏输出? VERBOSE="NO" # 资料库所在处!这是预设值! DATABASE="/var/lib/slocate/slocate.db" # 哪些文件系统不建立搜寻?就是光碟啦、非 Linux 的文件格式啦,我们都不要进行搜寻信息的建立! PRUNEFS="nfs,smbfs,ncpfs,proc,devpts,supermount,vfat,iso9660,udf,usbdevfs,devfs"
  • 58. linux用户交流命令wall命令 对全部已登录的用户发送信息。用户可以将要发送的信息写好存入一个文件中,输入: #wall < 文件名 或 #wall thank you
  • 59. write命令向系统中某一个用户发送信息 write 用户帐号 [终端名称] write root pts/0
  • 60. 在一个命令行中可以输入多个命令,用分号将各个目录隔开 ls -l ; cp –i mydata newdata mkdir 1 2 3 rmdir 1 2 3
  • 61. 命令行特征命令行实际上是可以编辑的一个文本缓冲区 bash保存着命令历史表 在一个命令行中还可以置入多个命令,用分号将各个命令隔开 也可以在几个命令行中输入一个命令,用反斜杠将一个命令行持续到下一行
  • 62. $ cp -i \ >mydata \ >newdata
  • 63. shell中的特殊字符通配符 ? * 引号 单引号:由单引号括起来的字符都作为普通字符出现。 双引号:由双引号括起来的字符,除$、’和”这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。 反引号:反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。 注释符 #
  • 64. (本页无文本内容)
  • 65. 1、删除所有文件 rm * 2、列出files?的文件 ls files? 3、列出数字开头的文件 ls [0-9] * 4、切换到自己主目录 cd ~
  • 66. 寻找文件 find / -name httpd.conf 在find后面写上 -name,表明要求系统按照文件名查找,最后写上httpd.conf这个目标文件名即可。稍等一会系统会在计算机屏幕上显示出查找结果列表:etc/httpd/conf/httpd.conf  这就是httpd.conf这个文件在Linux系统中的完整路径。查找成功。 如果输入以上查找命令后系统并没有显示出结果,那么不要以为系统没有执行find/ -name httpd.conf命令,而可能是你的系统中没有安装Apache服务器,这时只要你安装了Apache Web服务器,然后再使用find / -name httpd.conf就能找到这个配置文件了。
  • 67. 某个文件包含有srm这3个字母,那么要找到系统中所有包含有这3个字母的文件 find /etc -name '*srm*'  find /etc –name “srm*” 这个命令表明了Linux系统将在/etc整个目录中查找所有的包含有srm这3个字母的文件,比如 absrmyz, tibc.srm等等符合条件的文件都能显示出来。 find /etc -name 'srm*'  只有像srmyz 这样的文件才被查找出来,象absrmyz或者 absrm这样的文件都不符合要求
  • 68. find / -size 1500c 查找一个大小为1,500 bytes的Linux文件。字符 c 表明这个要查找的文件的大小是以bytes为单位 。 find / -size  +10000000c  标明在根目录中查找出大于10000000字节的文件并显示出来。命令中的“+”是表示要求系统只列出大于指定大小的文件,而使用“-”则表示要求系统列出小于指定大小的文件。
  • 69. find / -amin -10  查找在系统中最后10分钟访问的文件 find / -atime -2 查找在系统中最后48小时访问的文件 find / -empty 查找在系统中为空的文件或者文件夹 find / -group cat  查找在系统中属于cat组的文件 find / -mmin -5  查找在系统中最后5分钟里修改过的文件 find / -mtime -1  查找在系统中最后24小时里修改过的文件 find / -nouser  查找在系统中属于作废用户的文件 find / -user fred  查找在系统中属于fred这个用户的文件
  • 70. 当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解,在话号前需要加转义字符“\”来去除括号的意义。 例: $ find \( –name ’tmp’ –xtype c -user ’root’ \)
  • 71. 以名称和文件属性查找。 - name ’字串’ 查找文件名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。 - lname ’字串’ 查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符*、?、[ ]。 -gid n 查找属于ID号为n的用户组的所有文件。 -uid n 查找属于ID号为n的用户的所有文件。 -group ’字串’ 查找属于用户组名为所给字串的所有的文件。 -user ’字串’ 查找属于用户名为所给字串的所有的文件。 -empty 查找大小为0的目录或文件。 -path ’字串’ 查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。 -perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711,644。 -size n[bckw] 查找指定文件大小的文件,n后面的字符表示单位,缺省为b,代表512字节的块。
  • 72. -type x 查找类型为x的文件,x为下列字符之一: b 块设备文件 c 字符设备文件 d 目录文件 p 命名管道(FIFO) f 普通文件 l 符号链接文件(symbolic links) s socket文件 -xtype x 与-type基本相同,但只查找符号链接文件。
  • 73. exec 命令名称 {} 对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令。{}表示命令的参数即为所找到的文件;命令的末尾必须以“ \;”结束。 ok 命令名称 { } 对符合条件的文件执行所给的Linux 命令,与exec不同的是,它会询问用户是否需要执行该命令。 ls 详细列出所找到的所有文件。 fprintf 文件名 将找到的文件名写入指定文件。 print 在标准输出设备上显示查找出的文件名。 - printf 格式
  • 74. 例1:查找当前目录中所有以main开头的文件,并显示这些文件的内容。 $ find . -name ‘main*’ -exec more {} \; 例2:删除当前目录下所有一周之内没有被访问过的a .out或*.o文件。 $ find . \( -name a.out -o -name ‘*.o’ \) -atime +7 -exec rm {} \; 说明如下: 命令中的“.”表示当前目录,此时find将从当前目录开始,逐个在其子目录中查找满足后面指定条件的文件。\(和\)表示括号(),其中的“\”称为转义符。
  • 75. [root @test /root]# find . -ctime 1                 寻找当前目录下一天内新增的目录或文件 [root @test /root]# find /home/test -newer .bashrc  寻找 /home/test 目录下比 .bashrc 还要新的文件 [root @test /root]# find /dev -type b               寻找 /dev 这个目录下,文件属性为b的文件
  • 76. 例如想在/tmp目录中查找大于100000000字节并且在48小时内修改的某个文件,可以使用-and 来把两个查找选项链接起来组合成一个混合的查找方式。 find /tmp -size +10000000c -and -mtime -2 在/tmp目录中查找属于fred或者george这两个用户的文件 find /tmp -user fred -or -user george 在/tmp目录中查找所有不属于panda的文件 find /tmp  ! -user panda
  • 77. 当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆, shell同时也给出了相应的文件名。 下面就是这些文件描述符及它们通常所对应的文件名:系统中实际上有12个文件描述符,但是正如我们在上表中所看到的, 0、1、2是标准输入、输出和错误。可以任意使用文件描述符3到9。
  • 78. 标准输入/输出和重定向标准输入(stdin),缺省是键盘,也可以是文件或其他命令的输出 标准输出(stdout),缺省是终端,也就是屏幕,也可以是文件 标准错误输出(stderr),缺省是屏幕,也可以是文件
  • 79. 输出重定向 > >> 输入重定向 < << 管道 |
  • 80. wc < /etc/passwd wc << eof >hello >world >are you here? >eof
  • 81. sort name.txt 等同于 sort < name.txt 还可以更进一步地通过重定向为sort命令指定一个输出文件name.out。这样屏幕上将不会出现任何信息(除了错误信息以外): sort name.out wc < /etc/passwd > passwd.txt
  • 82. 重定向操作符command << delimiter是一种非常有用的命令,shell将分界符delimiter之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符, shell就知道输入结束了。这一命令对于自动或远程的例程非常有用。可以任意定义分界符delimiter,最常见的是EOF,还可以在<<后面输入变量。
  • 83. [root@linux8 ~]# cat >> myfile < hello there I am using a $TERM terminal > and my user name is $LOGNAME > bye > mayday [root@linux8 ~]# cat myfile hello there I am using a xterm terminal and my user name is root bye
  • 84. 程序的错误输出也可以重新定向。使用符号2>(或2>>)表示对错误输出设备重定向。 如:ls /usr/tmp 2>err.file 可在萤屏上看到程序的正常输出结果,但又将程序的任何错误信息送到err.file中,以备将来检查用。
  • 85. 合并标准输出和标准错误在合并标准输出和标准错误的时候,切记shell是从左至右分析相应的命令的。下面给出一个例子: $ ls cleanup >cleanup.out 2>&1
  • 86. 还可以使用&>重定向操作符将标准输出和错误输出同时送到同一文件中。 ls /usr/tmp &>output.file
  • 87. ls /usr/bin > /tmp/dir wc –w < /tmp/dir 459 统计/usr/bin目录下的文件(单词)个数
  • 88. 在当前目录中执行文件列表操作,如果没有管道的话,所有文件就会显示出来。当shell看到管道符号以后,就会把所有列出的文件交给管道右边的命令,因此管道的含义正如它的名字所暗示的那样:把信息从一端传送到另外一端。在这个例子中,接下来grep命令在文件列表中搜索quarter1.doc: $ ls | grep quarter1.doc
  • 89. 一次显示一屏目录列表 ls -l | more cd `pwd` shell=/bin cd `echo $shell`
  • 90. tee命令作用可以用字母T来形象地表示。它把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。如果希望在看到输出的同时,也将其存入一个文件,那么这个命令再合适不过了。 一般形式为: tee -a files - a表示追加到文件末尾。 who |tee who.out w |tee -a who.out
  • 91. 别名-alias 输入alias可以看到目前指令别名清单。 命令别名是bash提供的使用户的工作变得轻松的方法。命令别名通常是其它命令的缩写,用来减少键盘输入。 alias [alias_name=‘original_command’] 注意: 1.定义别名时,等号两边不允许有空格存在。若命令中包含空格或其它的特殊字符串则必须使用引号。 2.如果需要定义的别名在每次登录时对于此用户均有效,则需要将其写入用户家目录下的.bashrc文件。
  • 92. 当不使用任何参数来使用alias命令时,显示当前的别名设置。 当需要取消别名时使用unalias命令 unalias alias_name
  • 93. 指令记录 history 会列出指令记录,而且每次记录都会加上号码,可以指定编号执行指令。指定编号时以!加上号码,如: !740
  • 94. 文本处理命令
  • 95. Sort命令语法: sort [选项] 文件 改变缺省设置的选项主要有: - m 若给定文件已排好序,合并文件。 - c 检查给定文件是否已排好序,如果它们没有都排好序,则打印一个出错信息,并以状态值1退出。 - u 对排序后认为相同的行只留其中一行。 - o 输出文件 将排序输出写到输出文件中而不是标准输出,如果输出文件是输入文件之一,sort先将该文件的内容写入一个临时文件,然后再排序和写输出结果。
  • 96. 改变缺省排序规则的选项主要有: - d 按字典顺序排序,比较时仅字母、数字、空格和制表符有意义。 - f 将小写字母与大写字母同等对待。 - I 忽略非打印字符。 - M 作为月份比较:“JAN”<“FEB”<¼ <“DEC”。 - r 按逆序输出排序结果。 +posl - pos2 指定一个或几个字段作为排序关键字,字段位置从posl开始,到pos2为止(包括posl,不包括pos2)。如不指定pos2,则关键字为从posl到行尾。字段和字符的位置从0开始。 - b 在每行中寻找排序关键字时忽略前导的空白(空格和制表符)。 - t separator 指定字符separator作为字段分隔符。
  • 97. $ cat text vegetable soup fresh vegetables fresh fruit lowfat milk $ sort text fresh fruit fresh vegetables lowfat milk vegetable soup
  • 98. 把几个文件文本行合并,并对合并后的文本行进行排序 $ cat veglist fruitlist | sort > clist
  • 99. uniq命令文件经过处理后在它的输出文件中可能会出现重复的行。 可以使用uniq命令将这些重复行从输出文件中删除,只留下每条记录的唯一样本。 语法:uniq [选项] 文件
  • 100. - c 显示输出中,在每行行首加上本行在文件中出现的次数。它可取代- u和- d选项。 - d 只显示重复行。 - u 只显示文件中不重复的各行。 - n 前n个字段与每个字段前的空白一起被忽略。一个字段是一个非空格、非制表符的字符串,彼此由制表符和空格隔开(字段从0开始编号)。 +n 前n个字符被忽略,之前的字符被跳过(字符从0开始编号)。 - f n 与-n相同,这里n是字段数。 - s n 与+n相同,这里n是字符数。
  • 101. 例如: 1. 显示文件example中不重复的行。 uniq -u example 2. 显示文件example中不重复的行,从第2个字段的第2个字符开始做比较。 uniq -u -1 +1 example
  • 102. 文件比较命令
  • 103. Comm命令对两个有序的文件进行比较,可以使用comm命令。 语法:comm [-123 ] file1 file2 说明:该命令是对两个已经排好序的文件进行比较。其中file1和file2是已排序的文件。comm读取这两个文件,然后生成三列输出:仅在file1中出现的行;仅在file2中出现的行;在两个文件中都存在的行。如果文件名用“- ”,则表示从标准输入读取。
  • 104. 选项1、2或3抑制相应的列显示。 例如 comm -12就只显示在两个文件中都存在的行; comm -23只显示在第一个文件中出现而未在第二个文件中出现的行; comm - 123则什么也不显示。
  • 105. 例如:假设要对文件myfile1和myfile2进行比较 $ cat myfile1 main( ) { float a,b, i, j ,z ; a=i=10 ; b=j=5 ; z= i + j ; printf(“z=%d\n”,z) ; }
  • 106. $ cat myfile2 #include main( ) { float i, j ,z ; i=10 ; j=5 ; z= i + j ; printf(“z=%f\n”,z) ; }
  • 107. $ comm -12 myfile1 myfile2 main( ) { z= i + j ; } 就只显示文件myfile1和myfile2中共有的行。
  • 108. Diff命令逐行比较两个文本文件,列出其不同之处。它比comm命令完成更复杂的检查。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。 语法:diff [选项] file1 file2 说明:该命令告诉用户,为了使两个文件file1和file2一致,需要修改它们的哪些行。如果用“- ”表示file1或fiie2,则表示标准输入。如果file1或file2是目录,那么diff将使用该目录中的同名文件进行比较。
  • 109. diff /usr/xu mine 把目录/usr/xu 中名为mine的文件与当前目录中的mine文件进行比较。 通常输出由下述形式的行组成: n1 a n3,n4 n1,n2 d n3 n1,n2 c n3,n4
  • 110. 这些行类似ed命令把filel转换成file2。字母(a、d和c)之前的行号(n1,n2)是针对file1的,其后面的行号(n3,n4)是针对file2的。字母a、d和c分别表示附加、删除和修改操作。 在上述形式的每一行的后面跟随受到影响的若干行,以“<”打头的行属于第一个文件,以“>”打头的行属于第二个文件。 diff能区别块和字符设备文件以及FIFO(管道文件),不会把它们与普通文件进行比较。 如果file1和file2都是目录,则diff会产生很多信息。如果一个目录中只有一个文件,则产生一条信息,指出该目录路径名和其中的文件名。
  • 111. - b 忽略行尾的空格,而字符串中的一个或多个空格符都视为相等。如How are you与How are you被视为相同的字符串。 - c 采用上下文输出格式(提供三行上下文)。 - C n 采用上下文输出格式(提供n行上下文)。 - e 产生一个合法的ed脚本作为输出。 - r 当file1和file2是目录时,递归作用到各文件和目录上。
  • 112. 例如,文件m1.c的内容为(左边行号是有意加上的,以便前后对照): 1 main( ) 2{ 3 printf(“Hello!\n”); 4} 5
  • 113. 文件m2.c的内容为: 1 main() 2 { 3 int n , m ; 4 n=10 ; 5 printf ( “% d \ n ” , m = n * 10); 6 }
  • 114. 输入命令: $ diff m1.c m2.c 屏幕上显示: 3,5c3,6 >3 printf(“Hello!\n”); >4} <5 - - - >3 int n,m; >4 n=10 ; >5 printf ( “ % d \ n ” , m = n * 10); >6 } 表示把文件m1.c的3至5行改成m2.c的3至6行后,两个文件相同。
  • 115. 文件内容查询命令grep、fgrep和egrep命令 这组命令以指定模式搜索文件,并通知用户在什么文件中搜索到与指定的模式匹配的字符串,并打印出所有包含该字符串的文本行,在该文本行的最前面是该行所在的文件名。grep命令一次只能搜索一个指定的模式;egrep命令检索扩展的正则表达式(包括表达式组和可选项);fgrep命令检索固定字符串,它不识别正则表达式,是快速搜索命令。
  • 116. 这组命令在搜索与定位文件中特定的主题方面非常有用。要搜索的模式可以被认为是一些关键词,您可以用它们来搜索文件中包含的这些关键词。编写程序时,可以用它来寻找某一个函数,或是相关的词组。grep命令的搜索功能比fgrep强大,因为grep命令的搜索模式可以是正则表达式,而fgrep却不能。 该组命令中的每一个命令都有一组选项,利用这些选项可以改变其输出方式。例如,可以在搜索到的文本行上加入行号,或者只输出文本行的行号,或者输出所有与搜索模式不匹配的文本行,或只简单地输出已搜索到指定模式的文件名,并且可以指定在查找模式时忽略大小写。 这组命令在指定的输入文件中查找与模式匹配的行。如果没有指定文件,则从标准输入中读取。正常情况下,每个匹配的行被显示到标准输出。如果要查找的文件是多个,则在每一行输出之前加上文件名。
  • 117. 语法: grep [选项] [查找模式] [文件名1,文件名2,……] egrep [选项] [查找模式] [文件名1,文件名2,……] fgrep [选项] [查找模式] [文件名1,文件名2,……]
  • 118. - E 每个模式作为一个扩展的正则表达式对待。 - F 每个模式作为一组固定字符串对待(以新行分隔),而不作为正则表达式。 - b在输出的每一行前显示包含匹配字符串的行在文件中的字节偏移量。 - c 只显示匹配行的数量。 - i 比较时不区分大小写。 - h 在查找多个文件时,指示grep不要将文件名加入到输出之前。 - l 显示首次匹配串所在的文件名并用换行符将其隔开。当在某文件中多次出现匹配串时,不重复显示此文件名。 - n 在输出前加上匹配串所在行的行号(文件首行行号为1)。 - v 只显示不包含匹配串的行。 - x 只显示整行严格匹配的行。 - e expression 指定检索使用的模式。用于防止以“-”开头的模式被解释为命令选项。 - f expfile 从expfile文件中获取要搜索的模式,一个模式占一行。
  • 119. 对该组命令的使用还需注意以下方面: 在命令后键入搜索的模式,再键入要搜索的文件。其中,文件名列表中也可以使用特殊字符,如“*”等,用来生成文件名列表。如果想在搜索的模式中包含有空格的字符串,可以用单引号把要搜索的模式括起来,用来表明搜索的模式是由包含空格的字符串组成。否则,Shell将把空格认为是命令行参数的定界符,而grep命令将把搜索模式中的单词解释为文件名列表中的一部分。
  • 120. 特殊字符“*”用来生成一个文件名列表,该列表包含当前目录下所有的文件。该命令将搜索出当前目录下所有文件中与模式匹配的行。 $ grep data *
  • 121. 用户可以在命令行上键入搜索模式,也可以使用-f选项从指定文件中读取要搜索的模式。在文件中,每个搜索模式占一行。 $ cat mypats Editor Create $ grep -f mypats exam
  • 122. ytalk 功能说明:与其它用户交谈。 语法:ytalk [-isxY][-h<主机名称IP地址>][用户名称...] 补充说明:通过ytalk指令,你可以和其它用户线上交谈,如果想和其它主机的用户交谈,在用户名称后加上其主机名称或IP地址即可。
  • 123. -h<主机名称IP地址> 指定交谈对象所在的远端主机。 -i 用提醒声响代替显示信息。 -s 在指令提示符号先开启ytalk交谈窗。 -x 关闭图形界面。 -Y 所有必须回应yes或no的问题,都必须用大写英文字母"Y"或"N"回答。
  • 124. tty(teletypewriter) 功能说明:显示终端机连接标准输入设备的文件名称。 语法:tty [-s][--help][--version] 补充说明:在Linux操作系统中,所有外围设备都有其名称与代号,这些名称代号以特殊文件的类型存放于/dev目录下。你可以执行tty指令查询目前使用的终端机的文件名称。 参数: -s或--silent或--quiet 不显示任何信息,只回传状态代码。 --help 在线帮助。 --version 显示版本信息。
  • 125. traceroute 功能说明:显示数据包到主机间的路径。 语法:traceroute [-dFlnrvx][-f<存活数值>][-g<网关>...][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小] 补充说明:traceroute指令让你追踪网络数据包的路由途径,默认数据包大小是40Bytes,用户可另行设置。
  • 126. 参数: -d 使用Socket层级的排错功能。 -f<存活数值> 设置第一个检测数据包的存活数值TTL的大小。 -F 设置勿离断位。 -g<网关> 设置来源路由网关,最多可设置8个。 -i<网络界面> 使用指定的网络界面送出数据包。 -I 使用ICMP回应取代UDP资料信息。 -m<存活数值> 设置检测数据包的最大存活数值TTL的大小。 -n 直接使用IP地址而非主机名称。 -p<通信端口> 设置UDP传输协议的通信端口。 -r 忽略普通的Routing Table,直接将数据包送到远端主机上。 -s<来源地址> 设置本地主机送出数据包的IP地址。 -t<服务类型> 设置检测数据包的TOS数值。 -v 详细显示指令的执行过程。 -w<超时秒数> 设置等待远端主机回报的时间。 -x 开启或关闭数据包的正确性检验。
  • 127. telnet 功能说明:远端登入。 语法:telnet [-8acdEfFKLrx][-b<主机别名>][-e<脱离字符>][-k<域名>][-l<用户名称>][-n<记录文件>][-S<服务类型>][-X<认证形态>][主机名称或IP地址<通信端口>]
  • 128. 参数: -8 允许使用8位字符资料,包括输入与输出。 -a 尝试自动登入远端系统。 -b<主机别名> 使用别名指定远端主机名称。 -c 不读取用户专属目录里的.telnetrc文件。 -d 启动排错模式。 -e<脱离字符> 设置脱离字符。 -E 滤除脱离字符。 -f 此参数的效果和指定"-F"参数相同。 -F 使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。
  • 129. sync命令sync命令是在关闭Linux系统时使用的。 用户需要注意的是,不能用简单的关闭电源的方法关闭系统,因为Linux象其它Unix系统一样,在内存中缓存了许多数据,在关闭系统时需要进行内存数据与硬盘数据的同步校验,保证硬盘数据在关闭系统时是最新的,只有这样才能确保数据不会丢失。 一般正常的关闭系统的过程是自动进行这些工作的,在系统运行过程中也会定时做这些工作,不需要用户干预。
  • 130. sync命令是强制把内存中的数据写回硬盘,以免数据的丢失。用户可以在需要的时候使用此命令。该命令的一般格式为: sync
  • 131. echo命令echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。该命令的一般格式为: echo [ -n ] 字符串 其中选项n表示输出文字后不换行;字符串可以加引号,也可以不加引号。 用echo命令输出加引号的字符串时,将字符串原样输出;用echo命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符串之间用一个空格分割。
  • 132. cal命令cal命令的功能是显示某年某月的日历。该命令的一般格式为: cal [选项] [月 [年]] 命令中各选项的含义为: - j 显示出给定月中的每一天是一年中的第几天(从1月1日算起)。 - y 显示出整年的日历。 
  • 133. 例1 显示1999年11月的日历。 $ cal 11 1999 例2 显示1999年11月的每一天是一年中的第几天。 $ cal – j 11 1999
  • 134. date命令date命令的功能是显示和设置系统日期和时间。该命令的一般格式为: date [选项] 显示时间格式(以+开头,后面接格式) date 设置时间格式 命令中各选项的含义分别为: -d datestr, --date datestr 显示由datestr描述的日期 -s datestr, --set datestr 设置datestr 描述的日期 -u, --universal 显示或设置通用时间 
  • 135. 时间域 % H 小时(00..23) % I 小时(01..12) % k 小时(0..23) % l 小时(1..12) % M 分(00..59) % p 显示出AM或PM % r 时间(hh:mm:ss AM或PM),12小时 % s 从1970年1月1日00:00:00到目前经历的秒数 % S 秒(00..59) % T 时间(24小时制)(hh:mm:ss) % X 显示时间的格式(%H:%M:%S) % Z 时区
  • 136. 日期域 % a 星期几的简称( Sun..Sat) % A 星期几的全称( Sunday..Saturday) % b 月的简称(Jan..Dec) % B 月的全称(January..December) % c 日期和时间( Mon Nov 8 14:12:46 CST 1999) % d 一个月的第几天(01..31) % D 日期(mm/dd/yy) % h 和%b选项相同 % j 一年的第几天(001..366) % m 月(01..12)
  • 137. % w 一个星期的第几天(0代表星期天) % W 一年的第几个星期(00..53,星期一为第一天) % x 显示日期的格式(mm/dd/yy) % y 年的最后两个数字( 1999则是99) % Y 年(例如:1970,1996等)  需要特别说明的是,只有超级用户才能用date命令设置时间,一般用户只能用date命令显示时间。
  • 138. 例1:用指定的格式显示时间。 $ date ‘+This date now is =>%x ,time is now =>%X ,thank you !’ 例2:用预定的格式显示当前的时间。 # date 例3:设置时间为下午14点36分。 # date -s 14:36:00 例4:设置时间为1999年11月28日。 # date -s 991128
  • 139. 文件与目录操作文件与文件名 在多数操作系统中都有文件的概念。 文件是Linux用来存储信息的基本结构,它是被命名(称为文件名)的存储在某种介质(如磁盘、光盘和磁带等)上的一组信息的集合。Linux文件均为无结构的字符流形式。 文件名是文件的标识,它由字母、数字、下划线和圆点组成的字符串来构成。用户应该选择有意义的文件名。 Linux要求文件名的长度限制在255个字符以内。
  • 140. 为了便于管理和识别,用户可以把扩展名作为文件名的一部分。圆点用于区分文件名和扩展名。 扩展名对于将文件分类是十分有用的。 用户可能对某些大众已接纳的标准扩展名比较熟悉,例如,C语言编写的源代码文件总是具有C的扩展名。 用户可以根据自己的需要,随意加入自己的文件扩展名。
  • 141. 文件的类型 Linux系统中有三种基本的文件类型:普通文件、目录文件和设备文件。
  • 142. 普通文件 普通文件是用户最经常面对的文件。它又分为文本文件和二进制文件。 1)文本文件:这类文件以文本的ASCII码形式存储在计算机中。它是以"行"为基本结构的一种信息组织和存储方式。 2)二进制文件:这类文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们,只有通过相应的软件才能将其显示出来。二进制文件一般是可执行程序、图形、图像、声音等等。
  • 143. 目录文件 设计目录文件的主要目的是用于管理和组织系统中的大量文件。它存储一组相关文件的位置、大小等与文件有关的信息。目录文件往往简称为目录。
  • 144. 设备文件 设备文件是Linux系统很重要的一个特色。Linux系统把每一个I/O设备都看成一个文件,与普通文件一样处理,这样可以使文件与设备的操作尽可能统一。 从用户的角度来看,对I/O设备的使用和一般文件的使用一样,不必了解I/O设备的细节。 设备文件可以细分为块设备文件和字符设备文件。前者的存取是以一个个字符块为单位的,后者则是以单个字符为单位的。
  • 145. 树型目录结构
  • 146. 工作目录与用户主目录从逻辑上讲,用户在登录到Linux系统中之后,每时每刻都“处在”某个目录之中,此目录被称作工作目录或当前目录(Working Directory)。工作目录是可以随时改变的。用户初始登录到系统中时,其主目录(Home Directory)就成为其工作目录。工作目录用“.”表示,其父目录用“..”表示。 用户主目录是系统管理员增加用户时建立起来的(以后也可以改变),每个用户都有自己的主目录,不同用户的主目录一般互不相同。 用户刚登录到系统中时,其工作目录便是该用户主目录,通常与用户的登录名相同。 用户可以通过一个"~"字符来引用自己的主目录。
  • 147. 路径路径是指从树型目录中的某个目录层次到某个文件的一条道路。此路径的主要构成是目录名称,中间用“/”分开。任一文件在文件系统中的位置都是由相应的路径决定的。 用户在对文件进行访问时,要给出文件所在的路径。 路径又分相对路径和绝对路径。 绝对路径是指从“根”开始的路径,也称为完全路径;相对路径是从用户工作目录开始的路径。 应该注意到,在树型目录结构中到某一确定文件的绝对路径和相对路径均只有一条。绝对路径是确定不变的,而相对路径则随着用户工作目录的变化而不断变化。这一点对于我们以后使用某些命令如cp和tar等大有好处。 用户要访问一个文件时,可以通过路径名来引用。并且可以根据要访问的文件与用户工作目录的相对位置来引用它,而不需要列出这个文件的完整的路径名。
  • 148. Linux帮助的使用Linux系统有一套完整的帮助系统,用户几乎可以从中得到想要的任何帮助 获取帮助的命令有 man info
  • 149. [root@tsai root]# man 5 passwd [root@tsai root]# man passwd  第二个显示的其实是 /usr/bin/passwd 这个执行文件的使用方法介绍,但是第一个加上参数 5 的时候,就自动的变成去查询 /etc/passwd 这个文件的设定功能了! 记得:『在 Linux 当中,使用 man 的时候,参数设定文件的查询都是以 5 来设定的!』怎么会是 5 呢?如何设定的,那就需要来查看一下 man 的搜寻路径 (MANPATH) 了!
  • 150. 那么 MANPATH 在哪里设定的呢?是 /etc/man.config 这个文件!在该文件中,当我们执行 man 的时候,系統就会一个一个的去查询 PATH ,预设的 MANPATH 在哪里呀!?就是在:   /usr/share/man /usr/local/man
  • 151. 如果安裝了一个新的套件,是以 Tarball 安裝在 /usr/local/newpackes 底下,而且我知道该套件的 man pages 放在 /usr/local/newpackes 底下,那么如何让该目录可以被 MANPATH 查询到呢?将该目录写入 /etc/man.config 里就可以啦!
  • 152. man空白键:  往下翻一页; page up:  往上翻一页; page down: 往下翻一页; home:  回到最前面; end:  去到最终页; /word:  搜寻 word 这个字符串。 ?word:  搜寻 word 这个字符串。
  • 153. 这些 man page 放在哪里呢?不同的 distribution 通常可能有点差异性,通常是放在 /usr/share/man 里头,可以修改man page 搜寻路径来改善这个目录的问题! 修改 /etc/man.config ( 有的版本为 man.conf ) 即可!至于更多的关于 man 的讯息您可以使用『 man man 』来查询
  • 154. infoinfo 的功能比 man 还要更强大!在这个 info page 里面,你可以输入 p 及 n 往前及往后翻页,如果看到『 * text :』的项目时,将游标移到该項目上面,按下『Enter』还可以进入次页面的说明画面中!这个 info 目前只有 Linux 底下有,其他 Unix-Like 就没有啦! /usr/share/doc
  • 155. 链接与符号链接分为硬链接(hard link)和符号链接(symbolic link)。 硬链接:相当于创建文件的副本,在源文件修改时,同时修改,但文件拥有者是原来的文件拥有者,权限也和原来的一样。如果源文件被删除了,链接文件一样使用。 符号链接:文件拥有者和使用权限是链接文件的创建者,如果源文件被删除了,符号链接就会出错,不能够读取源文件的内容。
  • 156. 链接与符号链接建立链接 ln 源文件 链接文件 ln /home/ma/file1 link1
  • 157. 链接与符号链接建立符号链接 ln -s 源文件 链接文件 链接目录 ln -s -d 源目录 链接文件
  • 158. 链接与符号链接选 项说 明-b或- -backup删除文件前备份文件-d或-F或- -directory指定源目录,用在链接目录时-f或- -force强制建立链接- -help显示说明-i或- -interactive删除文件前先询问-s或- -symbolic建立符号链接-v或- -verbose长格式- -version显示版本信息