课程笔记

Ch1 认识Linux系统

Linux用途:

Linux服务器,嵌入式Linux系统,桌面应用,软件开发平台

Linux特点:

  1. 开放性
  2. 多用户
  3. 多任务
  4. 良好的用户界面
  5. 设备独立性
  6. 丰富的网络功能
  7. 可靠的系统安全
  8. 良好的可移植性

Linux组成:

内核,Shell,文件系统,应用程序

  • 内核:存储,cpu,进程,文件,网络等等功能,与硬件打交道并为用户提供一个有限服务集的低级支撑软件
  • Shell:命令解释器,解释命令输送到内核
  • 文件系统:文件存放的组织方法
  • 应用程序:程序集

内核的版本,怎么命名的,什么是发行版,有哪些常见的发行版

Linux的版本号分为两部分,即内核版本与发行版本。

内核版本号由3个数字组成:r.x.y。
r:目前发布的内核主版本。
x:偶数表示稳定版本;奇数表示开发版本。
y:错误修补的次数。

发行版本:一些组织和厂家,将Linux系统的内核、应用软件和文档包装起来,并提供一些系统安装界面、系统配置设定管理工具等就构成了 Linux发行版本 。
相对于Linux操作系统内核版本,各发布厂商发行版本的版本号各不相同,与Linux系统内核的版本号是相对独立的。

主流发行版:Mandriva、Red Hat、SUSE、Debian、Ubuntu、CentOS、Arch、Gentoo、Oracle等。

RHEL新特性

  1. 基于内核的虚拟化大量改进
  2. LVM缓存,将xfs作为默认的文件系统
  3. 引入Linux容器Docker
  4. 编译工具链方面,RHEL 7包含GCC 4.8.x、glibc 2.17、GDB 7.6.1。
  5. 包含Ruby 2.0.0、Python 2.7.5、Java 7等编程语言。
  6. 在系统和服务方面,RHEL 7使用systemd替换了SysV

Ch2 安装Linux系统

硬件要求

  1. CPU:
  2. 内存
  3. 磁盘空间
  4. 显示器和显卡
  5. DVD光驱

分区命名方案

Linux系统使用字母和数字的组合来指代硬盘分区

Linux系统使用一种更加灵活的命名方案, 该命名方案是基于文件的,文件名的格式为 /dev/xxyN/dev:

这是Linux系统下所有设备文件所在的目录名。 因为分区处在磁盘上,磁盘是设备,这些文件也代表了所有可能的分区

xx:分区名的前两个字母表示分区所在设备的类型,通常是hd(IDE硬盘)或sd(SCSI硬盘)。

y:这个字母表示分区所在的设备号。

N:最后的数字N代表分区。

  • /dev/hda3是第1个IDE 硬盘上的第3个主分区或扩展分区;
  • /dev/sdb6是第2个SCSI硬盘上的第2个逻辑驱动器。

分区方案

最简单的分区方案(至少需要的分区)

SWAP分区:即交换分区,建议大小是物理内存的1~2倍。当然你内存足够大的时候,就不需要这么做了。

/分区

/boot分区:存放与Linux启动相关程序,最少200MB

使用以上的分区方案,所有的数据都放在/分区上,对于系统来说不安全,数据不容易备份

合理的分区方案。6个,注意SWAP没有/且是大写

/boot分区:用来存放与Linux系统启动有关的程序,比如启动引导装载程序等,建议大小为100MB

/usr分区:用来存放Linux系统中的应用程序,其相关数据较多,建议大于8GB。

/var分区:用来存放Linux系统中经常变化的数据以及日志文件,建议大小为1GB。

/分区:Linux系统的根目录,所有的目录都挂在这个目录下面,建议大小为1GB。

SWAP分区:交换分区,实现虚拟内存,建议大小是物理内存的1~2倍。没有挂载点

/home分区:存放普通用户的数据,是普通用户的宿主目录,建议大小为剩下的空间。

防火墙

FireWallID防火墙,通过将网络划分成不同的区域,制定出不同区域 之间的访问控制策略,以此来控制不同程度区域间传送的数据流,理解成火车站的安检,不同的入口见车的严格度不一样

默认情况下FirewallD防火墙的连 接区域为public,public在公共区域内使用,指定 外部连接可以进入内部网络或主机。

Ch3 字符界面操作基础

两种界面:图形化界面、字符界面


systemctl set-default multi-user.target//将字符洁面设置为启动计算机后要进入的默认目标,

graphical.target为图形化界面

关闭和重启Linux系统:

如果需要以超级管理员(root)身份登录系统进行管理,在登录提示后输入用户名为“root”,按“回车”键后,在口令提示中输入安装时设置的根口令,然后按“回车”键即可。

shutdown:安全地关闭系统 

shutdown [选项] [时间] [警告信息]

shutdown -h now 立即关闭系统

shutdown -h 45 定时45分钟后关闭系统

shutdown -r now “System will be reboot now.”重新启动系统,并发出警告信息

shutdown -r 01:38

halt:引发主机关闭系统=调用 “shutdown -h”命令执行关闭系统

[root@PC-LINUX ~]# halt

reboot:引发主机重启,参数与“halt”相似。

[root@PC-LINUX~]# reboot

运行级别

要很清楚,3字符、5图形、0关机、6重启

