Linux系统管理(完整)

一、Linux初识

Linux系统用在哪些地方?自由软件中的Free是什么意思?

Linux之父和GNU自由软件之父的关系?
GNU/Linux => Linux
什么是Linux内核版本?什么是Linux发行版本?

有哪些Linux发行版适合服务器和工作站?红帽与CentOS有什么关系?为什么CentOS的应用最广泛?

如何在虚拟机上安装CentOS ?如何在真实电脑上安装Linux系统?

什么是硬盘分区?硬盘分区有哪些规定?硬盘分区完成后,为什么还要格式化分区?
Linux上常用的文件系统有哪些?
什么是swap交换分区?(SWAP)这个分区有什么用?什么是 / 根分区?(EXT4)

如何才能让Linux做我们想让它做的事情?什么是Shell ?有什么用?图形Shell?命令行Shell?
Bash Sehll

~ 是什么意思?它代表了当前用户的家目录。
# 代指根用户, $ 代指普通用户。
上下箭头,可以查看Shell的历史命令。
一个Tab,自动补齐Shell命令。
连续两次按下Tab,查看包含当前字符的所有命令。

如何查看当前的用户信息和系统信息?

whoami
whoami  --help
whoami  --version

如何输出内容?

echo  'string'

如何使用nano文本编辑器?如何保存nano文件?

nano
ctrl + O  //保存
ctrl + G  //查看nano的帮助文档
ctrl + X  //退出帮助文档
再按 ctrl + X 退出nano

如何使用Shell命令的帮助文档?为什么要使用这个帮助文档?

man  who        // 查看 who命令的帮助文档
在man帮助文档中,上下箭头用于向上或向下滚动,pageUp / pageDown用于向前向后翻页。
在man帮助文档中,输入 /string  用于查找当前光标之后的string字符串,按n跳转到下一个匹配处,N跳转到上一个匹配处。按 q 退出man帮助文档。
man 1 read    // 查看模块1中的read命令
man 2 read    // 查看模块2中的read命令

生产环境下的Linux,如何正确地重启与关机?
不合理的重启或关机,有哪些危害和后果?
注意:不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中。

shutdown    // 只有根用户才能使用这个命令
shutdown -h 10         // 10分钟后关机
shutdown -h 00:00     // 0点0分时关机
shutdown -h now      // 立即关机
shutdonw -h 10 "关机原因"   // 关机原因会被下发至所有的用户
shutdown -c             // 取消关机
shutdown -r 10  "重启原因"     // 重启Linux

二、管理文件

Linux的目录结构是怎样的?什么是Linux标准架构规范?树形目录?
根目录下哪12个目录是必须的?

pwd         // 查看工作目录
cd          // 切换工作目录
.           // 指代当前目录
..  // 指代父级目录
-   // 指代上一次访问过的工作目录
~   // 指代当前用户的家目录
mkdir   // 创建目录
mkdir  -p   // 创建嵌套目录
rmdir   // 删除空目录

两种路径:绝对路径以/开头,相对路径dir 或者 ./dir等

如何列举文件、查看文件属性以及修改文件属性?

ls  // 列举文件
ls -a   // 列出所有文件
ls -l   // 列表文件并展示出文件相关属性

什么是文件访问权限?
什么是文件所有者?什么是从属用户组?什么是其它用户?
什么是读权限、写权限、执行权限?

Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。

十字符的文件属性:


Linux系统管理(完整)_第1张图片
文件属性.png
drwxrw-r-x
// 第一个字符代码文件类型,-普通文件,d目录,c字符设备文件,b块设备文件,l符号链接文件。
// 第二至四是文件所有者对该文件的权限属性。
// 第五至七是用户组对该文件的权限属性。
// 第八至十是其它用户对该文件的权限属性。

7 = 111 = rwx
6 = 110 = rw-
5 = 101 = r-x
4 = 100 = r--
3 = 011 = -wx
2 = 010 = -w-
1 = 001 = --x
0 = 000 = ---
756 = 111101110 = rwxr-xrw-

第0位确定文件类型。
第1-3位确定属主(该文件的所有者)拥有该文件的权限。
第4-6位确定属组(所有者的同组用户)拥有该文件的权限。
第7-9位确定其他用户拥有该文件的权限。

第1、4、7位表示读权限,如果用"r"字符表示,则有读权限,如果用"-"字符表示,则没有读权限;
第2、5、8位表示写权限,如果用"w"字符表示,则有写权限,如果用"-"字符表示没有写权限;
第3、6、9位表示可执行权限,如果用"x"字符表示,则有执行权限,如果用"-"字符表示,则没有执行权限。

