临近考试,刚好把linux学习的内容全部过一遍,就当作复习资料了。

第1讲 Linux操作系统简介

1、Linux定义

  • Linux是一种开放源代码和自由传播的计算机操作系统。Linux内核由林纳斯•托瓦兹(Linus Torvalds)在1991年10月5日首次发布。
  • Linux的本质就是一个类Unix操作系统,或者说它是一个类似于Unix的操作系统

2、Linux创始人

  • 1991年芬兰赫尔辛基大学的学生Linus Torvalds在自己的Intel 386个人计算机上开发了属于自己的第一个程序,并利用Internet发布了他开发的源代码,将其命名为Linux,从而创建了Linux操作系统。

3、GNU项目发起人,自由软件含义,GNU项目的目的

  1. 始于1983年9月27日
  2. Richard M. Stallman发起
  3. 目的是开发一个完整的、自由的UNIX like系统
  4. GNU是“GNU‘s Not Unix”的递归缩写,它的发音为“guh-noo”(革奴)

Richard M. Stallman开发了许多Linux重要基础应用,如GCC(GNU C Compiler,C语言编译器)、Emacs编辑器等

  1. 自由软件的含义: 用户有运行、拷贝、研究、改进软件的自由。
    自由软件是指用户拥有以下层次自由的软件:
    ① 研究程序运行机制,源代码公开并根据用户自己的需要修改它的自由;
    ② 重新分发拷贝,以使其他人能够共享软件的自由;
    ③ 改进程序,为使他人受益而散发它的自由;

4、(重点)LINUX系统组成:kernel,shell,file system以及user application,每个部分具体功能是什么。

  1. POSIX标准:
  • POSIX(Portable Operating System Interface,可移植操作系统接口),该标准定义了操作系统应该为应用程序提供的接口标准,是IEEE(美国电气和电子工程师协会)为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称。

  • 一个遵循POSIX标准的操作系统编写的程序,可在其它任何遵循POSIX标准的操作系统上运行。

  1. LINUX系统主要有4部分构成,即kernel,shell,file system以及user application。其中kernel,shell,file system构成了基本的操作系统结构,它使得我们可以运行程序,管理文件并使用系统。
  • 内核(Kernel)
    它是LINUX操作系统的核心, “内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。
  • Shell
    shell是一个系统的用户界面,它是用户和内核进行交互的接口,它是一个解释器,解释用户输入的命令并将其送入内核运行。
  • 文件系统( file system )
    文件系统是文件存放在磁盘等存储设备上的组织方法,Linux采用的是树形目录结构,以“/”为根目录,按照目录分层方式进行组织,但Linux同时也支持目前大多数主流目录系统,例如fat32,vfat,ext2,ext3,ext4,ISO9660等。

5、Linux版本分类,内核版本号各个部分的含义

  1. 内核(Kernel)版本
    Linux内核版本由3个数字组成:r.x.y
  • r:目前发布的Kernel主版本。
  • x:偶数是稳定版本,奇数是开发中的版本。
  • y:错误修补次数。
  1. 发行(Distribution)版本
    有时用命令查看内核版本号形式如下
    2.6.18-128.el5-x86_64

第一组数字2,指主版本号;第二组数字6,指次版本号;第三组数字18,指修订版本号;第四组数字128,表示这个当前版本的微调补丁(patch);
el5:表示版本特殊描述标识信息,由内核在编译时指定,不同的发行版有所不同,具有较大的随机性。在Red Hat Linux中用来表示企业版Linux(Enterprise Linux)
x86_64指CPU的字长。CPU按字长主要分为32位与64位,其中32位又可以分为:i386、i586、i686、而64的CPU则称为x86_64

6、常见的Linux发行版本有哪些

发行版本是一些组织或厂家将Linux系统内核与应用软件和文档封装起来,并提供一些安装界面和系统设定管理工具的一个软件包的集合。
目前有几百种Linux发行版本,一般可分为企业版本,企业支持的社区版本以及完全社区驱动版本三种
oa6Zx1.png

  • 可使用” uname -r”命令查看内核版本号
  • 可使用” cat /etc/issue”命令查看发行版版本号

7、PPT最后思考题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
以下哪种说法是不正确的?
A.Linux是免费与开源的操作系统
B.Linux的版本分为发行版和开源版
C.Linux是源于Minix的开源操作系统
D.Linux严格区分大小写
正确答案: B
解析:Linux版本分为发行版和内核版
---
以下哪个是Redhat系列的Linux?
A.Centos
B.Debian C.Ubuntu D.AIX
正确答案: A
解析:Redhat系列,包括RHEL(Redhat Enterprise Linux,也就是所谓的Redhat Advance Server,收费版本)、Fedora Core(由原来的Redhat桌面版本发展而来,免费版本)、CentOS(RHEL的社区克隆版本,免费)。
---
下列哪个选项不是Linux支持的?
A.多用户
B.超进程
C.可移植
D.多进程
正确答案: B
解析:Linux是真正的多用户操作系统,支持多个用户同时使用同一台Linux主机。因此A正确。Linux还允许每个用户执行多项任务,因此就CPU而言,就需要对多个进程进行管理,控制多进程之间的状态转换、执行顺序及优先级等,因此D
也正确。由于Linux支持POSIX协议,程序可在多平台上移植,因此C也正确。
---
Linux是所谓的Free Software,其中Free的含义是什么?
A.Linux不需要付费
B.Linux发行商不能向用户收费
C.Linux可自由修改和发布
D.只有Linux作者才能向用户收费
正确答案: C
解析:Free Software中的Free,本质并非免费,而是“自由”。Linux按照GPL协议发行,允许用
户自由下载、分发、修改和再次发布源代码,并可在分发软件的过程中收取适当的成本和服务费
用,但不允许任何人将该软件据为己有,因此选
C
---
以下关于Linux内核版本的说法,哪个是错误的?
A.Linux内核版本格式为“主版本号.次版本号.修正版本号”
B.1.2.2表示稳定的发行版
C.2.2.6表示对内核2.2的第6次修正
D.1.3.2表示稳定的发行版
正确答案: D
解析:1.3.2中的次版本号为奇数,表示开发中版本,并非稳定的发行版
---
以下关于Shell的说法,哪个是错误的?
A.Linux的组成部分
B.用户与Linux内核之间的接口
C.一种和C类似的高级程序设计语言
D.一个命令语言解释器
正确答案: C
解析:Linux由内核、Shell、文件系统和用户应用4部分组成,因此A正确;
Shell是一种交互式的命令解释程序,用户输入的每个Shell命令均由Shell解释,是用户与Linux
内核之间的接口,因此B,D也正确。
C错误的原因在于Shell处理的对象只能是文件、
字符串或命令语句,不具有丰富的数据类型和数据结构,不是通用程序设计语言

第2讲 Linux安装

1、硬盘种类