注意到CentOS7中已经改变了采用运行级别这样的做法,而是采用systemd和target的模式。但是事实上仍保留了一定的向前兼容性。

运行级别 对应目标 目标链接文件 功能
0 poweroff.target runlevel0.target 关闭系统
1 rescue.target runlevel1.target 救援模式
2 multi-user.target runlevel2.target 命令行多用户
3 multi-user.target runlevel3.target 命令行多用户
4 multi-user.target runlevel4.target 命令行多用户
5 graphical.target runlevel5.target 图形界面多用户
6 reboot.target runlevel6.target 重启

shutdown –h now和init 0用于关机+halt

shutdown –r now和init 6用户重启+reboot

系统日志保存在哪个目录下

一般保存在/var/log目录下

终端的命名tty pty pts

进入命令行的方式

字符界面、图形界面下的终端以及虚拟控制台(远程)

虚拟控制台的切换

image.pngimage.png

man帮助命令

man是一种显示Unix/Linux在线手册的命令。可以用来查看命令、函数或文件的帮助手册,另外它还可以显示一些gzip压缩格式的文件。
man命令格式化并显示在线的手册页。
man ls
man mkdir

help帮助命令

help使用help命令可以查找Shell命令的用法

查看mkdir命令帮助:mkdir –help

Shell

  1. 与计算机交流,接受用户命令,然后调用相应的应用程序。作为命令语言可以交互的解释和执行用户输入的命令或者预先设定好的一连串的命令;作为程序设计语言,可以定义各种变量和参数,并且提供控制结构(循环和分支)
  2. bash介绍
  3. Shell操作
    1. 命令行自动补全:tab键
    2. 命令替换 参数由另外一个命令的结果来替代
      • kill -9 $(pidof less)
    3. 一行上执行多个命令
      1. ;先执行命令1,不管是否出错,执行命令2
      2. && 只有当命令1成功执行完毕过后才能执行命令2
    4. 别名
      1. alias mk=mkdir
      2. unalias mk
    5. image.png
    6. image.png
    7. image.png
    8. image.png

管道

管道可以通过组合许多小程序共同完成复杂的任务,可以将某个命令的输出信息当作某个命令的输入,由管道符号“|”来标识。

命令1|命令2|命令3|..

rpm -qa|grep a|more //命令rpm -qa显示已经安装在系统上的RPM包,命令grep a是过滤软件 包,命令more是分页显示这些信息

重定向

输出重定向,将某一命令执行的输出保存到文件中,如果已经存在相同的文件,覆盖原文件的内容

ls/boot >/root/abc

echo Hello >/root/mm

输出追加重定向

echo Hello >>/root/mm

输入重定向

输入追加重定向

错误重定向

cat /root/kk 2> /root/b

错误追加重定向

cat /root/kk 2>> /root/b

输出和错误重定向

ls /boot &> /root/kk

vi (编辑的是ASCII文本)

三种模式,三种模式之间的转换及命令

  1. 当在Shell提示符下输入“vim 文件名”之后就进入了命令行模式,在命令行模式下是不能输入任何数据的。
  2. 在命令行模式下输入文本插入命令就可以进入插入模式,这时候就可以开始输入文字了。
  3. 从插入模式切换为命令行模式只需按“Esc”键。
  4. 在命令行模式下,按转义命令冒号键“:”可以进入末行模式。