属主权限owner、属组权限group、其它用户权限others

  1. 对于 root 用户来说,一般情况下,文件的权限对root用户不起作用。
  2. 对于文件来说,它都有一个特定的所有者,也就是对该文件具有“所有权”的用户。
  3. 在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。
  4. 文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。
  5. 因此,Linux系统按文件所有者(属主权限)、文件所有者同组用户(属组权限)和其他用户(其它用户权限)来规定了不同的文件访问权限。

如何切换用户?

su - username   // 切换用户

如何修改文件属性?

如何修改文件的所有者属性? chmod  700  hello.sh
如何修改文件的用户组属性?chown  group  hello.sh

如何拷贝文件?

cp  /tem/file.txt   // 拷贝文件
cp  /tem/file.txt  ~/file1.txt   // 拷贝并重命名文件
cp  /file1  /file2  /file3  ~    // 同时拷贝多个文件
cp  -r  /dir  ~         // 拷贝一个文件夹

如何移动文件?

mv
它的用法和cp相似

如何删除文件?

rm ./file.txt
rm -R  ./dir    询问式删除
rm -fR  ./dir   直接删除

如何创建文件?

touch  ./empty

如何创建文件的符号链接和硬链接?
什么是符号链接?它类似windows系统上的桌面快捷方式,它用于快捷地指向某个文件。

ln  -s  ./file  ./file_link

可以为任何文件创建符号链接,如果符号链接的源文件被删除,将导致符号链接破裂。

linux中的文件是如何存储的?
什么是文件的inode和datablock?(inode相当于书的目录,datablock相当于是书的内容章节。对一个文件来说,它分两部分存储,其唯一的指引存放在inode中,它实际数据放在datablock中。)

ls -il  // 查看文件的inode
ln ./file1  ./file_hard   // 创建硬链接

删除源文件,硬链接不会破裂。
两个建议:1、不要给文件夹创建硬链接。2、不要跨硬盘sd创建硬链接。

如何打包文件?即把多个文件或者一个目录,打包成一个大文件。tar命令不会压缩文件。

tar  -cf  打包的文件名  [要打包的文件列表|目录]
tar  -tf  打包文件名  // 查看打包中的文件列表
tar  -f  打包文件名  --delete file  // 删除打包中的某个文件
tar  -f  tar1  -A  tar2   // 合并两个打包文件
tar  -f  tar1  -r  file   // 向打包文件中添加一个文件
tar  -xf  tar1  -C  ~/dir     // 解包文件

如何压缩文件?

gzip  ./dir.tar     // 压缩文件
gzip  -d  dir.tar.gz    // 解压文件
gzip压缩比: 1 至 9, 默认是6
gzip  -9  ./dir.tar   // 设置压缩比为9

由于gzip命令只能对单个文件进行压缩,所以gzip常和tar命令一起配合使用。
打包+压缩:使用tar先打包多个文件,再使用gzip压缩这个文件。快捷命令: tar -czf sample.tar.gz file1 file2 // 同时打包并压缩
解压+解包:先用gzip先解压文件,再使用tar进行文件解包。快捷命令: tar -xzf sample.tar.gz // 同时解压并解包

如何查找文件?

locate  .tar    // 为了准确性,建议执行 updatedb命令,以更新文件记录的数据库/var/lib/mlocate
find  [查找范围][查找条件][动作参数]
find  /  -name  filename   // 根据文件名进行查找
find  /home  -type  d      // 根据文件类型进行查找
find  /home  -mtime  -3  -ls   // 根据时间属性查找
find  /home  -mtime  +7  -ls
find  /home  -mtime  4  -ls
find  /home  -size  +100k  -ls  // 根据文件大小查找
find  /home  -gid  0  -ls   // 根据用户或用户组查找
find  /root  -perm  754  -ls  // 根据文件属性来查找

多个查找条件进行组合:-a与、-o或、!非
多个查找条件,用圆括号包裹起来即可。
find  /tmp  \(-size +1k  -a  -mmin +10)  -exec  rm  -rf  {}  \;

什么是通配符?

*   指代任意长度的字符串
*.txt   所有的.txt文件
?   指代任意的单个字符
[a-z]  指代从a至z之间的任意一个字符
[m,n,s]  指代中括号中的任意一个字符
{str1,str2,str3} 指代大括号中的任意一个字符串
!   表示取反
[!0-9]  表示除了0-9以外的任意字符