目前常用的硬盘主要有三大类:IDE接口硬盘、SCSI接口硬盘和SATA
接口硬盘

  • IDE( Integrated Drive Electronics,电子集成驱动器)接口硬盘:采用并行传输技术,价格低廉,IDE接口的硬盘读/写速度比较慢,线缆长度过短、连接设备少
  • SCSI( Small Computer System Interface,小型计算机系统接口)接口硬盘:用50针接口,外观和普通硬盘接口有些相似。用在服务器上面比较多,速度快,稳定性很好,比较适合做磁盘阵列
  • SATA(Serial Advanced Technology Attachment,串行高级技术附件)接口硬盘:采用串行传输技术,具有传输速度快,安装方便、容易散热、支持热插拔等诸多
    优点,是PC机硬盘的趋势
  • 存储技术
    SSD(Solid State Disk,固态硬盘):无需驱动马达转动碟片,采用闪存进行直接读写的设备,读写速度快,其接口也使用SATA或SCSI

2、Linux硬件设备文件名写法及含义

oafuqI.png

3、(重点)磁盘分区类型

为了增加数据安全性和提高系统性能,将一块硬盘划分为多个分区,分区之间相互独立。
分区有三种类型:主分区(primary-partition)、扩展分区(extended-partition)和逻辑分区(logical-partition)。

  1. 主分区
  • 主分区中不能再划分其他类型的分区,因此每个主分区都相当于一个逻辑磁盘。
  • 一个硬盘上最多只能有四个主分区(由于分区表只有64bytes, 而每个分区参数需要占据16bytes,因此硬盘默认的分区表仅能写入4组分区信息)
  • 主分区编号为1-4
  • 主分区可以被格式化,并作为安装操作系统的分区,也可以作为数据访问的分
  1. 扩展分区
  • 扩展分区目的是使用额外的扇区来记录分区信息
  • 扩展分区最多只能有1个。扩展分区严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表。这样在主引导扇区中除了主分区外,仅需要存储一个被称为扩展分区的分区数据,通过这个扩展分区的数据可以找到下一个分区的起始位置,以此起始位置类推可以找到所有的分区
  • 主分区和扩展分区最多可以有4个
  • 扩展分区无法格式化,无法写入数据,只能包含逻辑分区
  1. 逻辑分区
  • 逻辑分区是由扩展分区持续切割出来的分区。
  • 逻辑分区的数量依操作系统而不同。在Linux系统中,IDE硬盘最多59个逻辑分区;SATA硬盘有11个逻辑分区
  • 逻辑分区从5开始编号
  • 逻辑分区可以被格式化,并作为数据访问的分区

4、磁盘分区设备名

Linux使用设备文件名后加数字的方法来标识硬盘分区,其中最后的数字表示分区的次序,如数字1~4表示主分区或扩展分区,逻辑分区从5开始。如果没有对磁盘分区,则一律不加数字,表示整块磁盘。
例如:
sda1 表示系统检测到的第一个SATA设备上的第1个主分区
hda6 表示IDE1的master设备上的第2个逻辑分区

5、掌握磁盘分区时必须存在的两个分区分别是什么

根分区和交换分区
oa408U.png

6、分区、格式化的作用

  1. 分区
    为了增加数据安全性和提高系统性能,将一块硬盘划分为多个分区,分区之间相互独立。
  2. 格式化
    格式化又称逻辑格式化,它是指根据用户选定的文件系统(NTFS,EXT3,EXT4等),在磁盘的特定区域写入特定数据,在分区中划出一片用于存放文件分配表,目录表等用于文件管理的磁盘空间.

7、(重点)Linux开机流程

  1. CMOS:
    Complementary Metal Oxide Semiconductor(互补金属氧化物半导体)的缩写,是电脑主板上的一块可读写的RAM(随机存取存储器)芯片,用来保存BIOS设置的主机硬件参数数据。
  2. BIOS:
    Basic Input Output System(基本输入输出系统)的缩写,保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。它是开机时计算机系统主动执行的第一个程序。BIOS设置程序也是储存在主板上的存储芯片中的。

(注意)BIOS中的系统设置程序是完成CMOS参数设置的手段,而CMOS是存放设置好的
数据的场所

  1. MBR :
    主引导记录(MBR,Master Boot Record)是采用MBR分区表的硬盘的第一个扇区,即C/H/S地址的0柱面0磁头1扇区,也叫做MBR扇区。
  2. GRUB :
    GNU GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。
    oaIq9f.png

8、Linux常见文件系统类型有哪些,Ubuntu默认文件系统类型是什么

linux:ext2、ext3、ext4、reiserfs
ubuntu: ext4

9、Linux文件系统结构中部分重要目录用途,主要记住:/,/dev,/bin、/etc目录

文件系统

  1. /
    根文件系统,目录路径的起始点
  2. /bin
    这个目录是对UNIX系统习惯的沿袭,存放着root和一般用户最经常使用
    的命令。例如:cp,ls,cat等
  3. /dev
    任何设备与接口设备都以文件的形式存在于这个目录中。例如/dev/hda。
  4. /etc
    存放所有系统管理需要的特定配置文件和子目录
  5. /home
    用户的主目录。如:用户帐号wang的默认主目录为/home/wang
  6. /root
    系统管理员用户主目录
  7. /lib
    存放系统最基本的函数库,其作用类似于windows里的.dll文件。几乎
    所有的应用程序都需要用到这些函数库

10、root和普通用户shell命令提示符各自是什么

命令提示符

  • testuser为当前用户账号
  • ubuntu显示的是主机名称
  • ~:表示当前用户的主文件夹,一般
  • 为/home/用户账号,对于本例为
  • /home/testuser
  • 提示符:$对应一般用户
  • #对应root用户

11、root和普通用户账号切换方式,及su和su -区别

  • su和su –命令不同之处在于,su -切换到对应的用户时会将当前的工作目录自动转换到切换后的用户的主目录,同时环境变量也做相应的切换。
  • 对于上例, 使用su – 命令后,自动切换到root用户的主目录;而使用su命令仍在原testuser用户的主目录home/testuse
  • 如果su命令后没有携带用户名,系统默认从当用户切换到超级用户,并提示用户输入超级用户口令。
  • su 和 su –命令后面可加用户账号,表示希望切换到指定的用户账号

12、Tab键的功能

  • 补全功能:可以用来补全命令名或文件名
  • 列表功能:两次点击Tab键,将会把所有可选指令或文件的名称列举出来,避免用户输入错误。

13、在线帮助命令man(只需要知道该命令功能是什么即可)

Unix Like系统中提供的操作说明手册,其说明文件存储在/usr/share/man

  • man page 显示的命令后的数字有特别含义
    man
  • 利用man –f 命令,可以查看关于指定命令更多相关信息。
  • 利用man –k命令,可以查找指定关键字相关的内容

