3.1 shell基本功能与基本概念
shell是用户程序和内核或操作系统之间的接口程序 。
shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。
shell一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。
3.1.3 文件命名及文件类型
1. 文件与文件名 文件是被命名(称为文件名)的存储在某种介质(如磁盘、光盘和磁带等)上的一组信息的集合。UNIX/Linux的文件均为无结构的字符流形式。 文件名是文件的一种标识,一般情况下,它由字母、数字、下划线和圆点组成的字符串来构成。 Linux支持长文件名,但要求文件名的长度限制在255个字符以内。
2.文件类型 UNIX/Linux系统中有三种基本的文件类型: 普通文件 目录文件 设备文件
常见设备文件类型
块设备文件(b):以块方式存取的设备;
字符设备文件(c):以字符方式存取的设备;
管道设备文件(p):用于进程间通信的FIFO“临时文件”。 无名管道:主要用于有直接继承关系的父子进程之间的通信。当创建无名管道的进程结束后,无名管道自动消失; 命名管道:命令管道是一种特殊的设备文件,在文件系统里以名字形式存在。当通信结束后若不主动删除它,它不会自动消失,而仍以文件的形式存在在文件系统中。
套接字文件(s):套接字分为文件套接字和网络套接字。文件套接字存在于文件系统中,让用户以文件的方式访问网络连接。
硬链接和符号链接
符号链接(l):用于通过此文件的内容指向它所链接的文件或资源。可跨越文件系统或一个不存在的地方。
硬链接(-):两个或多个文件名共用一个文件体,也就是说一个文件可以具有多个不同的名字,但具有相同的i节点号。硬链接不可跨越文件系统。
Unix/Linux系统大致目录结构及其作用
/:系统的根目录;
/dev:系统的设备目录,其中存放着几乎所有的设备文件。
/etc:存放Linux系统和大部分应用软件的配置文件;
/home:用户家目录所在的目录。
/root:root用户的家目录。
/lost+found:丢失文件的存放目录。当系统因非法关机等原因造成的文件系统损坏时,经修复后一些丢失的文件存放在这里;
/mnt:传统的外部设备的挂装点,用于挂载设备文件。
/boot:启动软件存放目录。系统内核文件,引导器Grub等存放在这里;
/proc:伪文件系统目录;
/usr:用户级目录;
/tmp,/usr/tmp:临时目录;
/sbin,/usr/sbin:系统级的命令与工具目录;
/bin,/usr/bin:用户级的命令与工具目录;
/usr/include:C语言,内核编译所需要的头文件存放目录;
/lib,/usr/lib:库文件存放目录,其中有表态库和动态库;
/usr/src:Linux源代码目录,编译内核时使用;
/var:通常用来存放一些经常变化的内容,比如各种网络服务的工作目录都在这里;
/var/log:系统日志目录;
/usr/share:存放共享使用的,比如各种共享或在线帮助等。
3.1.6 环境变量与变量
环境变量 shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,用户还可以重新定义这些变量。
环境变量可用命令env或set来查询。(DOS环境为set)
环境变量查询与显示
# env # 显示全部环境变量
# env | grep PATH #显示环境变量PATH
# echo $PATH #显示环境变量PATH
I/O重定向
I/O重定向(也称作改道)是指通过文件的形式实现I/O输入和输出。I/O重定向可以通过以下符号实现: <:输入重定向。 >:以覆盖方式实现输出重定向。 >>:以追加方式实现输出的重定向。 &>或>&:标准输出和标准错误同时重定向。
示例
1)输入重定向 # wc /etc/passwd #统计文件/etc/passwd的行、词和字符信息。或 # wc < /etc/passwd #标准输入重定向
2)标准输出重定向 # ls > /tmp/dir.out #覆盖方式。将当前目录信息重定向到/tmp/dir.out # ls /usr >> /tmp/dir.out #追加方式,将/usr信息追加到/tmp/dir.out
3)标准错误的重定向 #ls -l /home/w-w-w 2> /tmp/err.out #将标准错误重定向到/tmp/err.out #cat /home/w-w-w 2>> /tmp/err.out #将标准错误追加到/tmp/err.out
管道
管道机制是在两个或多个进程之间建立一种连接,使得前一个命令的输出作为后一个命令的输入。 管道机制常用于进程间的通信。 实现管道机制的符号是“|”,其方法为: 命令1 | 命令2 | … | 命令n 有时候需要对某文件处理既要在屏幕上看到输出同时又要保存一个副本。这时使用管道与tee命令配合来实现。
实例
#统计目录/dev内有多少文件或子目录 # ls -l /dev | wc -l
#统计sample.txt内有多少行包含High # cat sample.txt | grep "High"|wc -l
3.3.1 目录基本操作命令
列目录内容(ls) 目录创建(mkdir) 目录删除(rmdir/rm) 目录切换(cd) 显示当前工作目录(pwd) 目录更名(mv)
vi的三种工作模式
命令模式:当进入vi时,它处在命令模式。在这种模式下,用户可通过vi的命令对文件的内容进行处理,比如删除、移动、复制等;也可通过命令进入编辑模式。
编辑模式:用户可在命令模式下通过i,I,a,A,o,O等命令使vi进入编辑模式。在编辑模式下,用户能在光标处输入内容,或通过光标键移动光标。也可通过按ESC键返回命令模式。
命令项模式或叫底行模式:也是命令模式的一种,在命令模式下用户输入冒号后光标会跳到底行,输入相关命令后可完成指定操作。
3.2.4 进程管理基本命令
1. 进程树及进程状态查询(pstree)
示例: # pstree #显示系统进程树
# pstree -p | grep vsftpd #查询进程vsftpd的信息
# pstree user #显示指定用户(user)的进程
2. 终止进程执行(kill)
(1)列可用信号 # kill -l #列出所有信号
(2)终止已知PID的进程 # kill -9 3231 #发送信号9(KILL)终止pid为3231的进程
(3)按名称终止进程(#终止名为named的进程)
# pstree –p | grep named #查询进程信息
|-named(1656) #命令输出,由此可见named的PID为1656 # #可使用以下命令中的任一个终止PID=1656的进程named
# kill -9 1656 #向pid=1656的进程发信号9,终止它
# kill -KILL 1656 #同上
# kill -SIGKILL 1656 #同上