如何查看文本文件的内容?

cat file  // 适合查看较小的文件
less file // 它支持上下箭头翻行、pageUp/PageDown翻页,/str查找,n/N匹配查找,q退出。
head  -n  20  file  // 查看文件的前20行
tail  -n  20  file  // 查看文件的末20行

三、用好重定向和管道

Linux中的输入输出是怎样的过程?

用户输入 -> stdin接收输入指令 -> 执行命令 -> stdout/stderr -> 输出结果至终端

那么什么是输出重定向?(>或>>)输出重定向就是手动地改变stdout/stderr的输出位置,比如把输出结果重定向到一个文件中。

ll  /tmp  1>  ./stdout.txt   // 输出结果会覆盖原文件
ll  /tmp  2>>  ./stdout.txt  // 输出结果会追加到文件末尾
1 指代标准输出
2 指代错误输出
& 指代同时标准输出和错误输出
> 表示覆盖
>> 表示追加

应用举例:
echo -e 'some thing' 1>echo.txt
ll /home 2>>/dev/null    // 把错误结果丢进/dev/null黑洞

那么什么又是输入重定向呢?(<或<<)输入重定向,即可手动改变stdin所接收的命令来源,比如让stdin从文本文件中接收命令。

tr  ''  '\t'  <./fruit.txt
sort  -k2  <

什么是管道?管道就是一种特殊的输入输出重定向。
| 管道操作符,让|左侧的命令输出作为右侧命令的输入,从而形成复杂的管道操作。

ls  -al  /etc  |less         // less用于查看文件内容
ls  -al  /etc  |grep  'ssh'  // grep支持正则表达式的查找
cat  ~/install.log |cut  ''  // cut用于文本切割
wc  -l
ls  -al  ~/cut  -cl|grep  "d"|wc  -l  // wc用于统计

注意:管道不会传递错误输出流

管道机制,很好地体现了Linux设计的三原则:1、一个命令只做一件事。2、命令之间可以进行协作。3、可以处理文件流。

四、用好VI/VIM

vim  -version   // 查看vim版本

vim是一个模式编辑器,在不同的模式下可以干不同的事情。vim有三种模式:一般模式、插入模式、命令行模式。

【一般模式】

i键,进入插入模式
esc键,退出插入模式、进入一般模式。
h/j/k/l键,左下上右移动光标。使用上下左右箭头也可以移动,但不推荐这么做。
x键,删除光标处的字符。
dd,删除一行。
J (shift+j),删除一个换行符。
u键,返回至上一步状态。
ctrl+r,取消u键的撤销操作。
: 进入命令行模式。

【命令行模式】

:wq    // 保存并退出
:q!    // 强制退出,不保存
功能1:设置vim的环境参数
:set all   // 查询vim中所有可以设置的环境参数
:set nu    // 显示行号
:set nonu  // 隐藏行号
功能2:光标移动
gg   // 移动到文件首行
G    // 移动到文件尾行
0    // 移动到当前行首
$    // 移动到当前行尾
3G   // 移动到第3行行首
10$  // 移动到第10行行尾
8i   // 向右移动8个字符
3j   // 向下移动3行
4l   // 向左移动4列
功能3:搜索功能
/str   // 从光标处,向下查找str字符串
n/N    // 向下或向上定位匹配处
功能4:替换功能
语法:n1,n2s/str1/str2/gc
:50,100s/str1/str2/gc   // 把文件第50行-100行之间的str1替换成str2。
:1,$s/str1/str2/gc   // $ 可以表示文件末行。
功能5:复制与粘贴
yy   // 复制光标所在行
8yy  // 复制从光标行开始向下的8行
p    // 把复制的内容粘贴在光标的下一行
功能6:删除行与删除字符
dd   // 删除一行
3dd  // 删除光标开始向下的3行
x    // 删除光标处的字符
20x  // 删除光标开始向后的20个字符
功能7:撤销功能
u    // 撤销上一步
:e!  // 撤销所有的修改操作
功能8:文件另存为
:w filename.bak
功能9:在当前文件中插入另一个文件的内容
: r ./file.txt   // 插入file.txt中的内容
:w   // 保存
功能10:同时打开多个文件
vim file1 file2 file3...   // 同时打开多个文件
:n    // 在多个文件之间向后切换
:N    // 在多个文件之间向前切换
功能11:跨文件复制粘贴
ctrl+v  // 从当前文件进入可视模式
鼠标滑动选中文本块,按下y键完成复制。
n/N     // 进入另一个文件
p       // 粘贴已复制好的文本块
功能12:保存文件并退出vim
:wq