image.png
命令行模式控制屏幕光标的移动,字符、字或行的删除,移动、复制某区域及进入插入模式,或者到末行模式

  1. 进入插入模式

    image.png

  2. 光标移动,

    1. 上下左右箭头,kjhl(快结婚了,nk,nj,
    2. 0使光标移动所在行的行首,gg文件首,G文件尾部
  3. 命令模式

    1. x删除字符,X删除前面的字符,dd删除行,nx,nX,ndd
    2. yw复制当前位置到单词尾部,nyw所在位置开始的n个单词,YY复制当前行,y$光标到行尾,y^光标到行首,p粘贴
    3. r替换,R替换直到ESC,u撤销,/查找

插入模式:编辑

末行模式:保存退出

  1. :wq :w :wq! :q! :q

  2. :d 删除当前行

Ch4 目录和文件管理

一切都是文件

ls -l详解

  • 第一列:drwxr-xr-x,d代表目录,-代表普通文件。开始3个字符rwx代表该文件的属主的权限,中间3个字符r-x代表该文件属主所在用户组的其他用户的权限,最后r-x代表其他用户的权限。
  • 第二列:若是文件则代表该文件的硬链接数。若是目录,则代表该目录下的子目录数,其实default-host目录下并没有子目录,为什么会显示有2个子目录呢,因为任何目录都有2个子目录,当前目录(.)和子目录(..)。
  • 第三列:当前文件所属的用户名,若该用户被删除,则会显示该用户删除前的用户id。
  • 第四列:当前文件所属的用户组。
  • 第五列:若是文件则代表该文件的大小,若是目录则代表该目录的大小(不包括目录下的子目录和文件的大小)。
  • 第六列:该文件最近修改或者查看的时间。
  • 第七列:文件名称。

常见的文件类型

在Linux系统中,内核为每一个新创建的文件分配一个inode,保存在索引节点里,访问文件的时候,索引节点被复制到内存,从而实现文件的快速访问

普通文件:文件属性符号(第一个符号) -  图像工具、文档工具、归档工具;

目录文件:文件属性符号 d  ;

设备文件:/dev目录下的设备文件 ;

字符设备文件:文件属性符号 c   接收字符流,打印机和终端;

块设备文件:  文件属性符号 b   随机读写,如磁盘;

管道文件/FIFO文件:文件属性符号p   一头流入,从另一头流出;

链接文件 删除不会影响源文件

  • 软链接 第一个符号l,对软链接进行编辑,自动把操作转换为源文件的操作
  • 硬链接 删除源文件,硬连接依然存在,忘记自己是硬链接件,还是可以打开文件

常见目录及其用途

目录 描述
/ 根目录
/home 用户目录的宿主目录,存放普通用户的数据
/bin 存放普通的可执行命令
/sbin 存放root使用的系统管理程序
/dev 设备文件保存目录
/mnt和/media 手动/自动挂载的设备目录目录
/boot 启动目录,用来存放与Linux系统启动有关的程序
/proc 虚拟目录,系统内存映射
/opt 可选程序的安装目录
目录 描述
/var 存放经常变化的数据以及日志文件
/etc 配置文件保存目录
/usr 用来存放Linux系统中的应用程序
/lost+found 存修复或损坏的文件
/srv 存特定服务所需文件的目录
/selinux SELinux相关

常见操作

  1. cp -r dir dir 将目录中的所有文件以及子目录复制到另一个目录中
  2. mv 可以用来改名
  3. pwd 工作path
  4. rm -df / rm -rf 差别不大 递归删除
  5. wc 行数单词数字符数**

硬链接软链接

Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除

所以即使执行rm操作,但系统并没有真正删除这个文件,只是删除了指向inode的一个链接

所以删除原文件,还是可以通过硬链接打开“被删除“的文件

软链接文件

软链接又称为符号链接,这个文件包含了另一个文件/目录的路径名。

用“ls -l”命令查看某个文件的属性,可以看到有类似“lrwxrwxrwx”的属性符号,其属性第一个符号是“l”,这样的文件在 Linux系统中就是软链接文件。会有断链的问题

可以做不同分区的链接

使用频率更高

可以看成快捷方式?

ln -s a b//b为a的软链接

硬链接文件

硬链接是一个指针,指向文件索引节点,系统并不为它重新分配inode。可以用ln命令来建立硬链接。硬链接节省空间,也是Linux 系统整合文件系统的传统方式。

硬链接文件有两个限制:

  • 不允许给目录创建硬链接;(但是软连接中可以为一个目录创建一个快捷方式)
  • 只有在同一文件系统中的文件之间才能创建硬链接。(软链接可以跨文件系统)

ln a b//b为a的硬链接

硬链接和软链接的区别

  • 硬链接记录的是目标的inode,软链接记录的是目标的路径。
  • 软链接就像是快捷方式,而硬链接就像是备份(不恰当)。
  • 软链接可以做跨分区的链接,而硬链接由于inode的缘故,只能在本分区中做链接。所以,软链接的使用频率要高得多。
  • 软连接可以对一个不存在的文件名进行连接 。
  • 软连接可以对目录进行连接。

Ch5 Linux常用操作命令

文本显示和处理命令

cat命令可以显示文本文件内容,或把几个文件内容附加到另一个文件中。

cat -n textfile1 > textfile2//加上行号重定向

cat >mm.txt<<EOF//创建并且编辑mm.txt直到EOF

more命令可以分页显示文本文件的内容。

more -2 xx.txt//一次两行

less命令和more相同,可以回卷显示文本文件的内容。

head命令可以显示指定文件的前若干行文件或者若干个字符(-c)内容。

tail命令可以查看文件的末尾数据。

sort命令可以对文件中的数据进行排序,并将结果显示在标准输出上。(但是并不改变来源中的内容)

sort –r 倒序排序

uniq命令将重复行从输出文件中删除

cut命令可以从文件的每行中显示出选定的字节、字符或字段。

comm命令可以比较两个已排过序的文件,并将其结果显示出来。

comm -12 相同行

diff命令可以逐行比较两个文本文件,列出其不同之处。它比comm命令完成更复杂的检查。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。

comm是只要两个文件都包含了,就是相同的,而diff必须在同一行才相同,并且comm要排序,diff不需要

文件和命令查找命令

grep命令可以查找文件中符合条件的字符串。

find命令可以将文件系统中符合条件的文件或目录列出来,可以指定文件的名称、类别、时间、大小以及权限等不同信息的组合,只有完全相符的文件才会被列出来。

find . -ctime -20//最近二十天更改过的文件

find / -name

.conf//以conf为扩展名的文件

locate命令用于在数据库中查找文件。比find命令的搜索速度快,它需要一个数据库,这个数据库由每天的例行工作(crontab)程序来建立。当建立好这个数据库后,就可以方便地搜寻所需文件了。

whereis命令可以查找指定文件、命令和手册页的位置。

(与man比较:显示文件、命令、函数的手册页内容)

file命令可以查询指定文件的文件类型。

whatis [命令]可以查询指定命令的功能。

which [命令]可以显示可执行命令的路径和它的别名。

uname:显示计算机及操作系统相关信息

uname –r //显示系统内核版本

uname –n //显示计算机主机名

uname –m //显示计算机硬件类型

uname –a //显示全部信息

hostname:显示或修改计算机主机名

dmesg:显示计算机开机信息

cal:显示日历信息

date:显示和设置系统日期和时间

date 0202191428//设置计算机日期和时间为2028年2月2日19点14分。

date +’%r%a%d%h%y’

date -s 240414//设置计算机时间

 hwclock -w//以系统时间更新硬件时间

 hwclock -s//以硬件时间更新系统时间

echo  echo命令可以在计算机显示器上显示一段文字,一般起到一个提示的作用。或者把信息输出到文件

mesg:设置其他用户发送信息的权限

wall:对全部已登录用户发送信息

write:向用户发送消息

clear:清除计算机屏幕上信息

sync:将缓冲区内的文件写到硬盘中

uptime:显示系统已经运行的时间

last:显示近期用户登录情况

Ch6 Shell编程

常见问题

1. 简述简单Shell程序的创建过程

  • 创建文件、设置可执行权限、执行shell程序
  • 创建文件、使用bash命令执行程序

2. 简述执行Shell程序有那些方法

  • bash Shell程序文件名
  • bash < Shell程序名
  • chmod +ux Shell程序文件名//Shell程序变成可以执行的文件
    • Shell程序文件名//直接运行
  • source Shell程序文件名或者 . Shell程序文件名

Shell程序创建

  1. 通常情况下,从命令行每输入一次命令就 能够得到系统响应,如果需要一个接着一个地输入命令才得到结果的时候,这样的做法效率很低。使用Shell程序或者Shell 脚本可以很好地解决这个问题。
    1. 作为命令语言互动式地解释和执行用户输入的命令是Shell的功能之一,Shell还可以用来进行程序设计,它提供了定义变量和参数的手段以及丰富的过程控制结构。使用Shell编程类似于使用DOS中的批处理文件,称为Shell脚本,又叫做Shell程序或Shell命令文件。
    2. Shell程序就是放在一个文件中的一系列 Linux命令和实用程序,在执行的时候,通 过Linux系统一个接着一个地解释和执行每个命令
  2. 创建示例
    1
    2
    3
    4
    5
    #!/bin/bash
    #filename:date
    echo "Mr.$USER,Today is:"#echo后面有变量就要加双引号
    echo `date`
    echo Whish you a lucky day !
  3. 修改权限
    1
    2
    3
    4
    5
    6
    7
    chmod u+x /root/date
    ls -l /root/date
    # -rwxr--r--. 1 root root 88 6月 3 05:37 /root/date
    /root/data
    #Mr.root,Today is:
    #2012年 06月 03日 星期日 05:37:34 CST
    #Whish you a lucky day !
  4. 如果不设置权限,可以用bash来运行

bash /root/date 

Shell 变量

  1. Shell程序采用$var的形式来引用名为var的变量的值
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    echo $HOME
    /root
    echo $PWD
    /root
    echo $PS1
    [\u@\h \W]\$
    echo $PS2
    >
    echo $PATH /usr/lib/ccache:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin [root@rhel ~]# echo $TERM
    vt100
    echo $UID
    0
  2. 用户定义的变量
    1. 变量名=变量值/等号两边一定不能留空格,如果变量本身就有空格,那么就用双括号括起来
  3. 位置参数:程序名之后输入的参数,第一个在程序中 $1 ,依次类推, $0 是文件名
  4. 预定义变量

image.png

  1. 参数替换
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var="hello"
    echo $var ${title-"somebody"}!//如果有参数,那么就变量等于参数,每有参数,那么变量等于word
    hello somebody!
    echo $var ${title+"somebody"}!//如果有参数,word替换变量
    hello !
    echo $var ${title?"title is null or empty"}! //出错提示
    bash: title: title is null or empty!
    echo $var ${title="tom and jerry"}!//如果有参数,那么就变量等于参数,每有参数,那么变量等于word,参数等于word
    hello tom and jerry!
    echo $var ${title+"somebbody"}!//title不为空,
    hello somebbody!

变量表达式

  1. test是Shell程序中的一个表达式,通过和Shell提供的if等条件语句相结合可以方便的测试字符串,文件状态和数字 test xxx 

字符串比较

1
2
3
4
5
6
7
8
str1=abcd
test $str1 = abcd
echo $?
0
str=abcd
test $str-n
echo $?
0

数字比较

1
2
3
4
5
int1=1234 
int2=01234
test $int1 -eq $int2
echo $?
0

source命令和shell scripts的区别是,source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把环境变量的设置命令写进scripts中,就只会影响子shell,无法改变当前的bash,所以通过文件设置环境变量时,要用source命令

目前流行的Shell有sh,csh,ksh,tcsh和bash等

Shell部分

1
2
3
4
5
6
7
8
#!/bin/bash 求所有输入的数的和
#filename bash3t
sum=0
for int in $*
do
sum=`expr $sum + $int`
done
echo $sum
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
#filename:za
#Display a menu
echo _
echo "1 Restore"
echo "2 Backup"
echo "3 Unload"
echo
#Read and excute the user's selection
echo -n "Enter Choice:"
read CHOICE
case "$CHOICE" in
1) echo "Restore";;
2) echo "Backup";;
3) echo "Unload";;
*) echo "Sorry $CHOICE is not a valid choice"
exit 1
esac