14、PPT最后思考题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
以下哪个不是常用分区类型?
A.主分区
B.扩展分区
C.根分区
D.逻辑分区
正确答案: C
---
Linux 安装时至少划分哪两个分区才能正常安装使用?
A./分区和swap分区
B./分区和/home分区
C./boot分区和swap分区
D./home分区和swap分区
正确答案: A
解析:安装Linux至少需要两个分区,
根分区和交换分区。
交换分区:用于实现虚拟内存
根分区:用于存放包含系统程序和
用户数据在内的所有数据
---
/dev/hda5在Linux中表示什么?
A.IDE1(主)接口上从盘
B.IDE1接口上主盘的逻辑分区
C.IDE1接口上主盘的第5个分区
D.IDE1接口上从盘的扩展分区
正确答案: B
解析:A.IDE1接口上从盘对应的设
备文件名为/dev/hdb; D. IDE1接口上
从盘的扩展分区对应为/dev/hdb4;
C. IDE1接口上主盘的第5个分区,说
法也不正确,hda5表示的是第一个
逻辑分区,并不代表是第5个分区。
---
多重引导装载程序GRUB默认安装在什么地方?
A.主引导记录MBR
B.引导分区的第一个扇区
C./boot目录
D.内核
正确答案: A
解析:默认是将GRUB安装在硬盘的
MBR中,也可以将其修改为安装在
引导分区的第一个扇区。内核一般
安装在/boot目录
---
root密码必须符合什么要求?
A.至少4字符,大小写敏感
B.至少6字符,大小写敏感
C.至少4字符,大小写不敏感
D.至少6字符,大小写不敏感
正确答案: B
解析:Linux中大小写敏感,且规定
密码至少包含6个字符。合格的根
密码应该采取字母、数字和符号混
合的方式,且尽可能的保持一定的
长度
---
系统启动过程一般包含如下几步: (1) 启动引导装载程序;(2)用户登
录;(3)启动Linux;(4)BIOS自检。以下哪个顺序是正确的?
A.4231
B.4132
C.2431
D.1432
正确答案: B

第3讲 文件与目录管理

1、(重点)文件的6大类型是哪些,每种表示方法

  1. 普通文件
    普通文件是用户最常用的文件,通常可分为纯文本文件ASCII、二进制文件binary和数据格式文件data。
    纯文本文件可以使用cat、more、less等命令查看其内容;
    二进制文件通常是系统仅能识别且能执行的文件;数据格式文件为一种特殊格式文件,一般为程序运行过程中读取的文件。
    可以通过ls –l 命令查看文件类型,普通文件类型为“-”

  2. 目录文件
    Linux系统中把目录也看成是文件,因此目录文件即为目录。目录用来存储一组相关文件的位置、大小等信息。目录中还可以包含下一级目录和文件。目录文件只允许系统管理员对其进行修改,用户进程可以读取目录文件,但不能对它们进行修改

“点”(.)表示目录本身 ;“点点”(..)表示该目录的父目录
目录文件类型为“d”

  1. 链接文件
    链接文件指向某个实际的目标文件,其用途类似于Windows系统中的“快捷方式”,也即当访问链接文件时,实际访问的将是链接文件所指向的目标文件。
    链接文件类型为“l”(英文字母L的小写)

  2. 设备文件
    设备文件是用于为操作系统与设备提供连接的一种文件。在Linux系统中将设备作为文件来处理,操作设备就像操作普通文件一样。每个设备对应一个设备文件,所有设备文件都存放在/dev目录下。
    设备文件可以分为块设备文件和字符设备文件两类。

  • 块设备文件
    应用程序可以随机访问设备数据,程序可自行确定读取数据的位置,块设备的存取以字符块为单位。
    典型代表:硬盘
  • 字符设备文件
    提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取。字符设备的存取以一个字符为单位。
    典型代表:打印机,键盘、鼠标
    块设备文件类型为“b”,字符设备文件类型为“c”。
  1. 套接字文件
    通常用在网络数据连接。可以启动一个程序来监听客户端的请求,客户端可以通过套接字socket来进行数据通信。
    套接字文件类型为“s”

  2. 管道文件(pipe)
    也被叫做FIFO文件(先进先出),从字面上理解,管道文件就是从一头流入,从另一头流出。
    管道文件也是Linux中较特殊的文件类型,这类文件多用于进程间的通信方面,主要目的在于解决多个程序同时访问一个文件所面临的问题。
    管道文件类型为“p”

2、文件操作命令:cp,rm,mv,file (每种命令用途及命令写法,不要求记忆选项,后面一旦涉及命令,均是如此要求,不再赘述)

操作命令

  1. 文件复制命令cp
  • 命令功能:复制文件或目录
  • 命令格式:
    cp [选项] 源文件 目标文件
    cp [选项] 源文件1 源文件2 源文件3… 目标目录
  • 说明:如果源文件是多个文件,则文件之间用空格分开,同时复制的目标必须是一个目录,这些源文件将被复制到目标目录下
  1. 文件删除命令rm
  • 命令功能:删除文件或目录
  • 命令格式:rm [选项] 文件或目录
  • 说明:
    如果源文件是多个文件,则文件之间用空格分开,表示一次删除多个文件;删除链接文件时,只是断开了链接,原文件保持不变;
    使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好看一下文件的内容,确定是否真要删除。
  1. 文件移动/更名命令mv
  • 命令功能:文件或目录进行移动(move)或改名
  • 命令格式:
    mv [选项] 源文件名 目标文件名 // 改名操作
    mv [选项] 源文件名 目录名
    mv [选项] 源目录名 目标目录名 //目标目录已存在,将源目录移动到目标目录;目标目录不存在则改名
  • 说明:如果源文件是多个文件,则文件之间用空格分开,同时目标必须是一个目录,这些源文件将被移动到目标目录下
  1. 文件类型查看命令file
  • 命令功能:显示文件或目录的类型
  • 命令格式:
    file [选项] 文件名
  • 说明:
    如果不为 file命令指定任何标志, 缺省显示最后 10 行

3、文件查看命令: cat ,more,less,head,tail(需要记住-f选项作用),touch

oBuLex.png

  1. 文件查看命令cat
  • 命令功能:
    • 功能1:将指定文件从首行开始连续显示在屏幕,当文件过大时不适用命令格式: cat [选项] 文件名
    • 功能2:将多个文件内容合并
      命令格式: cat [选项] 文件名1 文件名2 。。。> 目标文件名
    • 功能3: 从键盘创建一个文件( 只能创建新文件,不能编辑已有文件, ctrl+c终止输入 )
      命令格式: cat > 文件名
  1. 文件查看命令more
  • 命令功能:
  • 功能:分页显示文件内容
  • 命令格式: more [选项] 文件名
  • 说明:
    和cat命令类似,more可将文件内容显示在屏幕上,但是它每次只显示一

    该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提
    示信息,给出至今已显示的该文件的百分比:–More–(XX%)
  1. 文件查看命令less
  • 命令功能:
    功能:分页显示文件内容
    命令格式: less[选项] 文件名
    说明:
    less命令作用和more命令类似,可用于浏览文本文件的内容; 不同的是,less
    命令允许用户使用光标键上下翻动浏览文本,更加灵活。
    less可以不读入整个文本文件,因此在处理大型文件时速度较快
  1. 文件查看命令head
  • 命令功能:显示一个文件或多个文件的前几行或前几个字节
  • 命令格式:
    head [选项] [文件名]
  • 说明:
    如果不为 head 命令指定任何标志, 缺省显示前 10 行
    如果没有接文件名,那么将会显示用户从键盘上输入的字符
  1. 文件查看命令tail
  • 命令功能:显示一个文件或多个文件的后几行或后几个字节
  • 命令格式:
    tail [选项] [文件名]
  • 说明:
    如果不为 tail命令指定任何标志, 缺省显示最后 10 行
    如果没有接文件名,那么将会显示用户从键盘上输入的字符
    -f 将文件里的最尾部的内容显示在屏幕上,并且不断刷新,只
    要文件更新就可以看到最新的文件内容
  1. 修改文件时间及创建新文件命令touch
  • 命令功能:创建新文件,修改文件的修改时间mtime和访问时间atime
  • 命令格式:
    touch [选项] 文件名
  • 说明:
    该命令不能修改文件的创建时间
    如果touch命令没有指定时间,touch就会将文件的mtime和atime修改为系统的
    当前时间