五、用户管理(用户与用户组)

什么是Linux用户?
Linux是通过UID来识别用户,而不是通过用户名来识别身份的,这个UID,即user's id。

三类用户:
系统管理员用户 - root 它的UID=0
虚拟用户 bin/daemon/ftp/mail/nobody等,UID范围是1-499
普通用户 UID从500开始

什么是Linux用户组?
Linux是通过GID来识别用户组的。GID=group's id。
主用户组:一个用户,只能有一个主用户组。
从属用户组:一个用户,可以有多个从属用户组。

如何查看Linux系统中的用户?

id  username   // 用于查看用户的UID和用户组信息等。
id  // 查看当前登录用户的用户信息
finger  username   // 查看用户更多的环境信息
finger  // 显示当前登录用户的环境信息

如何切换用户?

su -l root   // -l 表示切换用户的同时,一起切换shell环境
su - root

从普通用户切换至根用户,需要输入密码。反之,无须密码。

如何创建新用户?
注意:只有根用户才有能力创建新用户。

useradd  newuser   // 创建用户
passwd  newuser    // 为用户设置密码
使用id或finger可以查看当前用户的信息数据。

创建用户,同时修改用户的默认环境参数:
useradd -c 'xx' -u 'xx' -d 'xx' -g 'xx' -G 'xx' -s 'xx'
// -c 用于指定用户描述,-u指定UID,-d指定用户家目录,-g指定用户的主用户组,-G指定用户的其它从属用户组,-s指定用户将要使用的shell环境。

如何修改用户?

usermod -c '' -d '' -g '' -G '' -s '' // 修改用户描述、家目录、主用户组、从属用户组、shell环境、UID等。
usermod -u   // 修改用户UID
usermod -l   // 修改用户名
usermod -L   // 锁定用户,将导致该用户无法再登录
usermod -U   // 解锁用户

如何删除用户?

userdel username   // 删除用户,但不会删除该用户的家目录
userdel -r username  // 删除用户,同时删除用户家目录

注:处在登录状态的用户,是无法被删除的。

如何创建用户组?

注意:只有根用户才能创建用户组。
groupadd groupname   // 创建用户组
groupadd -g 600 groupname  // -g指定GID
usermod -G groupname username  // 向用户组中添加用户

如何修改用户组?

groupmod -g 700 -n name1 name2 // 修改用户组的GID和名称
注意:不要随便修改用户组GID,这可能造成系统混乱。

如何删除用户组?

groupdel groupname
注意:如何当前用户组是某个用户的主用户组,它将无法被删除。

为什么需要让渡根用户的部分权限?
为什么不能把根用户密码告诉其它人?
如何让渡根用户的部分权限?
注:Linux系统默认情况下,只有root用户才能执行sudo命令。/etc/sudoers 是sudo命令的配置文件,该文件只有root用户才能修改。该文件即是一个用户权限的配置文件。

用vim打开/etc/sudoers文件,添加一行 username ALL-(ALL) ALL,保存并退出。即添加了一个可以执行sudo命令的非root用户。

sudo -u root passwd username  // 用非root用户登录,但它可以使用sudo命令。

与用户管理息息相关的四个核心配置文件:
1、/etc/passwd
该文件中保存着系统所有的用户
vim /etc/passwd // 查看该文件,用户列表

2、/etc/shadow
它是/etc/passwd文件的影子文件,它也存储着用户列表的信息,与/etc/passwd文件相互补充。

3、/etc/group
该文件中保存着系统所有的用户组
vim /etc/group // 查看用户组列表

4、/etc/gshadow
它是/etc/group文件的影子文件,它也存储着用户组的相关信息,它与/etc/group文件相互补充。

注意:为了保证系统的安全性,严格不建议手动修改以上四个核心配置文件。

六、硬盘管理

Linux中,所有的设备都是用文件来表示的。

/dev  该目录下,放置的即是系统设备列表文件。
/dev/xxy    // xx表示设备的类型,如sd表示硬盘。y表示这个设备是该设备类型下的第几个设备,取值范围是a-z。如,sdc表示第三个sd硬盘。

Linux中,所有的硬盘分区也都是用文件来表示的。硬盘分区文件也存放在/dev目录下。

/dev/xxyn   // xx表示设备类型。y表示第几个该类型的设备。n表示硬盘分区编号,1-4表示主分区或扩展分区,大于4时表示扩展分区中的逻辑分区编号(逻辑分区的编号从5开始)。例如,/dev/sda6 这表示第一个sd硬盘的扩展分区中的第2个逻辑分区文件。