Ch7 用户和组群账号管理

用户类型

在Linux系统中主要有root用户、虚拟用户和普通用户这3类用户。

通过UID来标识。

每个用户类型的权限和所能完成的任务也不同

root用户也被称为超级管理用户。UID为0,在系统中的每个文件、目录和进程都归属于某一个用户,没有用户许可,其他普通用户都不能操作,除了root用户

虚拟用户是内置用户,不具备登录系统的能力,但却是系统运行不可缺少的用户 bin,daemon,adm,ftp,mail;UID为1-999

普通用户:只能操作自己目录内的文件,UID为1000~60k

组群

具有某种共同特征的用户集合就是组群。通过组群可以集中设置访问权限和分配管理任务。

比如把某一用户加入到root组群,那么 这个用户就可以浏览root用户主目录的文件,如果root用 户把某个文件读写执行权限开放,root组群的所有用户 都可以修改此文件;如果是可执行的文件,root组群的用 户也是可以执行的。

分类

  1. 私有组群标准组群
    1. 私有:创建的时候没有制定,同名的组群,只包含这一个用户
    2. 标准:创建的时候制定的组群,
  2. 主要组群次要组群
    1. 登陆后所属的组群
    2. 附加组群

常用配置文件的特定行

/etc/passwd

是系统识别用户的一个文件,Linux系统中所有的用户都记录在该文件中。用户登录系统的时候时候,首先检查这个文件看是否有这个账户,然后确定UID,通过UID确定身份,最后读取/etc/shadow中对应的秘密