4、(重点)文件查找命令: which ,whereis,locate,find;要求知道4者之间的区别

oBMEuR.png

  1. 查看可执行文件的路径命令which
  • 命令功能:查看可执行文件的路径
  • 命令格式:
    which [选项] 命令
  • 说明:
    该命令在环境变量PATH指定的目录中,寻找指定的可执行文件
  • 常用选项
    选项 说明

-a 将所有可找到的命令列出,不仅仅列出第一个找到的命令

  1. 查看文件位置命令whereis
  • 命令功能:查看文件位置
  • 命令格式:
    whereis [选项] 文件或目录名
  • 说明:
    该命令利用系统数据库/var/lib/mlocate/mlocate.db中记录来进行查找,因此在
    数据库未被更新时,可能找到已被删除掉的文件,或无法找到新建文件。
    建议查询前先执行命令 sudo updatedb 更新数据库
  1. 查看符合条件的文件位置命令locate
  • 命令功能:查看符合条件的文件位置
  • 命令格式:
    locate [选项] 关键字
  • 说明:
    该命令利用系统数据库/var/lib/mlocate/mlocate.db中记录来进行查找,因此在
    数据库未被更新时,可能找到已被删除掉的文件,或无法找到新建文件。
    建议查询前先执行命令 sudo updatedb 更新数据库
  1. 查看文件位置命令find
  • 命令功能:借助搜索关键字(文件名、文件大小、文件所有者等)查找文件
    或目录
  • 命令格式:
    find [搜索路径] [选项] [动作]
  • 说明:
    该命令直接查找硬盘文件系统,速度很慢,但能够完整地找出所有符合查找
    条件的文件
    动作:指定条件查找后进行的特定处理方法,如将查找到的文件在屏幕上显
    示出来,或对其进行权限修改,或将查找到的文件删除等等
  1. 区别
  • which 只能查可执行文件的位置 ,在PATH变量里面寻找
  • whereis 只能查二进制文件(含可执行文件)、说明文档,源文件或目录名称等,从linux文件数据库(/var/lib/slocate/slocate.db 或 /var/lib/mlocate/mlocate.db)寻找,所以有可能找到刚刚删除,或者没有发现新建的文件
  • locate 配合数据库查看文件或者目录位置,数据库大至每天更新一次,文件名是部分匹配
  • find 实际搜寻硬盘查询文件名称

总结

5、目录定义及两个特殊目录.和..

  • 目录本身属于一种特殊文件。
  • Linux利用目录以树状结构的形式组织文件,目录记录了它内部所有文件
    的属性信息。
  • 为关联上一级目录以及它自己本身,在每个目录下有两个特殊目录:“.”
    和“..”,其中“.”表示当前目录本身,而“..”则表示当前目录的父
    目录。
  • 子目录是挂靠在另一个目录中的目录。包含子目录的目录称作父目录。
    除了root目录以外,所有的目录都是子目录,并且有它们的父目录。
    root目录就作为自己的父目录

6、root和普通用户的用户主目录各是什么

一般普通用户,家目录是/home/用户名

root用户,家目录是/root

7、绝对路径和相对路径写法

  1. 绝对路径名
  • 以根目录为起点的路径名称做绝对路径名。
  • 绝对路径名总是以斜线字符(/)开头,它表示根目录,例如:
    /home/mengqc/lib/func/file1
  1. 相对路径名
  • 相对当前工作目录的路径名
  • 例如工作目录是/home/mengqc/lib , 其子目录func下文件file1的绝对路径
    名为/home/mengqc/lib/func/file1,而相对路径名是 func/file1。
  • 点(.)目录表示本目录自身,而点点(..)目录代表该目录的父目录。例如,
    当前工作目录是/home/mengqc/lib,想列出/home/liu目录的内容,可使用
    命令:$ ls ../../liu

8、目录操作命令: ls , cd ,pwd, mkdir ,rmdir,对于ls命令需要掌握递归显示子目录内容的选项及显示隐藏文件选项;掌握rmdir与rm的区别