如何查看硬盘或分区的信息?

fdist -l /dev/sda    // 查看第一块硬盘的信息

如何对硬盘进行分区?
Linux中对硬盘分区有很多命令,但我们使用fdisk。下面将演示对sdb硬盘进行分区:

fdisk  -l  /dev/sdb
fdisk  /dev/sdb         // 进入sdb硬盘,进入之后,就可以使用fdisk的快捷键进行快捷操作了。
n键          // 新建分区
p键  // 选为主分区
1   // 选择分区号(1-4)
+100G   // 设置分区的大小,必须有+号
n键  // 继续新建分区
e键  // 选为扩展分区
2   // 选择分区号
// 分区大小,默认使用剩下的全部磁盘大小
n键  // 继续新建分区
l键  // 选为逻辑分区(逻辑分区从属于扩展分区)
5   // 设置逻辑分区号(默认从5开始)
+64G    // 设置逻辑分区的大小
n键  // 继续新建逻辑分区
l键  // 选为逻辑分区
// 使用默认逻辑分区号
// 使用扩展分区剩余的所有磁盘大小
w键  // 保存上述操作,把分区结果保存至分区表
注意:如果在w保存之前按下了q键,将会退出分区操作,上述所有操作将会丢失。

fdisk  -l  /dev/sdb // 查看sdb硬盘的分区结果

如何修改分区的文件系统类型?

fdisk  /dev/sdb // 进入sdb硬盘
l键  // 查看sdb硬盘所支持的所有文件系统类型
t键  // 进入分区文件系统类型修改模式
6   // 选择分区号为6的逻辑分区
// 输入文件系统类型的代号
w键  // 保存修改结果至分区表

fdisk  -l  /dev/sdb // 查看sdb硬盘下的分区修改结果

如何删除一个分区?

fdisk  /dev/sdb // 进入sdb硬盘
d键  // 进入分区删除操作模式
7   // 选择要删除的分区的分区号,enter即可
// 删除成功后,可以继续新建或修改其它分区

格式化分区:
为什么需要格式化分区?只有格式化分区后,硬盘分区才能使用,才能用这些分区来存储数据了。

mkfs  -t  ext4  /dev/sdb1       // -t用于指定分区的文件系统类型
mkfs  -t  ext4  /dev/sdb5
mkfs  -t  ext4  /dev/sdb7
mkfs  -t  ext4  /dev/sdb8
mkfs  -t  vfat  /dev/sdb6   // -t用于指定分区的文件系统类型

fdisk  -l  /dev/sdb // 查看sdb硬盘下的分区结果

如何把已有的硬盘分区变更为交换分区?

mkswap  /dev/sdb7       // 把sdb7转化成交换分区

什么是挂载分区?为什么需要挂载分区?
分区完成后的硬盘,只有挂载到Linux的/树形结构上后,才能正式被使用。挂载是为了更方便地访问文件,数据实际上还是存储在/dev中的硬盘设备上。
挂载操作,是在建立存储设备分区到/树结构的映射关系。

mkdir project     // 在家目录下创建文件夹,用于挂载硬盘分区
cd project
mkdir dir1 dir5 dir6 dir7 dir8  // 在project目录下创建5个空文件夹,用于挂载分区
mount  -t  ext4  /dev/sdb1  /project/dir1      // 把dev/sdb1分区挂载到project/dir1树结构上
mount  -t  ext4  -o  ro  /dev/sdb5  /project/dir5    // -t指定文件系统类型,-o指定读写模式,ro表示该分区为只读模式,不能执行文件编辑等操作。
mount  -t  ext4  /dev/sdb7  /project/dir7
mount  -t  ext4  /dev/sdb8  /project/dir8
mount  -t  vfat  /dev/sdb6  /project/dir6

在/project目录下,执行mount命令查看挂载结果
mount   // 查看挂载结果
挂载成功后,即可进入到/project中进行各种文件操作了。它们的数据都保存在/dev/sdb硬盘中。

如何卸载一个挂载点或者分区?

umount  /dev/sdb8       // 卸载sdb8分区
umount  /project/dir8   // 上述两个命令的操作结果是一致的,本质上是断开了sdb8分区与/树结构之间的映射有关系,即卸载挂载。

注意:挂载被卸载后,数据仍然存储在硬盘上,只是暂时看不到了而已。当恢复挂载时,数据就会被恢复访问。