一行有7个段位,每个段位冒号分隔。

用户名 口令 用户标识号UID-唯一 组群标识号GID-唯一 用户名全称 主目录 登录Shell
zhangsan x 1000 1000 张三(用户名全称指用户名描述,可以不设置) /home/zhangsan /bin/bash

/etc/shadow

是/etc/passwd文件的影子文件,两个文件是对应互补的。

内容包括用户及加密的口令及其他/etc/passwd不能包括的信息,比如用户账号的有限期限等。(他们的权限不同)

一行有9个段位,每个段位冒号分隔。

用户名 加密口令 用户最后一次更改口令的日期 口令允许更换前的天数 口令需要更换的天数 口令更换前警告的天数 账户被取消激活前的天数 用户账户过期日期 保留字段

/etc/group

是用户组群的配置文件
内容包括用户和用户组群,并且能显示出用户是归属哪个用户组群或哪几个用户组群。

组群名 组群口令 组群标识号 组群成员
这里的 “x” 仅仅是密码标识,

GID为0的组群是root组群;GID从1000开始,预留1000个

/etc/gshadow

是/etc/group的加密文件,这两个文件是对应互补的。

组群名 组群口令 组管理员 组群成员
此处存储加密后的口令,如果没有设置,则为!

image.pngimage.png

账户信息显示

finger命令可以显示用户账户的信息。
groups命令可以显示指定用户账户的组群成员身份。
id命令可以显示用户的ID以及该用户所属组群的GID。
w命令可以详细查询已登录当前计算机的用户。
who命令可以显示已登录当前计算机用户的简单信息。

Ch8 磁盘和文件系统管理

在Linux系统中,如果需要在某个磁盘上存储数据,则需要将磁盘进行分区,然后创建文件系统,最后将文件系统挂载到目录下才可以。
在安装Linux系统后需要添加更多的交换空间,可以通过添加一个交换分区或添加一个交换文件来实现。

分区回顾

硬盘分区一共有3种:主分区、扩展分区和逻辑分区。扩展分区就是逻辑驱动器的容器,只有主分区和逻辑驱动器才能进行数据存储

分区的命名

硬盘类型用sd/hd/vd(虚拟盘)表示,硬盘名顺序通过abc,分区用1234表示,主分区为 14 中的一段,扩展分区为 24 分区之间的剩余。
逻辑分区是在扩展分区的再分,命名从5开始。主分区最多有4个(若多于4个,那么除了前三个剩下的必然是逻辑分区)**

格式化

定义:

格式化是指对磁盘分区进行初始化的一种操作,这种操作通常会导致 现有的分区中所有的数据被清除。就是把一张空白的磁盘划分成一个个小区域并编号,供计算机储存和读取数据使用,也就是在磁盘中建立磁道以及扇区

文件系统

Linux系统最常用的几种文件系统

  1. ext3/ext4
  2. JFS
  3. XFS(推荐,它是CentOS所默认的分区文件系统)

image.png

创建文件系统整个过程

使用fdisk命令在硬盘上创建分区。

Linux系统使用fdsik命令能将磁盘划分成为若干个区,同时也能为每个分区指定分区的文件系统。

使用mkfs命令在分区上创建文件系统。

partprobe 避免了重启系统,可以直接让内核重新给i能读取分区信息

1
mkfs -t ext4 /dev/sda5

使用mount命令挂载文件系统,或修改/etc/fstab文件使得开机自动挂载文件系统。

mount命令可以将某个分区、光盘、软盘或是U盘挂载到Linux系统的目录下。
mount [选项][设备名称][挂载点]

使用umount卸载文件系统。