目录操作命令

  1. 查看文件和目录命令ls
  • 命令功能:用于显示指定目录下内容(列出目录所含文件及子目录)
  • 命令格式:
    ls [选项] 文件名或目录名
  • 说明:
    ls是英文单词list的简写,是用户最常用的命令之一,它类似于DOS下的dir命令。
    选项和参数都缺省的情况下,ls默认打印当前路径下的文件名
    -a 显示目录下的全部文件及目录(包括隐藏文件,即以.开头)
    -A 显示所有文件及目录(包括隐藏文件,但不包含.与..这两个目录
    -R 列出当前目录下的所有文件信息,并以递归地方式显示各个子目录中的文件
    和子目录信息
  1. 目录切换命令cd
  • 命令功能:目录切换
  • 命令格式:
    cd [目录名]
  • 说明:
    如果省略目录,则默认切换到当前用户的主目录
  1. 显示当前目录命令pwd
  • 命令功能:显示当前目录
  • 命令格式:
    pwd [选项]
  • 常用选项

-P(注意大写) 显示实际工作目录,而非链接文件本身目录名

  1. 新建目录命令mkdir
  • 命令功能:创建目录
  • 命令格式:
    mkdir [选项] 目录名
  • 说明:
    需要注意的是新建目录的名称不能与指定路径中已有的目录或文件同名
    目录创建者必须对指定路径具有写权限
  1. 删除目录命令rmdir
  • 命令功能:删除目录
  • 命令格式:
    rmdir [选项] 目录名
  • 说明:
    目录被删除之前应该是空目录,否则报错。
    当前工作目录必须在被删除目录之上,不能是被删除目录本身,也不能是被
    删除目录的子目录
  1. rmdir和rm的区别
    rmdir只能用于删除空的目录,而rm在删除目录上则没有限定目录一定要是空的才可以删除,所以rmdir可以很好的用于检测一个目录是否为空目录

9、(重点)文件相关3个时间属性分别是什么?ctime,mtime和atime,三者具体含义

文件具有3个时间属性:创建时间ctime,修改时间mtime和访问时间atime

  • mtime(modification time):当文件的内容更改时,就会更新这个时间。
  • ctime(change status time):当文件的状态被更改时,会更改这个时间,比
    如像文件的权限或者属性被更改时就会更改这个时间。
  • atime(access time):就是文件访问时间,当文件的内容被读取时就会更改这
    个时间。比如使用cat指令读取某个文件时,这个时间就会被更改。

时间属性

10、PPT最后思考题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
问题1
输入“cd”命令并按【Enter】键后,将有什么结果?
A.从当前目录切换到根目录
B.屏幕显示当前目录
C.从当前目录切换到用户主目录
D.从当前目录切换为上一级目录
正确答案: C
---
问题2
pwd命令的功能是什么?
A.设置用户的口令
B.显示用户的口令
C.显示当前目录的绝对路径
D.查看当前目录的文件
正确答案: C
---
问题3
如何快速切换到用户John的主目录?
A.cd @John
B.cd #John
C.cd &John
D.cd ~John
正确答案: D
---
问题4
如果当前目录为/home,使用以下哪个命令后可进入
/home/stud1/test目录?
A.cd test
B.cd stud1/test
C.cd /stud1/test
D. cd home
正确答案: B
---
问题5
ls命令的哪个参数可以递归显示当前目录和所有子目录中所有文件?
A.-a
B.-d
C.-aR
D. -t
正确答案: C
解析:-a 表示显示所有文件和子目录,包含隐藏文件
-d:表示显示目录时仅显示目录信息,不显示其中包含
的文件信息
-t:按时间顺序显示
-R:递归显示子目录中的文件和子目录信息
---
问题6
以下关于命令cat name test1 test2 >name的说法,哪个正确?
A.命令正确,作用是将name,test1,test2文件内容合并到name文件
B.命令错误,输出文件不能与输入文件同名
C.name文件为空时正确
D. 命令错误,应为cat name test1 test2 >>name
正确答案: B
解析:
cat 文件1 文件2 > 文件3, 表示将文件1,
文件2内容合并,产生文件3, 但不允许
一个文件即是输入文件又是输出文件;
cat >>文件名 表示向文件追加内容
---
问题7
目录中有5个文件,文件名分别为jq.c, jq1.c,jq2.c,jq3.cpp和jq10.c,
执行ls jq*.?命令后显示哪些文件?
A.jq.c, jq1.c,jq2.c,jq3.cpp
B. jq1.c,jq2.c,jq10.c
C.jq1.c,jq2.c,jq3.cpp
D. jq.c, jq1.c,jq2.c,jq10.c
正确答案: D
解析:*表示任意长度的任何字符,但不能
与”.”开头的文件名匹配
?表示任何一个字符

第4讲 文件权限、账号管理(重点章节)

1、用户、用户组概念及各自唯一标识号

  1. 用户

一定资源的使用者,可以创建和管理文件以及访问其他用户文件。Linux系统中针对文件的权限,规定了4种不同类型的用户:

  • 文件所有者(owner):Linux的文件或目录被一个用户拥有时,这个用户
    称为文件所有者,对文件的控制取决于文件所有者或root用户,一般来说是
    文件的创建者。
  • 同组用户(group): 文件所属用户组中的用户(也是owner所在的组)
  • 其他用户 (others) :非文件所有者和用户组内用户(不包括root)
  • 超级用户 (root) :具有管理系统的特权
  1. 用户组
  • 由一定数量的对某些文件具有相同操作权限的用户组成的小组。
  • Linux中每个用户都至少属于一个用户组,以保证对一个用户组中的所有用户进行集中管理
  • 一个用户可以从属于多个用户组
  • 一个用户组可以拥有多个用户
  1. UID和GID
  • 用户与用户组的标识号
  • root用户 UID=0
  • 系统用户 UID 1/999(Linux系统中一类特殊的用户,主要是用来完成某些系统管理或服务任务的。与root用户和普通用户不同,这类用户账户是不能用来登录系统的, 通常在安装软件包时自动创建 )
    普通用户 UID 1000
    60000可通过查看/etc/login.defs文件获取范围

2、掌握ls -l命令结果各项含义

ls -l

3、(重点)读懂给出文件权限,能说明各项具体代表的意思,会根据给定条件,写出对应的文件权限(符号化方式和十进制方式均要求掌握)

  1. 符号法
    文件权限
    问题:假设test1,test2,test3同属于testgroup用户组,如果有下面的两个文件,请说明两个文件的所有者与其相关的权限是什么?
    -rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt
    -rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 tsai
    答:文件test.txt的所有者为root,组为root,只有root这个账号可以存取此文件,其它人则仅能读此文件。
    文件tsai的所有者为test1,而组为testgroup。其中,test1 可以针对此文件具有可读可写可执行的权力,而同组的test2, test3两个人与test1同样是testgroup的群组账号,则仅可读可执行但不能写(亦即不能修改),至于非testgroup组的人则仅可以读,不能写也不能执行
  2. 十进制
    十进制

4、(重点)文件权限相关命令:chgrp ,chmod, chown, umask(要求知道针对文件和目录分别对应的默认权限是什么)

文件权限

  1. 改变文件所属用户组命令chgrp
    • 命令功能:改变指定文件所属用户组
    • 命令格式:
    chgrp [选项] 组名 文件名
    • 说明:
    ① 如果用户不是该文件/目录的文件所有者或超级用户,则不能改变该文
    件/目录的所属组
    ② 要被改变的组名必须在/etc/group文件中存在
    ③ chgrp只具有改变所属组的功能,chown可以同时改变文件拥有者和所属

  2. 改变文件所有者命令chown
    • 命令功能:改变文件或目录的所有者和所属的组
    • 命令格式:
    chown [选项] [owner][:[group]] 文件列表
    • 说明:
    ① 只有超级用户才可以使用该命令
    ② 要被改变的用户名owner必须在/etc/passwd文件中存在
    ③ 要被改变的组名group必须在/etc/group文件中存在
    ④ 只有owner时表示仅修改文件所有者,不修改所属组
    ⑤ owner:group时表示同时修改文件所有者和所属组
    ⑥ 只有owner:时表示修改文件所有者,修改所属组为新所有者的登录组
    ⑦ 只有: group时表示不改变文件所有者,修改所属组为新组

  3. 改变文件权限命令chmod
    • 命令功能:改变文件或目录的权限
    • 命令格式:符号或数字二种形式(对应于权限的两种表示方法)
    数字形式:chmod [选项] xyz 文件列表
    xyz: 分别为三组rwx属性数值的和
    符号形式:
    chomd

  4. 指定新建文件时预设的权限掩码命令umask
    • 命令功能:设置用户在新建文件或目录时的权限默认值
    • 命令格式:
    umask [选项] [权限掩码]
    说明:权限掩码是由3位八进制数组成,用基数权限去掉权限掩码后,即可产
    生建立文件时预设的权限。
    文件创建时的默认权限= 0666-umask
    目录创建时的默认权限= 0777-umask
    如果系统默认的umask是0022,那么创建文件时默认权限为:0666 -
    0022=0644,即-rw-r–r–
    那么创建目录时默认权限为:0777-0022=0755,即drwxr-xr-x

  5. 设置文件隐藏属性命令chattr
    • 命令功能:设置文件隐藏属性
    • 命令格式:
    chattr [选项] [+-=][属性名] 文件或目录名
    说明:

  6. 显示文件隐藏属性命令lsattr
    • 命令功能:显示文件隐藏属性
    • 命令格式:
    lsattr [选项] 文件或目录

5、(重点)文件特殊权限:SUID,SGID,SBIT含义,及其各自设置方法

SUID
  1. 定义
  • 文件所有者权限中的x被s标志代替,称为具有SUID权限
    testuser@ubuntu:/tmp$ ls -l /usr/bin/passwd

-rwsr-xr-x 1 root root 54256 May 17 2017 /usr/bin/passwd

  • 用于控制用户执行文件时的权限,以文件所有者的访问权限运行,而不受
    执行文件的用户本身访问权限的限制。
  • 该权限仅对二进制程序有效(可利用file命令查看)
  • 该权限对shell script不起作用,因为shell script只是将很多二进制执行文件调
    进来执行而已,SUID权限还需要看调进来的二进制执行程序的设置。
  • 该权限对目录不起作用
  • 执行文件的用户对该二进制程序需要具有x的可执行权限
  • 该权限仅在执行该程序的过程中有效,执行完毕立即释放权
  1. 执行原理
  • /usr/bin/passwd命令执行权限为-rwsr-xr-x ,因此普通用户user1具有x权限
  • passwd程序的文件所有者为root
  • 因为设置了SUID权限,因此当普通用户user1执行passwd命令时,自动“暂
    时”获得该程序的文件所有者root的权限,执行命令成功
  1. 设置方法
  • 设置suid : chmod u+s 文件名
  • chmod 4xxx 文件名
  • 取消suid : chmod u-s 文件名
  • chmod 0xxx 文件名
  • SUID属性字为4000,xxx代表文件原来的存取属性
SGID
  1. 定义
  • 文件所属用户组权限中的x被s标志代替,称为具有SGID权限

-rwxrwsr-x

  1. 执行原理
  • 对于文件而言
  1. 该权限对二进制程序有效
  2. 用户执行的文件时以该文件所属组的访问权限运行,而不受执行文件的用
    户本身所属用户组访问权限的限制
  3. 执行文件的用户对该程序需要具有x的可执行权限
  4. 该权限仅在执行该程序的过程中有效,执行完毕立即释放权限
  5. 对于目录而言
  • 该权限对目录有效
  1. 用户对于该目录具有r和x的权限,即该用户可以进入此目录

  2. 用户在该目录下新建文件/目录的用户组与此目录的用户组相同

  3. 设置方法

  • 设置sgid : chmod g+s 文件名/目录名
  • chmod 2xxx 文件名/目录名
  • 取消sgid : chmod g-s 文件名/目录名
  • chmod 0xxx 文件名/目录名
  • SGID属性字为2000,xxx代表文件原来的存取属性
SBIT
  1. 定义
  • 其他非同组用户权限中的x被t标志代替,称为具有SBIT权限

    drwxrwxrwt

  • 该权限仅对目录有效

  • 用户在该目录下新建文件/目录时,仅有自己与root才有权利删除该文件或
    目录

  1. 设置方法
  • 设置sbit: chmod o+t 目录名
  • chmod 1xxx 目录名
  • 取消sbit : chmod o-t 目录名
  • chmod 0xxx 目录名
  • SBIT属性字为1000,xxx代表文件原来的存取属性

6、(重点)用户、用户组相关的文件名称,每个文件功能是什么(无需记忆每行每个字段具体含义)

用户相关文件
  1. 用户账号信息文件/etc/passwd
    • /etc/passwd文件是账号管理中最重要的一个文件
    • 一个纯文本文件,对所有用户都可读
    • 保存除口令外的用户账号信息。
    • 只有root用户才能修改该文件
  2. 用户账号信息文件/etc/passwd
    • /etc/passwd文件是账号管理中最重要的一个文件
    • 一个纯文本文件,对所有用户都可读
    • 保存除口令外的用户账号信息。
    • 只有root用户才能修改该文件
用户组相关
  1. 用户组信息文件/etc/group
    • 该文件是用户组的配置文件,内容包括用户和用户组,并且能显示出用
    户是归属哪个用户组或哪几个用户组
    • 对所有用户都可读
  2. 用户组口令信息文件/etc/gshadow
    • 存储所有用户组账户的加密密码、组管理员等重要信息
    • /etc/gshadow文件只有超级用户才能查看
    • 每行定义了一个用户组信息(4个字段)

7、用户管理命令:useradd/adduser,passwd, usermod, userdel

用户管理命令

  1. 新增用户命令useradd
    • 命令功能:新增用户
    • 命令格式:
    useradd [选项] 用户名
    • 说明:
    命令执行需要root权限
    不加任何选项时:
    为用户指定默认的UID
    为用户创建一个与用户名相同的组,即用户私有组
    ubuntu系统执行useradd命令,在/home目录下并未自动产生对应的用户主
    目录/home/user0215
    解决方法:
    方法一:
    使用useradd命令时带-m 参数
    方法二:使用adduser命令
    方法三:对应使用未加-m参数的useradd命令,可以手工创建/home/用户主目

  2. 设置用户密码命令passwd
    • 命令功能:设置用户密码
    • 命令格式:
    passwd [选项] [用户名]
    • 说明:
    只有超级用户可以使用“passwd 用户名”修改其他用户的口令
    普通用户只能用不带用户名的passwd命令修改自己的口令
    新创建的用户在没有设置口令的情况下是处于锁定的状态,用户无法登录
    系统,所以必须为其设置口令

  3. 修改用户命令usermod
    • 命令功能:修改用户
    • 命令格式:
    usermod [选项] 用户名
    • 说明:
    命令执行需要root权限
    用户名必须在/etc/passwd中存在

  4. 删除用户命令userdel
    • 命令功能:删除用户
    • 命令格式:
    userdel [选项] 用户名
    • 常用选项
    /-r 连同用户的主目录及其下所有文件和目录也一起删除
    • 说明:
    命令执行需要root权限
    用户名必须在/etc/passwd中存在
    不带任何选项,表示仅删除用户账号,不删除相关文件
    已登录的用户账号不能直接删除
    如果在新建该用户时创建了私有组,且该私有组当前没有其他用户,则在
    删除用户的同时也删除这一私有组

  5. 查询用户UID/GID等信息命令id
    • 命令功能:查询用户UID/GID/用户组等信息
    • 命令格式:
    id [选项] [用户名]
    • 说明:
    未指定用户名时,表示当前用户

  6. 用户身份切换命令su
    • 命令功能:用户身份切换
    • 命令格式:
    su [选项] [用户名]
    • 说明:
    不带用户名,默认为切换到root
    可以使用exit退回原来的用户

  7. 以root身份执行命令sudo
    • 命令功能:以root身份执行命令
    • 命令格式:
    sudo [选项] [命令]
    • 说明:
    可以让用户在不切换身份的情况下,以其他用户的身份执行命令
    用户能否执行sudo命令依赖于配置文件/etc/sudoers,配置文件中存放着用户是否
    具有执行sudo的权限
    执行该命令,无需获取root密码,只需要输入用户自己密码即可
    如需要修改/etc/sudoers文件,则需要 visudo 这个指令。

  8. 显示自身用户名称命令whoami
    • 命令功能:显示自身用户名称
    • 命令格式:
    whoami [选项]
    说明:
    相当于执行id -un

  9. 显示当前登录所有用户命令who
    • 命令功能:显示当前登录系统的所有用户信息命令
    • 命令格式:
    who [选项]

8、用户组管理命令:groupadd,groupmod,groupdel

用户组管理命令

  1. 新增用户组命令groupadd
    • 命令功能:新增用户组
    • 命令格式:
    groupadd [选项] 用户组名
    • 说明:
    该命令仅root权限才能执行

  2. 修改用户组命令groupmod
    • 命令功能:修改用户组
    • 命令格式:
    groupmod [选项] 用户组名
    • 说明:
    该命令仅root权限才能执行

  3. 删除用户组命令groupdel
    • 命令功能:删除用户组
    • 命令格式:
    groupdel [选项] 用户组名
    • 说明:
     该命令仅root权限才能执行
    如果该用户组是某个用户的主要组,而该用户账户还存在,那么就不能删
    除该用户组。此外,如果该用户组中的用户在线,也不能删除该用户组。
    通常,应该先将用户组中的用户移除后再将它删除

  4. 管理用户组命令gpasswd
    • 命令功能:修改用户组
    • 命令格式:
    gpasswd [选项] 用户组名
    • 说明:
    该命令仅root和用户组管理员才能执行
    不带选项时,表示修改用户组密码

  5. 显示用户组命令groups
    • 命令功能:显示用户组
    • 命令格式:
    groups [选项] [用户名]

  6. 有效用户组切换命令newgrp
    • 命令功能:有效用户组切换
    • 命令格式:
    newgroup [用户组名]
    • 说明
    需要切换的用户组名,必须是该用户所属的用户组

9、PPT最后思考题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
问题1
以下哪个文件保存用户账号的UID信息?
A./etc/users
B./etc/shadow
C./etc/passwd
D./etc/inittab
正确答案: C
解析:A对应文件并不存在,B对应文
件主要保存加密密码和其他密码相关
信息,D对应文件是决定运行级别的文
件,与用户账号信息无关
---
问题2
使用useradd命令新建用户,如需指定用户的主目录,要使用哪个
选项?
A.-g
B.-d
C.-u
D.-s
正确答案: B
解析:-g 指定用户所属的主群组;
-u 指定用户UID, -s 指定用户登录shell
---
问题3
以下哪个命令能在删除用户peter的同时删除其用户主目录?
A.rmuser –r peter
B.deluser –r peter
C.userdel –r peter
D.usermgr –r peter
正确答案: C
---
问题4
设置文件权限,要求文件所有者具有读/写/执行权限,其他用户只
有执行权限,则应当设置为什么数值?
A.722
B.711
C.744
D.644
正确答案: B
---
问题5
文件exer1的权限为rw-r—r--,现要增加所有用户的执行权限和同组
用户的写权限,下列哪个命令正确?
A.chmod a+x,g+w exer1
B.chmod 765 exer1
C.chmod o+x exer1
D.chmod g+w exer1
正确答案: A
---
问题6
以下哪个命令能修改文件所有者?
A.chgrp
B.chown
C.chmod
D.chuser
正确答案: B
解析:chgrp更改文件的所属用户组,
chmod更改文件权限,chuser命令不存

---
问题7
使用umask 命令,得到输出为:0002,那么 当前用户创建一个文本
文件时,该文件的权限为?
A.drwxrwxrw
B.drwxrwxr-x
C.-rw-rw-r--
D.-rw-r--r--
正确答案: C
解析:文本文件创建时默认权限为
-rw-rw-rw-(0666), 去掉umask 0002对应
的-------w-, 结果为-rw-rw-r--

第5讲 vi和vim编辑器

1、vi的三种工作模式

  • 一般模式(command mode,命令模式)
  • 编辑模式(insert mode,插入模式)
  • 命令行模式(command-line mode,底行模式)

2、三种模式之间如何切换

模式切换

3、PPT最后思考题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Vi的3种模式之间不能直接转换的是以下哪种情况?
A.一般模式-编辑模式
B.一般模式-命令行模式
C.编辑模式-命令行模式
D.任何模式之间都能直接转换
正确答案: C
---
问题2
存盘并退出vi可用命令“:wq”
, 还可用下列哪个命令?
A. :q!
B. :ZZ
C. exit
D. :q
正确答案: B
---

Shell基础和第7讲 Shell编程(重点章节)

1、shell分类

  1. Bsh(Bourne Shell)
    UNIX的默认Shell,也是其他shell的开发基础,其主文件名为sh。
    Shell编程能力很强,但在处理与用户的交互方面做得不如其他
    Shell
  2. Csh(C Shell)
    • 能提供Bsh所不能处理的用户交互特征,如命令补全、命令别名、历
    史命令替换等。
    • 编程能力不如Bourne Shell
    • 语法和C语言的很相似
    • 在linux中扩展为tcsh
  3. Ksh(Korn Shell):
    • 融合了Csh和Bsh的优点,并和Bsh完全兼容
    • 效率很高
    • 命令交互界面和编程交互界面都很不错。
  4. Bash(Bourne Again shell )
    • Bash与sh兼容
    • 目前Linux默认Shell

2、(重点)Shell变量分类,每种类型的设置、查看,取消设置方法

Shell变量主要分为四类:

  • 用户自定义变量(本地变量)
  • 环境变量
  • 位置变量
  • 预定义变量
  1. 用户自定义变量
  • 自定义变量的设置
    变量名=变量值
  • 说明:
  1. 赋值号“=”的两边没有空格,否则在执行时会引起错误
  2. 如果变量的值中有$符号,会将其后字符串视为变量名
  3. 如果变量的值中有空格(shell会认为命令结束)、换行符(shell会认
  4. 为命令结束)等特殊字符,要用“” 或’’引用起来也可以修改原有变量值
  5. 双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符仅为一般字符。
    6.1
  6. 变量值部分必要时需要以字符“\”来将特殊符号(如$,\,空格符等)变成一般符号
    6.2
  7. 建立的变量为当前shell的局部变量,不能传递给由当前Shell创建的任何子进程中,或从本shell中退出后变量便无效了。
  • 自定义变量的查看(单个)
    echo $变量名
    echo “$变量名”
    echo ${变量名}
    (花括号的作用是限定变量名字符串的范围)
    testuser@ubuntu:~$ echo zz
  • 自定义变量的查看(所有变量查看)
    set命令
  • 自定义变量的清除
    unset 变量名
    注意:
    变量名前无$符号
  1. 环境变量概述
  • Shell预留了一些和系统的工作环境有关的变量,这些变量称为环境变量。
  • 全局环境变量可以由父进程传给子进程,可用于所有子进程(自定义变量只用于当前Shell)
  • 通常用于工作环境的设置
  • 传统上,所有全局环境变量均为大写
  • HOME:用户主目录的绝对路径
  • SHELL:当前使用的shell。通常,它的值是/bin/bash
  • PATH:shell查找命令的路径(目录)列表,各个目录用冒号(:)隔开
  • PWD:当前工作目录的路径
  • LOGNAME:登录用户名
  • LANG:语言种类
  1. 环境变量查看
  • echo命令:显示单个变量
  • env命令:
    显示所有环境变量,包括本进程及以前的“祖先进程”所输出的变量
    格式:env
  • set命令
    该命令可显示所有定义的变量,包括自定义变量和环境变量
  1. 环境变量设置
  • export命令
  • export 变量名 //将一个已有本地变量变更为环境变量
    export 变量名=变量值 //定义一个环境变量且赋值
    说明:利用这种方式设置的环境变量,用户注销/关机后所设值丢失可以修改/etc/profile或/.bash_profile或/.bashrc文件
  1. 环境变量清除
  • unset 变量名
  1. 位置参数变量概述
  • 位置参数是一种在调用shell程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。位置参数之间用空格分隔。
    6.3
  • 其他特殊位置参数变量
    6.4
  1. 系统预定义变量概述

  2. 预定义变量和环境变量相类似,也是在shell一开始时就定义了的变量。所不同的是,用户只能根据shell的定义来使用这些变量,而不能重新定义它。所有预定义变量都是由$符和另一个符号组成的,常用的shell预定义变量有:

  • $#:位置参数的数量
  • $*:所有位置参数的内容
  • $?:上一条命令执行后的返回值,执行正确为0,非0为执行过程
    中产生某些错误
  • $@:表示命令行中输入的所有参数串
  • $$:当前进程的进程号
  • $!:后台运行的最后一个命令对应的进程号

4、常用特殊字符,重点:单引号与双引号之间的区别

  1. 单引号
  • 单引号括起来的所有字符都作为普通字符出现
  • 特殊字符用单引号括起来后,也会失去原有意义,而只作为普通字符解释。
    例:
    aaa=bbb
    echo $aaa
    bbb
    echo ‘$aaa’
    $aaa
  1. 双引号
    由双引号括起来的字符,除下面几种符号具有其特殊功能外,其余字符都作为普通字符对待:
  • $符号:用其后指定的变量值来代替这个变量;
  • \符号:它是转义字符,它告诉Shell不要对其后面的特殊
  • 字符($、\和双引号)进行特殊处理,只当做普通字符即可。

双引号:Shell解释器对双引号内的内容进行变量替换和命令替换
(包括反引号包含的命令)

  1. 反引号
    6.5

  2. 反斜线
    6.6

  3. 注释符号#
    在Shell编程或Linux的配置文档中,经常要对某些正文行进行注释,以增加程序的可读性。
    在Shell程序中以字符 # 开头的正文行表示注释行。

  4. 通配符

  • *与0个或多个任意的字符相匹配
  • ? 可以匹配文件名中的任何单个字符
  • 通配符[…]和[^…]
    […]
    匹配方括号[ ]中指定范围内的字符
    可以使用横杠-来连接两个字母或数字,以表示范围
    例:[a-z]
    [^…]
    匹配不在指定范围内的任何字符。
    例:[^a-z]

5、管道

  • 管道将多个命令前后连接起来形成一个管道流。
  • 前一个命令的输出结果作为后一个命令的输入。
  • 一般形式:
    命令1 |命令2
  • 管道是命令之间的,重定向是命令与文件之间的
  • 常用管道命令-选取命令grep
    grep命令是一种强大的文本搜索工具,它能使用复杂的的匹配模式来搜索文本,并把匹配的行打印出来。
    常见应用场景:在文件中查找包含有指定字符串的行。
    格式:
    grep  [参数]  要查找的字符串  [文件名]
  • 输入重定向
    6.7
  • 输出重定向
    6.8

6、shell脚本执行的3种方法及区别

  • 需要为脚本赋予执行权限
    chmod a+x hello.sh
  • 执行Shell脚本
    存在三种运行方式:
  1. bash 脚本名称 如:bash hello.sh
    这种方式Shell会查找PATH变量中的各路径中是否有相应程序,若没有则会出错,因而需要在PATH变量中添加脚本所在的路径。或者直接利用cd命令切换到脚本所在路径下,再使用该方式运行脚本(也就是Shell文件在当前目录下这样执行是可以的)
  2. ./脚本名称 如:./hello.sh
  3. source 脚本名称 如:source hello.sh

7、算术表达式写法

6.9
6.10

8、逻辑表达式写法(因内容较多,仅要求掌握两个整数之间的比较写法)

6.11
6.12

9、分支语句(if,case均要求掌握写法,熟读PPT上示例,要求能读懂每一句的含义,会仿照编写)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1.创建一个简单的 shell 程序,其功能为:
使用read命令从键盘上获取文件名 ,判断该文件是否是存在,如果不存在给出提示并退出,判断文件是否是符号链接文件,如果是则移动到/tmp目录下,否则不进行任何处理,显示执行过程以及结果。
#!/bin/bash
read -p "Please input a filename:" fname
if [ ! -e "$fname" ]
then
echo "$fname is not exist"
exit 1
fi

if [ -L "$fname" ]
then
$(sudo mv $fname /tmp)&&echo "copy $fname to /tmp successful" || echo "copy $fname to /tmp fail"
else
echo "$fname is not a link file"
fi
备注: -L $fname 只能检查出符号链接文件,对于硬链接文件无法检查.(可以用ln –s file linkfile文件创建符号链接文件来测试。)
4、编写一个Shell脚本,利用for循环把当前目录下的所有*.c文件复制到指定的目录中,注意判断指定目录是否存在,并显示复制后该目录内按文件大小排序的目录文件清单
#!/bin/bash
echo “请输入指定目录名称:”
read dir
if [ -d $dir ]
then
for filename in *.c
do
cp $filename $dir
done
ls -l $dir | sort -n -r -k 5
else echo "bad directory name:$dir"
fi

10、循环语句(for,while,until均要求掌握写法,熟读PPT上示例,要求能读懂每一句的含义,会仿照编写)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2. 用Shell编程,实现自动在/tmp目录下创建四个文件m1.txt,m2.txt,m3.txt,m4.txt,自动创建m1,m2,m3,m4四个目录,并将m1.txt ,m2.txt,m3.txt,m4.txt 四个文件分别拷贝到各自相应的目录下

#!/bin/bash
cd /tmp
i=1
while [ $i -le 4 ](也可以用for i in 1 2 3 4)
do
touch m$i.txt
mkdir m$i
cp m$i.txt m$i
i=$((i+1))
done
3、用Shell编程:根据用户输入的数x计算x!,并用echo命令显示结果。
解答:


#!/bin/bash
readp “Please input a number:” num
if [ $num –lt 0 ]
then
echo “The num is little then 0!”
exit 1
elif [ $num –eq 0 ]
then
echo “The result is 1.”
exit
else
i=1
sum=1
while [ “$i” –le “$num” ]
do
sum = $((sum*i))
i=$((i+1))
done
echo “The factory of $num is $sum”
fi

11、思考题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Shell命令行的选项和参数之间用什么符号隔开?
A%
B!
C空格
D~
正确答案: C
---
用户曾经使用过的命令保存在哪个文件?
A.bashrc
B.bash_history
C.bash_profile
D.history
正确答案:B
---
普通用户执行ls –l /root &>/tmp/root.ls命令后结果如何?
A.显示/root目录和/tmp/root.ls文件的详细列表
B.显示/root目录的详细列表,并重定向输出到/tmp/root.ls文件 
C.报告错误信息
D.将/root目录的详细列表信息重定向输出到/tmp/root.ls文件,并将错误信息重定向输出到/tmp/root.ls文件
正确答案:D