两点提示:1、挂载分区,尽量选择空目录进行挂载。2、不要在多个目录上挂载同一个硬盘分区。
注意:mount和umount命令,只有根用户才有权限使用。

如何实现在Linux开机时自动挂载分区?
为什么需要实现开机自动挂载?因为上述讲的手动mount挂载,在Linux重启后会消失,消失后需要再次手动挂载才能使用硬盘上的数据,手动挂载不是永久的。

/etc/fstab    该配置文件,用于指定Linux开机时自动挂载的映射关系。
vim  /etc/fstab     // 打开该配置文件
在这个文件中,可以指定"分区->挂载点树目录"的映射关系,以及其它相关配置参数。

开机自动挂载虽然方便,但同时会带来另一个问题。因为Linux机器上的硬盘等存储设备可以人为地被热插拔更改设备顺序,从而导致/etc/fstab配置的映射关系发生变化,比如sda可能会因为插拔后变成了sdb。那么该如何解决这个问题呢?

解决方案是,给分区取一个标签别名UUID,然后用标签别名UUID来挂载分区。

那么如何给分区绑定标签别名UUID呢?

语法: e2label  分区设备名  标签别名
e2label  /dev/sdb5  uuid1   // 给sdb5分区绑定了uuid1别名
// 绑定成功后,用 blkid 命令查看系统中所有的UUID列表。
// 然后打开/etc/fstab配置文件,用UUID来指定分区与/树目录的映射关系,即可。

注:使用UUID来完成分区到/树目录的映射时,无论Linux怎么重启,只要/etc/fstab配置文件不变,那么分区挂载的映射关系也不会变。这是因为UUID是唯一的,并且不会受设备插拔的影响。

七、网络管理

Linux上什么是网络接口?(网络接口就是网卡,这里的网络指的是以太网)
注:所有用户都可以查看,但只有根用户可以操作网络接口。

ifconfig    // 该命令输出的数据怎么解读?“eth”开头的是网络接口,"lo"开头的是回环接口,回环接口可用于本机的网络调试。注意,此时只返回已开启的网络接口。

ifconfig  eth0  // 只查看eth0这个网络接口的信息
ifconfig  -a    // 查看本机上所有的网络接口,无论这些接口是否被启用。

如何启用或关闭一个网络接口?

ifconfig  eth1  up        // 启用网络接口
ifconfig  eth1  down   // 关闭网络接口

如何修改网络接口的配置参数?

ifconfig  eth1  192.168.16.125  netmask  255.255.255.0      // 修改eth1网络接口的IP地址和子网掩码地址。
ifconfig  eth1  mtu  5000     // 修改eth1网络接口的mtu参数

注意:这些手动修改后的网络接口参数都是临时的。当在系统重启后不会被保留。比如service network restart后,这些修改将恢复原状。

配置TCP/IP网络参数:
这些配置文件存放在 /etc/sysconfig/network-scripts/ 目录下。

cd  /etc/sysconfig/network-scripts/
ls
vim  ./ifcfg-eth0   // 进入并编辑第一块网卡的配置参数
// 修改完成,需要重启网络。
service  network  restart   // 重启网络

注意:一台机器默认只有一个网关Gateway。所以设置网卡参数时,无须给每个网卡都设置Gateway参数。如果在多个网卡接口中设置了Gateway参数,那么最后一个启用的网卡接口的Gateway会生效。

如何测试网关是否生效?

ping  -c  5  192.168.71.2   // 测试两台机器的连通性,-c用于指定数据包的个数。

如何从DNS服务器获取指定域名的解析结果?

dig  www.geekxia.cn

如何配置机器的主机名?

vim  /etc/sysconfig/network     // 打开并编辑该文件,可以修改主机名
vim  /etc/host  // 打开并追加一行“ip地址->主机名”的映射
// 保存上述两个配置文件的修改
service  network  restart    // 重启网络
ping  hostname  // 测试主机名修改是否成功

注:系统中很多地方都会用到主机名,所以修改主机名完成后,建议重启一下Linux机器,这样可保证主机名修改后完成生效。

什么是动态主机配置协议(DHCP)?

vim  /etc/sysconfig/network/ifcfg-eth0    // 打开并编辑
// 修改 BOOTPROTO=static 为 BOOTPROTO=DHCP,保存。
service  network  restart    // 重启网络后,即生效。

注:当BOOTPROTO=static时,机器的IP将是固定IP,不会随局域网的DHCP服务变化而变化。当BOOTPROTO=DHCP时,机器的IP将是动态的,每次重启网络后,机器的IP地址总会受局域网的DHCP服务器影响而发生变化,即动态IP。