umount命令可以将某个分区、光盘、软盘或是U盘进行卸载。
umount [选项][-t <文件系统类型>][文件系统]
命令语法:

1
2
3
4
5
6
mkdir /mnt/kk
mount /dev/sda5 /mnt/kk
#以只读方式创建
mount -o ro /dev/sda5/mnt/kk
df#显示磁盘空间的使用情况
umount /dev/sda5

查看分区挂载情况

1
2
3
df
mount -s
cat /etc/mtab

自动挂载

挂载

/etc/fstab是一个配置文件,它包含了所有分区以及存储设备的信息。
root用户才可以编辑该文件。
可以通过修改/etc/fstab文件实现开机自动挂载文件系统。
**把末尾的0 0 修改为 1 2 **
各段含义:
设备名或设备UUID号 |挂载点 |文件系统格式|挂载参数 |转储选项|文件系统检查选项

设备名或设备UUID号 挂载点 文件系统格式 挂载参数 转储选项 文件系统检查选项
/dev/sda5 /mnt/kk xfs defaults 1 2

查看uuid

ls –l /dev/disk/by-uuid

创建交换分区

Linux系统中的交换空间在物理内存被用完时使用。 如果系统需要更多的内存资源,而物理内存已经 用完,内存中不活跃的页就会被转移到交换空间 中。虽然交换空间可以为带有少量内存的计算机 提供帮助,但是这种方法不应该被当做是对内存 的取代

1
2
3
4
5
6
7
8
9
mkswap /dev/sda5
free#看不到
swapon /dev/sda5
free# 显示系统的物理内存和swap的使用情况。
cat /proc/swaps
echo "/dev/sda5 swap swap defaults 0 0" >> /etc/fstab
swapoff /dev/sda5
vim /etc/fstab #删除加的东西
#### swapfile同理

Ch9 Linux日常管理和维护

RPM

RPM软件包管理器是一种开放的软件包管理系统

1
2
3
4
5
6
7
8
9
10
11
#安装、卸载、刷新、升级、查询
rpm -ivh xxx 安装
rpm -e xxx 卸载
rpm -Uvh xxx #升级
rpm -Fvh xxx #刷新
rpm -q xxx 有没有安装
rpm -qa
rpm -qi xxx 描述信息
rpm -ql xxx 文件列表
rpm -qR xxx 依赖要求
rpm -qf xxx #查询属于那个软件包

yum安装RPM

自动化地升级、安装和删除RPM软件包,收集RPM软件包的相关信息, 检查依赖性并且一次安装所有依赖的软件包,无 须繁琐地一次次安装。

yum的关键之处是要有可靠的软件仓库,软件仓 库可以是HTTP站点、FTP站点或者是本地软件 池,但必须包含rpm的header,header包括了 RPM软件包的各种信息,包括描述、功能、提供 的文件以及依赖性等

1
2
3
4
yum install xxx
yum remove xxx
yum update xxx
yum info xxx

tar命令,两组:创建压缩包,解压缩包,两种选项,每组下面各有4个字母

使用tar命令可以将文件和目录进行打包或压缩以做备份用。
打包是指将许多文件和目录变成一个总的文件,压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
Linux系统中很多压缩程序只能针对一个文件进行压缩,这样当需要压缩一大堆文件时,就得先借助其他的工具将这一大堆文件先打成一个包,然后再用原来的压缩程序进行压缩。tar+gzip  tar+bzip2
image.png

Ch10 权限与所有者

在Linux系统中,每种用户都有对文件或目录的读取、写入和执行权限。只有系统管理员和文件的所有者才可以更改文件或目录的权限。

权限与用户

  1. 通过设定权限可以限制或允许以下3种用户访问:
    • 文件的所有者、
    • 文件所有者所在组的同组用户、
    • 系统中的其他用户。
  2. 权限:
    1. r
      1. 可以读取文件内容
      2. 可以浏览目录
    2. w
      1. 可以修改文件内容
      2. 可以删除,移动目录内的文件
    3. x
      1. 可以执行文件
      2. 可以进入目录
  3. -rwxr—w-
    1. 用户所有者拥有三种权限
    2. 组群所有者只能读
    3. 其他用户只能写

文件管理器更改权限

文字设定法

u表示该文件的所有者,g表示与该文件的所有者属于同一个组的用户,o表示其他用户,a表示以上三者;

+表示增加指定权限,-表示取消指定权限,= 表示设定权限等于指定权限;

1
2
3
chmod u+w a
chmod g-r a
chmod o=w a #其他用户只能写

数字设定法

r w x - 对应数值 4读取权限 2写入权限 1可执行权限 0没有权限

一共三位,分别表示所有者、所在群组其它成员和其它用户的权限之和

1
2
chomod 777 a
chmod 7 a #其他用户拥有读取、写入和执行的权限 相当于007

三个特殊权限

  1. SUID:一个可执行文件是以这个文件的用户所有者来执行 对应u 4000
  2. SGID:一个可执行文件是以组群所有者身份来执行 对应g 2000
  3. Sticky:对目录执行Sticky后,只有文件所有者才能删除和移动 对应o 1000

所有权

chown命令可以更改文件和目录的所有者和用户组

1
2
3
4
chown newuser a
chown .newuser a #用户组
chown root.newuser a
chown -R newuser.newuser /root/b

Ch11 Linux日常管理和维护

进程

Linux系统上所有运行的内容都可以称为进程。正在执行的一个或者多个相关进程称为一个作业

进程是在自身的虚拟地址空间运行的一个单独的程序。

三种进程:交互式进程、批处理进程、守护进程

程序只是一个静态的命令几何,不占系统的运行资源,进程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序

进程查看

ps命令是最基本同时也是非常强大的进程查看命令。

使用该命令可以确定有哪些进程正在运行以及进程运行的状态、进程是否结束,进程有没有僵死,哪些进程占用了过多的资源等。

使用ps命令可以用于监控后台进程的工作情况。

1
2
3
4
5
ps -e 显示所有进程
ps -aux 显示所有不带控制台终端的进程
ps -ax|grep less 查看进程是否在进行
ps -u xxx 查看xxx的进程
ps -t tty1 显示tty1终端下的进程

top命令:显示当前正运行的进程及重要信息,包括它们的内存和CPU用量。(它其实是多种功能的复合,可以视作Windows的任务管理器)

进程停止

终止前台命令,[Ctrl+C]键

终止后台进程, kill命令

先用ps命令获得进程号,然后用kill命令终止

不能终止,可使用更有效的kill -9命令

kill -9 5975:强制杀死进程号为5975的进程

进程启动

两种途径:手工启动和调度启动

1.手工启动

  • 前台启动
  • 后台启动—在命令结尾加上一个 “&”号

2.调度启动

  • 事先进行设置,根据用户要求自行启动。任务可以被配置在指定的时间、指定的日期或系统平均负载量低于指定的数量时自动运行

进程挂起与恢复

挂起:[Ctrl+Z]键

显示shell作业清单:jobs命令

恢复:fg命令将挂起的作业放回前台执行

bg命令将挂起的作业放回后台执行

任务计划

在固定的时间上触发某个作业,需要创建任务计划,按时执行该作业cron和at
cron命令被用来调度重复的任务
at命令被用来在指定时间内调度一次性的任务

  1. cron实现自动化

    /etc/crontab文件实现

    cron守护进程可在无需人工干预的情况下调度执行重复任务的守护进程

    文件格式:分钟 小时 日期 月份 星期 执行的命

  2. crontab命令实现

    crontab [-u 用户名] –e //root用户创建或编辑crontab

    crontab [-u 用户名] –l //root用户列出crontab文件

    crontab [-u 用户名] –r //root用户删除crontab文件

    crontab –e       //普通用户创建或编辑crontab

    crontab –l       //普通用户列出crontab文件

    crontab –r       //普通用户删除crontab文件

    crontab   xxx //恢复丢失的crontab文件

    编辑和创建的命令是一样的。但是编辑时root用户多了一个用vi直接编辑/var/pool/cron/文件的选择,普通用户是打不开的。

  3. 使用at实现自动化

    一旦一个作业被提交,at命令将会保留所有当前的环境变量,包括路径,该作业的所有输出都将以电子邮件的形式发送给用户。

    和crontab一样,root用户可以通过/etc目录下的at.allow和at.deny文件来控制哪些用户可以使用at命令

系统启动

  1. BIOS自检

计算机在接通电源之后首先由BIOS进行POST自检,然后依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入引导块

  1. 启动GRUB 2

GRUB 2 是引导加载程序,用于引导操作系统启动

  1. 加载内核

加载内核映像到内存中

  1. 执行systemd进程

systemd进程是系统所有进程的起点,内核在完成核内引导之后,即在本进程空间内加载systemd程序,它的进程号是1,失去了父进程的子进程就都会以systemd作为他们的父进程

  1. 初始化系统环境

使用systemd作为引导管理程序,之后的引导过程将由systemd完成

  1. 执行/bin/login程序

login程序会提示使用者输入账号及密码,接着编码并确认密码的正确性, 如果账号与密码相符,则为使用者初始化环境,并将控制权交给shell,即等待用户登录。

维护GRUB

GRUB 2采用模块化动态加载的思想,相比GRUB来讲不 用在构建时将所有功能都加入

Ch12 Linux网络基本配置

网络命令

image.pngnetstat:显示网络状态信息

netstat -r :显示路由表信息

arp:增加、删除和显示arp缓存

tcpdump:**可以监视TCP/IP连接,并直接读取数据链路层的数据包头,可以指定哪些数据包被监视以及哪些控制要显示格式(抓包)

tcpdump -i eno16777736

管理网络服务的3种方式

启动或停止Linux系统服务

systemctl命令

1
systemctl 选项 [服务名].service  `.service` 可以省略。

命令中各选项的含义如下。

start:表示启动服务。

stop:表示停止服务。

status:表示查看服务状态。

restart:表示重新启动服务。

reload:表示加载服务配置文件。

enable:表示开机自动启动服务。

disable:表示开机禁止启动服务。

is-enabled:表示查看服务是否开机自动启动。

1
list-units --type=service:显示所有已启动的服务。

chkconfig和service命令

允许在不同运行级别启动和关闭服务的命令行工具

service命令控制服务可以马上生效

chkconfig命令控制服务需要等计算机重新启动后才会生效

提高Linux系统安全性的一些方法