特别说明:DHCP服务器,是处在局域网中的,它有能力给局域网中BOOTPROTO=DHCP的机器动态地分配IP地址、网关、主机名、子网掩码和DNS地址等。

八、软件管理

什么是RPM?(红帽软件包管理器)
rpm只能管理用RPM封装的软件包。

RPM软件包的命名有怎样的规范?

name-2.0.10.el6.x86_64  // 依次是软件包的名称、版本号和适用的硬件架构(64位CPU)

使用RPM安装软件:
演示:在Linux上安装Opera浏览器

// 在RPM官网上搜索Opera软件,找到相应版本的下载链接
wget  opera_download_url       // 下载
rpm  -q  opera  // 在系统上查找是否已经安装过opera,如果已经安装了,要先卸载才能再安装。
rpm  -ivh  ./opera-12.16-1860.x86_64.rpm     // 安装
rpm  -q  opera  // 再次查询是否已安装

使用RPM卸载软件:

rpm  -q  opera  // 先查询
rpm  -e  opera-12.16-1860.x86_64    // 卸载,-e后面必须跟着软件包的全名。
rpm  -q  opera  // 再查询,验证是否卸载成功

注:RPM虽然能安装和卸载软件,但是RPM有一种巨大问题的,那就是它没有解决软件包的依赖问题,从而导致安装依赖复杂的软件会很麻烦。所以我们推荐使用yum这一工具来优化RPM软件管理。

使用yum工具:
什么yum?它是基于RPM的高级软件管理器工具,它解决了软件包依赖这一问题。几乎所有红帽系列的Linux系统上都有默认安装yum。
这里需要注意:yum只是基于RPM的工具,它解决了软件依赖问题。事实上,Linux上默认的软件包管理器仍然是RPM。

yum的工作原理是怎样的?yum服务器和RPM服务器之间有着怎样的关系?

如何使用yum来安装软件?

yum  clean  all // 先清除yum在本地的缓存数据
yum  makecache      // 从yum服务器上拉取最新的软件数据,以提升软件搜索的速度。
yum  install  gcc-c++   // 安装软件
y   // 同意安装当前软件所需要的全部依赖

如何使用yum查询软件包?

yum  list  gcc-c++  // 查询某个软件是否已安装
yum  list  g*   // 支持通配符,查询机器上是否已安装过以g开头的软件
yum  list  installed    // 列出机器上所有已安装过的软件包
yum  list  installed | less    // 使用管道来筛选结果
yum  list  available    // 列出yum上所有可以被安装的软件

如何使用yum查看某个软件包的信息?

yum  info  gcc-c++      // 查看软件包的信息

如何使用yum更新一个软件包?

yum  update  python    // 更新软件包
y   // 同时同意更新当前软件包的相关依赖

如何使用yum卸载一个软件包?

yum  remove  gcc-c++    // 卸载软件包
y   // 同时同意卸载当前软件包的相关依赖

注意:只有根用户才能使用yum进行软件包的安装与卸载,普通用户使用yum只能搜索和查看软件包。

yum中的软件包来源于哪里?它来自CentOS源。但是这个默认源所包含的软件并不是很多,很多常用的包在CentOS源中都没有。那么该怎么扩展yum源呢?
// 解决方案是,为yum配置可扩展的其它软件源。

演示举例:为yum配置RepoForge源
wget  repoforge_download_url       // 下载RepoForge源
ls
rpm  -ivh  ./rpmforge-release-0.5.2-1.el6.rf.x86_64.rpm     // 安装RepoForge源
cd  /etc/yum.repos.d     // yum的配置文件都在这个目录
ls
yum  install  yum-plugin-priorities // 安装yum优先级插件
y
vim  /etc/yum.repos.d/CentOS-Base.repo   // 在这个文件中配置优先级priority=1
vim  /etc/yum.repos.d/rpmforge.repo    // 在这个文件中配置优先级priority=2
// 配置了yum源的优先级以后,当用yum安装某个软件在多个源中都存在时,则优先从优先更高的源中进行下载。

九、进程管理、服务管理

什么是进程?
什么是指令?什么是程序?
最最基础的计算机动作,被称为指令。
一系列的指令集合,被称为程序。大多数时候,程序都会被存储为可执行的文件,从而完成较为复杂的功能。
所谓进程,就是程序执行的过程。一个运行中的程序,就产生了一个或多个进程。进程会在内存中开辟一个内存空间,用于这个程序执行。注意:一个程序运行后可能有多个进程产生。
进程就是执行程序的过程,进程是程序的一个具体实现。