部署防火墙 关闭不用的服务和端口
严格禁止设置默认路由 口令管理
分区管理 防范网络嗅探
完整的日志管理 使用安全工具软件(比如说SELinux)
使用保留的IP地址 部署Linux防病毒软件
加强登录安全 安装补丁

Ch13 远程连接服务器配置

  • 使用ssh命令允许用户在远程计算机上登录并执行相关命令,建立在应用层和传输层基础上的安全协议
  • OpenSSH(Open Secure Shell)是SSH的替代软件,而且是免费的。默认使用RSA密钥,它采用安全、加密的网络连接工具代替 telnet、ftp、rlogin、rsh和rcp工具。
  • VNC,虚拟网络计算,可以用图形界面的方式连接到远程服务器,以达到远程控制。
  • 配置NFS服务器可以让客户端挂载服务器上的共享目录,可以很方便地实现在同一网络上的多个用户间共享目标。

ssh

ssh -l [用户名] [远程主机IP地址]

ssh [用户名]@[远程主机IP地址]

/etc/ssh/sshd_config

scp

把本地文件传输到远程主机:

scp [本地文件] [用户名@远程主机IP地址:/目标文件]

把远程文件传输到本地主机:

scp [用户名@远程主机IP地址:/源文件] [本地文件]

sftp

sftp [用户名@远程主机IP地址]

VNC

服务端的VNC server和客户端的VNC viewer。用户需先将VNC server安装在被远程操控的计算机上后, 才能在主控端执行VNC viewer进行远程操控。

Ch14 NFS服务器配置

NFS是一个文件系统, 而RPC是负责信息的传输。这样NFS服务器端与NFS客 户端才能由RPC协议来进行端口的对应。NFS主要管理 分享出来的目录,而至于文件的传递,就直接将它交给 RPC协议来运作。
字符界面配置NFS服务器

网络上的多个用户间共享目录和文件很有用途

在NFS服务器的主要配置文件/etc/exports中加一行:

1
[共享目录] [主机] (参数)

主机:限定哪些计算机可以访问。

主机名或是该计算机的IP地址/使用通配符指定的域名/IP网络/Netgroups;

参数如 rw,sync,ro

开机自动挂载192.168.0.100:/it /mnt/it nfs defaults 0 0 

补充内容:LVM逻辑卷

LVM机制的基本概念

Logical Volume Manager,逻辑卷管理

  • 它是Linux环境下对磁盘分区进行管理的一种机制

  • 屏蔽了底层磁盘布局,便于动态调整磁盘容量
    • 需要注意:/boot分区用于存放引导文件,不能应用LVM机制

PV(Physical Volume,物理卷)

整个硬盘,或使用fdisk等工具建立的普通分区,包括许多默认4MB(可设置)大小的PE(Physical Extent,基本单元)

VG(Volume Group,卷组)

一个或多个物理卷组合而成的整体。

LV(Logical Volume,逻辑卷)

从卷组中分割出的一块空间,用于建立文件系统。

创建LVM分区

新建空分区

1
2
fdisk -c /dev/vdb
n

初始化分区(创建PV物理卷)

1
2
3
4
lvm
pvcreate /dev/vdb2
pvcreate /dev/vdb3
pvdisplay

创建卷组

1
2
3
vgcreate –s [块大小] [卷组名] [物理卷1][物理卷2] [设备名]
vgcreate -s 8M wgroup /dev/vdb2
vgdisplay

创建逻辑卷

1
2
3
lvcreate -n [逻辑卷名] –L [逻辑卷大小] [已存在卷组名]
lvcreate -n lv1 -L 100m wgroup
lvdisplay

把大写的L换成小写的l时,后面逻辑卷大小对应的填VG中块的个数。当然无论如何,到最后大小都会是逻辑卷大小的整数倍。

创建文件系统及挂载

这一部分和前面的一样。但是请注意逻辑卷的设备名。它是/dev/[卷组名]/逻辑卷名

1
2
fdisk -l
mkfs -t ext4 /dev/wgroup/lv1

管理逻辑卷

扩大/缩小:请注意操作顺序!

扩大时先扩大逻辑卷,然后再扩大文件系统空间;缩小时先缩小文件系统空间后缩小逻辑卷(如果有必要的话)image.png

1
2
lvextend -L +[大小] /dev/[卷组名]/[逻辑卷名]
lvreduce -L +[大小] /dev/[卷组名]/[逻辑卷名]
1
resize2fs –p /dev/[卷组名]/[逻辑卷名]

注意到缩小文件系统时必须要先将逻辑卷卸载并确定数据使用量!(扩大文件系统时不用)

1
2
umount /dev/[卷组名]/[逻辑卷名]
fsck -f /dev/[卷组名]/[逻辑卷名]

快照卷

快照是临时保留所更改的逻辑卷的原始数据的逻辑卷。快照提供原始卷的静态视图,从而能够以一致状态备份其数据。但是快照本身是不断地在变化的

确定快照的大小

  1. 预期更改率 2. 所需快照时间
1
2
3
4
5
6
7
8
lvcreate –s –n snaplv–L 20M /dev/vgname/lvname
mkdir/snapmount
mount –ro /dev/vgname/snaplv/snapmount
# 验证快照状态
lvscan /dev/vgname/lvname
# 卸载快照
umount /snapmount
lvremove /dev/vgname/lvname