如何查看系统中当前的进程状态?

ps  -A  // 查看所有进程
ps  -Af // 查看所有进程,并显示进程所占比的计算机资源
ps  -Af|grep  sshd  // 查看进程中带有sshd字样的进程
ps  -Af|less    // 分页查看
ps  -Al|less    // 分页查看,并显示进程的完整信息
top // 动态地查看系统中进程的状态,默认每3秒刷新一次
// 进入top命令后,进程默认是根据CPU占用率降序排列的
// 按l键,按内存占用量的降序排列
// 按n键,按pid降序排列
// 按p键,按cpu占用率降序排列
// 按r键,在当前排序的基础上反向排序
// 按左右箭头,可以更改排序的基准字段
// 按q键,退出top

如何终止进程?

top // 查看进程的状态和pid
q   // 退出top
kill  100   // 终止pid=100的进程
kill  -9  100   // 强行终止pid=100的进程

pkill  firefox       // 使用进程名来终止进程
pkill  -u  username  // 终止username用户下所有的进程
xkill       // 进入图形化界面,用鼠标点击程序即可终止进程

注意:用户只能终止自已所属的进程,否则会提示“权限不够”

什么是前台进程?
什么是后台进程?
// 占用终端的进程是前台进程,不占用终端的进程是后台进程。

什么是守护进程?
即运行在后台,且独立于终端,周期性地运行以执行某些任务或者等待某些操作的进程。它不需要用户输入就能够为系统或者用户提供服务。比如Apache服务等。

如何查询系统中的守护进程?

chkconfig  --list|grep  httpd   // 查看是否有httpd服务
ps  -Af|grep  httpd // 查看httpd服务进程的状态
service  httpd  status  // 查看httpd服务的状态
service  httpd  start   // 启动httpd服务
service  httpd  stop    // 停止httpd服务
service  httpd  restart // 重启httpd服务

什么是服务的运行级别?
0-6这七个运行级别分别代表什么意思?
如何手动设置服务的运行级别?

chkconfig  --level  35  httpd  on   // 开启httpd服务的3和5这两个运行级别
chkconfig  --list|grep  httpd   // 查看httpd服务的设置结果

当把httpd的运行级别设置为3和5完成后,Linux系统重启时,httpd服务会自动启动并运行。
注:httpd指代的是Apache服务器的后台守护进程。

十、远程联机管理

什么是SSH协议?它有什么用?

yum  list  installed|grep  openssh   // 查看系统上是否安装了openssh
注:Linux系统上,默认都会安装openssh
yum  install  openssh   // 安装openssh
service  sshd  status   // 查看openssh的运行状态
chkconfig  --list  sshd // 查看openssh的运行级别设置
chkconfig  --level  35  sshd  on    // 设置sshd的运行级别为3和5,Linux开机时,sshd服务会自启动

注:sshd是openssh默认的后台守护进程

未经配置的openssh,仍然是不安全的。为了安全,须完成以下相关的安全配置:

vim  /etc/ssh/sshd_config   // 修改配置,以管控远程的ssh连接
service  sshd  restart     // 重启openssh即可

PuTTY:
在windows系统下使用PuTTY来远程连接Linux系统。

在Linux上可以配置/etc/ssh/sshd_config文件,以禁止用户使用密码方式登录。一旦禁止了密码方式登录,用户就必须使用密钥方式进行登录。

如何在Linux上生成SSH密钥?

ssh-keygen  -t  rsa // 生成SSH公钥和私钥
// 选择默认的密钥存储路径即可
cd  ~/.ssh  // 进入密钥的默认存储目录
ll
cat  ./id_rsa.pub>> authorized_keys // 把公钥移动至用户权限中
rm  ./id_rsa.pub    // 删除公钥
chmod  400  ./authorized_keys   // 修改公钥的读写属性
// 把私钥发送给远程的用户客户端,在远程客户端使用这个私钥生成密钥认证,然后就可以在远程通过密钥来连接Linux机器了,使用密钥登录时需要输入密钥口令,这个口令就是Linux上生成密钥时所输入的口令。

两个推荐的Linux认证:
1、红帽Linux系统管理认证
2、LPI初级认证

后续课程推荐:《Linux服务器配置与管理》
学习资源参考:http://mooc1.chaoxing.com/course/93892828.html


完!!!

你可能感兴趣的:(Linux系统管理(完整))