声明:
《鸟哥的Linux私房菜-基础篇》这本书挺适合入门的,比较基础的但也有难点,书页1千多页呐(二十五章),而这篇博客把它总结成十章呐(其实都浓缩在一起的),这样就方便我以后有问题可以直接翻阅这篇博客就ok了,也适合一些童鞋学习哦,我把重点都梳理出来呐,前面几章都是基础,后面才是难点 ,可以根据目录自行挑选学习呐。😀
CONTENT
十、登录档、备份策略、模块管理、X Windows及kernel
10.3 开机流程与模块管理、X window及Linux核心编译
一、计算机概论与Linux学习简介
1.1 计算机概论
这章可以做个了解,下面是这章的重点内容:
1.2 Linux学习简介
1.2.1 Linux简介
Linux其实就是一个操作系统,它是开源的。Windows操作系统本来就是针对个人计算机x86架构的硬件去设计的,所以他当然只能在x86的个人计算机上面运作,在不同的硬件平台当然就无法运行了。也就是说,每种操作系统都是在他专门的硬件机器上面运行的。Linux的程序代码可以被修改成适合在各种机器上面运行的,也就是说, Linux 是具有可移植性,这可是很重要的一个功能喔!Linux提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构,这个架构是沿袭Unix良好的传统来的,所以相当的稳定而功能强大!此外,由于这 个优良的架构可以在目前的个人计算机(x86系统)上面跑,所以很多的软件开发者渐渐的将他们的工作心血移转到这个架构上面,所以Linux操作系统也有很多的应用软件哦。
1.2.2 Linux版本信息
Linux内核(kernel)主要的三种内核:Linux kernel 2.2、Linux kernel 2.4、Linux kernel 2.6
现阶段市面上有很多的发行商,比如说Slackware、Redhat 、Debian、Fedora、SUSE、 CentOS、Ubuntu 这些发行版本中比较流行的有RedHat、CentOS 、Ubuntu 。
- 桌面系统 一般用Ubuntu;
- 服务器 CentOS 或者是RedHat ,首选的应该是CentOS(毕竟它免费嘛)
- 稳定性安全性 Debian 或者 FreeBSD
新手一般选择ubantu,容易上手;不过建议使用centos,服务器应用多,对工作益处大点。
1.2.3 Linux应用的领域
- 企业环境的利用:最热门的当然是网络服务器啦;关键任务的应用(金融数据库、大型企业网管环境);学术机构的高效能运算任务;
- 个人环境的使用:桌面计算机;手机(安卓其实就是Linux核心的一支);嵌入式系统(操作系统直接嵌入在产品上,如一些手机,数字相机,包括router,switch,Firewalls等)
- 云端运用:云程序(底层就是Linux,云程序搭建出来的虚拟机也是Linux);端设备。
1.2.4 Linux如何去学习呢
建议舍弃X window桌面环境,多熟悉命令行模式(工作当中一般以命令行为主,远程管理这样方便)。
鸟哥的建议:
遇到问题怎么解决呢?
-
1.在自己的主机/网络数据库上查询How-To或FAQ(Frequently Asked Questions);
-
2.注意讯息输出,自行解决疑难杂症;
-
3.网上搜寻,大胆讨论,请教他人,帮助他们;
-
4.成就感和兴趣相关联,多尝试去做,给自己带来成就感也就有兴趣继续研究了。
-
5.找到适合自己的书籍,《鸟哥Linux的私房菜》就不错,适合新手。
二、主机规划和磁盘分区
事实上,要安装好一部Linux主机并不是那么简单的事情,你必须要针对distributions 的特性、服务器软件的能力、未来的升级需求、硬件扩充性需求等等来考虑,还得要知道磁盘分区、文件系统、Linux 操作较频繁的目录等等,都得要有一定程度的了解才行,所以,安装Linux并不是那么简单的工作喔!不过,要学习Linux总得要有Linux系统存在吧?所以鸟哥在这里还是得要提前说明如何安装部Linux练习机。
2.1 Linux和硬件的搭配
(1)学Linux还要玩硬件是真的,所以计算机概论也很重要。买硬件要考虑你购买的目的(游戏呢还是办公呢),记住并不是越贵越好,也要考虑「效能/价格」比与「效能/消耗的瓦数」,因为如果是服务器一直开着也很耗电的。也要考虑这些产品所支持的操作系统,这牵涉到硬件开发商是否愿意提供适当的驱动。不然买了却不支持你的OS,是不是憋屈?
(2)选择与Linux搭配的主机配备,Linux所需的硬件配备不需要很高级,五年内淘汰的旧电脑可以拿来测试下做做服务器也挺好。CPU不是太老旧都可以,主存越大越好,磁盘容量要求不一样,一般小型服务器20GB就可以了。VGA(显示适配器),如果不需要X window,VGA就不太重要了,如果需要X window,建议VGA容量大于32MB哦。网卡,对于服务器I/O行为频繁的话建议选择好一点的,通常好的网卡Linux驱动程序也做得比较好。剩下的光盘,软盘,键盘和鼠标能用则行。
(3)各硬件装置在Linux中文件名
(4)建议使用虚拟机学习(可以下载virtualbox或者VMware,我用的是VMware)
2.2 磁盘分区
(1)正常的实体机器大概使用的都是/dev/sd[a-] 的磁盘文件名,至于虚拟机环境底下,为了加速可能就会使用/dev/vd[a-p]这种装置文件名。
(2) MSDOS(MBR,主要启动记录区)与GPT磁盘分区表(partition table)
- MSDOS(MBR,主要启动记录区):可以将硬盘分区分成十个以上分区槽
上述的分区槽在Linux系统中的装置文件名分别如下:
-
P1:/dev/sda1
-
P2:/dev/sda2
-
L1:/dev/sda5
-
L2:/dev/sda6
-
L3:/dev/sda7
-
L4:/dev/sda8
-
L5:/dev/sda9
仔细看看,怎么装置文件名没有/dev/sda3与/dev/sda4呢?因为前面四个号码都是保留给Primary或Extended用的嘛!所以逻辑分区槽的装置名称号码就由5号开始了。这在MBR方式的分区表中是个很重要的特性,不能忘记喔!
MBR主要分区、延伸分区与逻辑分区的特性我们作个简单的定义:
-
GPT磁盘分区表(partition table)(我就不解释了,我一般用上面那种分区)
(3)分区和挂载
distributions安装时,挂载点与磁盘分区的规划:,swap交换分区,/根分区,初学者建议分这两个就OK了。
2.3 安装Linux前的规划
选择适当的distribution,最好选择最新版本的,比如最新的CentOS7.6。如果只是练习,不要将重要的数据放在Linux上。
分区要提前想好,说明下基本硬盘分区的模式:具体分多少看你这台机器的用途和你的需求哦。
重点内容回顾:
三、安装CentOS7.x与首次登录注意事项向
3.1 安装 CentOS 7.x
我们可以这样理解,我们选择的版本定位于服务器,Redhat为商用版,需付费的,而CentOS免费的,但是它完全兼容商业版RHEL的社群版本。
有了前面主机规划和磁盘分区的基础,现在我们开始安装CentOS7咯,想要练习Linux的可以下载VMware呀,然后大家可以下载相关的镜像进行安装,刚开始简单安装就行,分区简单点。我找个安装VMware的链接给大家:
VMware安装及centos安装教程链接
再给个Xshell和Xftp链接,配合虚拟机使用(可以远程控制和上传文件的两个文件,很方便的哦)
链接:https://pan.baidu.com/s/1eDnI32trcK3nQMHItUt04g 提取码:pryp
重点回顾:
3.2 首次登录注意事项
(1)建议不要用root直接登陆,误删数据就麻烦了。
(2)重新启动X window快速按钮(两个方法):
- 直接注销,然后再重新登入即可;
- 在X的画面中直接按下[Alt] + [Ctrl] + [Backspace]
(3)X window与文本模式的切换
文本界面到图形界面:输入命令“startx”
(4)注销用户命令:exit
(5)文本模式指令的下达:(指令注意大小写)注意格式:
(6)输入指令出现乱码怎么解决?把系统支持语系改为英文就行了。
#第一个命令查看目前支持的语系,第二个修改,第三个要更新LC_ALL
[root@agent ~]$ locale
[root@agent ~]$ LANG=en_US.utf8
[root@agent ~]$ export LC_ALL=en_US.utf8
(7)基础指令
#分别显示日期,日历,计算机。具体操作可用man、info查看下
[root@agent ~]$ date
[root@agent ~]$ cal
[root@agent ~]$ bc
(8)巧用热键【tab】、【CTRL+c】、【CTRL+d】
【tab】:按两次可查看命令或文件详情
- [Tab] 接在一串指令的第一个字的后面,则为「命令补全」;
- [Tab] 接在一串指令的第二个字以后时,则为 [文件补齐」!
- 若安装bash-completion 软件,则在某些指令后面使用[tab] 按键时,可以进行[选项/参数的补齐」功能!
- 善用[tab] 按键真的是个很好的习惯!可以让你避免掉很多输入错误的机会!
【CTRL+c】中断程序
【CTRL+d】类似于exit
(9)man和info及--help
man page使用技巧:
info与man类似,熟悉man就可以了,忘记命令的参数可以man一下,--help也非常实用。
(10)正常关机(有的系统需要切换root才可以执行,用命令:su -)
- 将数据同步写入硬盘中的指令:sync(多做几可以放心点)
- 惯用的关机指令: shutdown ;init 0;systemctl [shutdown -参数](具体参数可以man看看)
- 重新启动,关机: reboot, halt, poweroff
[root@agent ~]$ shutdown -h 10 'i will shutdown after 10min'
Shutdown scheduled for Sat 2020-03-28 14:06:39 CST, use 'shutdown -c' to cancel.
system is going down for power-off at Sat 2020-03-28 14:06:39 CST!
#下面命令取消操作
shutdown -c
#建议这样多保存再关机哦
[root@agent ~]$ sync;sync;sync;reboot
四、Linux文件和目录管理
4.1 Linux的文件权限与目录设置
4.1.1 Linux文件属性
4.1.2 修改文件属性的三个命令
- chgrp :改变文件所属群组
- chown :改变文件拥有者
- chmod :改变文件的权限,SUID, SGID, SBIT 等等的特性
样例:
#touch是创建一个空文件,ll是显示目录下的内容
[root@agent ~]$ touch /data/test1
[root@agent ~]$ ll /data/
total 0
drwxr-xr-x. 3 root root 20 Aug 7 2019 registry
-rw-r--r--. 1 root root 0 Mar 29 15:10 test1
#chgrp的使用
[root@agent ~]$ chgrp user1 /data/test1
[root@agent ~]$ ll /data/
total 0
drwxr-xr-x. 3 root root 20 Aug 7 2019 registry
-rw-r--r--. 1 root user1 0 Mar 29 15:10 test1
#chown的使用
[root@agent ~]$ chown user1 /data/test1
[root@agent ~]$ ls -al /data/test1
-rw-r--r--. 1 user1 user1 0 Mar 29 15:10 /data/test1
[root@agent ~]$ chown root:root /data/test1
[root@agent ~]$ ls -al /data/test1
-rw-r--r--. 1 root root 0 Mar 29 15:10 /data/test1
#chmod的使用
[root@agent ~]$ chmod u=rwx,g=rx,o=x /data/test1
[root@agent ~]$ ls -al /data/test1
-rwxr-x--x. 1 root root 0 Mar 29 15:10 /data/test1
主要是chmod有点意思,看看图吧:(w:4 r:2 x:1,分别是写,读,执行的意思,这边就是权限的设定方法而已,)
4.1.3 目录配置和含义
看看/目录下的内容:大家可以自行去了解每个目录一般的作用,了解常遇见的。
[root@agent ~]$ ll /
total 32
lrwxrwxrwx. 1 root root 7 Jul 8 2019 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Jul 11 2019 boot
drwxr-xr-x. 3 root root 35 Mar 29 15:10 data
4.2 Linux文件与目录管理
4.2.1 目录的一些相关操作,指令
-
cd:变换目录
-
pwd:显示当前目录
-
mkdir:建立个新的目录
-
rmdir:删除一个空的目录
比较简单,建议多操作几次,熟悉熟悉每次目录的变换哦:
[root@agent ~]$ cd /data/
[root@agent data]$ pwd
/data
[root@agent data]$ mkdir newContent
[root@agent data]$ ll
total 0
drwxr-xr-x. 2 root root 6 Mar 29 15:40 newContent
drwxr-xr-x. 3 root root 20 Aug 7 2019 registry
-rwxr-x--x. 1 root root 0 Mar 29 15:10 test1
[root@agent data]$ rmdir newContent/
[root@agent data]$ ll
total 0
drwxr-xr-x. 3 root root 20 Aug 7 2019 registry
-rwxr-x--x. 1 root root 0 Mar 29 15:10 test1
4.2.2 复制,剪切,删除
cp可以复制文件和目录,复制目录可以用参数-r ,但是权限可能会变,一般用-a就好了。
[root@agent data]$ mkdir content1
[root@agent data]$ ll
total 0
drwxr-xr-x. 2 root root 6 Mar 29 16:06 content1
drwxr-xr-x. 3 root root 20 Aug 7 2019 registry
-rwxr-x--x. 1 root root 0 Mar 29 15:10 test1
#将当前目录下的test1文件复制到content1目录下并改名为test1.bak
[root@agent data]$ cp test1 content1/test1.bak
#将content1目录复制到/tmp下
[root@agent data]$ cp content1/ /tmp/ -a
rm移除文件或目录,移除目录加 -f 强制,-r是递归删除 (rm -rf 这个命令慎用呀)
[root@agent data]$ rm test1 -f
[root@agent data]$ rm content1/ -rf
#mkdir递归创建文件夹 -p
[root@agent data]$ mkdir content/conid/din -p
#下面命令可以同时删除多个目录了
[root@agent data]$ rm content/ -rf
mv(移动文件与目录,或改名)就相当于剪切哦
[root@agent data]$ touch test1
[root@agent data]$ ll
#相当于改名
[root@agent data]$ mv test1 test2
#移动到content1并改名test3
[root@agent data]$ mv test2 content1/test3
[root@agent data]$ ll content1
total 0
-rw-r--r--. 1 root root 0 Mar 29 16:23 test3
4.2.3 文件内容查阅,文件属性查阅
这些命令其实都很简单,自己随便创个文件写点内容,操作下就好了。或者直接看系统文件。下面我会总结下vi编辑器,这个很有意思,或者用vim更好玩点。慢慢来。
用umask查看文件属性:注意到它是查看你当前所在目录的权限的哦。建议用-s 参数的。umask数字是反码。
[root@agent data]$ umask -S
u=rwx,g=rx,o=rx
[root@agent data]$ umask
0022
- chattr (配置文件案隐藏属性)
- lsattr (显示文件隐藏属性)
#赋予test3 i权限,这样系统删不掉咯
[root@agent content1]$ chattr +i test3
#查看当前目录下所有文件的隐藏属性
[root@agent content1]$ lsattr
----i----------- ./test3
[root@agent content1]$ rm -rf test3
rm: cannot remove ‘test3’: Operation not permitted
#解除i
[root@agent content1]$ chattr -i test3
文件特殊权限: SUID, SGID, SBIT这是特殊的权限,比如下面的,记住他就是特殊权限,一般我们去关心。
文件类型查询:
4.2.4 指令和文件搜寻
(1)脚本文件名搜寻
[root@agent content1]$ which ifconfig
/sbin/ifconfig
#正常指令脚本都可以查询,history比较特殊
[root@agent content1]$ which history
/usr/bin/which: no history in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
#alias是命令别名,就是可以自己命名那些命令
[root@agent content1]$ which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
/bin/alias
/usr/bin/which
(2)文档名的搜寻
建议用 whereis 和locate,find也可以。
重点回顾:
五、Linux磁盘与文件系统管理
5.1 df 和 du
下面用的很方便:
[root@agent ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 47G 5.1G 42G 11% /
devtmpfs 911M 0 911M 0% /dev
tmpfs 928M 0 928M 0% /dev/shm
tmpfs 928M 11M 918M 2% /run
tmpfs 928M 0 928M 0% /sys/fs/cgroup
/dev/sda1 1014M 206M 809M 21% /boot
tmpfs 186M 12K 186M 1% /run/user/42
tmpfs 186M 0 186M 0% /run/user/0
[root@agent ~]$ df -h /etc/
du的使用方法与df类似哦
5.2 实体链接和符号链接
一般我们用下面这种命令创建符号链接(类似于快捷方式),你会发现下面有个指针指向/bin。实体链接我不常用。
[root@agent ~]$ ln -s /bin /root/bin
[root@agent ~]$ ll
total 70588
-rw-------. 1 root root 2037 Jul 8 2019 anaconda-ks.cfg
lrwxrwxrwx. 1 root root 4 Mar 29 17:47 bin -> /bin
drwxr-xr-x. 2 root root 6 Jul 8 2019 Desktop
drwxr-xr-x. 2 root root 6 Jul 8 2019 Documents
drwxr-xr-x. 2 root root 6 Jul 8 2019 Downloads
-rw-r--r--. 1 root root 2052 Jul 8 2019 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 Jul 8 2019 Music
drwxr-xr-x. 2 root root 6 Jul 8 2019 Pictures
drwxr-xr-x. 2 root root 6 Jul 8 2019 Public
drwxr-xr-x. 2 root root 6 Jul 8 2019 Templates
drwxr-xr-x. 2 root root 6 Jul 8 2019 Videos
-r--r--r--. 1 root root 72270857 Jul 8 2019 VMwareTools-10.0.5-3228253.tar.gz
5.3 磁盘的分区,文件系统挂载
(1)记住MBR和GPT两种磁盘分区方式使用的分区工具也是不一样的哦。
#列出磁盘列表
[root@agent ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─centos-root 253:0 0 47G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
#下面这个命令可以找出装置的UUID,就是全局单一标识符
[root@agent ~]$ blkid
/dev/sda1: UUID="91f6cd8e-b4a2-4ea0-8c18-e3642274cf51" TYPE="xfs"
/dev/sda2: UUID="4vJL2Y-LDyJ-MOte-kIrH-7Wrm-zOKd-N88B3w" TYPE="LVM2_member"
/dev/mapper/centos-root: UUID="c45030aa-b3dc-49e8-8e23-d7c109a589f4" TYPE="xfs"
#列出磁盘分区类型和分区信息,可以看出分区格式:msdos就是MBR分区
[root@agent ~]$ parted /dev/sda print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1075MB 1074MB primary xfs boot
2 1075MB 53.7GB 52.6GB primary lvm
MBR分区用fdisk分区,GPT用gdisk分区,随便玩按q退出,w就保存了;
#查看分区有没有分好(分区记录)
[root@agent ~]$ cat /proc/partitions
保存之后可能会出现警告,因为你磁盘还在使用中,可以重启也可以使用partprobe -s生效。
(2)文件系统的挂载
要先确定的事:
mount指令:
- 挂载xfs/ext4/vfat等文件系统:
为什么挂载?:我们要访问存储设备中的文件,必须将文件所在的分区挂载到一个已存在的目录上,然后通过访问这个目录来访问存储设备
下面是挂载操作:
- 挂载CD或DVD光盘:
解除挂载就用umount加后面的参数就好了。
解除挂载就可以退出光盘那些东西了。
怎么删除新增的不需要的partition呢?可以借鉴下面,解除挂载的
重点回顾:
六、文件压缩,打包与备份和vim编辑器
6.1 压缩指令
常见的压缩文件扩展名:(常用的gzip,bzip及最新的xz)
每次压缩一大堆文件很烦人,就需要所谓的打包软件-tar(把很多文件打包成一个文件)。
-
gzip这个压缩指令应用比较广:(1~9的压缩等级,越大压缩比越好,默认6)
[root@agent tmp]$ cd /tmp
#du查看文件大小单位(k)
[root@agent tmp]$ du /etc/services
656 /etc/services
[root@agent tmp]$ cp /etc/services .
#压缩.
[root@agent tmp]$ gzip -v services
services: 79.7% -- replaced with services.gz
[root@agent tmp]$ ll /etc/services /tmp/services.gz
-rw-r--r--. 1 root root 670457 Jul 31 2019 /etc/services
-rw-r--r--. 1 root root 136133 Mar 30 04:57 /tmp/services.gz
#查看压缩
[root@agent tmp]$ zcat services.gz
[root@agent tmp]$ zmore services.gz
[root@agent tmp]$ zless services.gz
#过滤压缩文件中http
[root@agent tmp]$ zgrep -n 'http' services.gz
#解压缩,但会将gz压缩包删掉
[root@agent tmp]$ gzip -d services.gz
#以最好的压缩比,并保留原来文件
[root@agent tmp]$ gzip -9 -c services >services.gz
-
同样的,bzip2,bzcat/bzmore/bzless/bzgrep;这个压缩效果更好,但是我就不介绍了,都差不多。
-
xz,xzcat/xzmore/xzless/xzgrep。这个压缩比更好,用法差不多
6.2 打包指令
要懂得经常备份/etc下的东西,打包压缩是个很好的方式
#检查压缩/etc 到root下所需的时间 很明显第一个花时间短,花时间长说明压缩比好
[root@agent tmp]$ time tar -zcvf /root/etc.tar.gz /etc
[root@agent tmp]$ time tar -jcvf /root/etc.tar.bz /etc
[root@agent tmp]$ time tar -Jcvf /root/etc.tar.xz /etc
6.3 vim编辑器
vim可以看成vi的进阶版,可以有颜色,可以判断文本格式,很好用。(三种模式及互相切换方式如图)
下载个文件操作下,这玩意一定要多加练习才可哟(大胆操作,下载个文件大胆操作!😄):
#wget是下载网络是上文档的命令,这个文件是鸟哥给的一个host文件
[root@agent tmp]$ wget http://linux.vbird.org/linux_basic/0310vi/hosts
[root@agent tmp]$ vim hosts
基本操作:(区块选择要熟悉,挺好使的)
- i在光标前插入;o在下行插入,(进入插入模式;)
- 按ESC键可以退出到命令行模式:在这边,u撤销、CTRL+r恢复、y是复制,p是粘贴,gg到首行,G到最后一列
-
x:删除光标所在的字符;dd删除当前行;想删除全部 gg—>V—>G,然后d删除
- 在命令行模式下输入:(冒号),然后输入【(wq 保存退出)、q! 强制退出,不保存)、 w(保存)、 q(离开)】
- :/string快速定位; :1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1
七、bash、正规表示法和文件格式化处理、shell脚本
7.1 bash学习
为什么学shell,而不是用友好的X window呢?因为不同版本设计的X window接口不都相同,但是文字接口的shell几乎都一样的,而且做远程操作时,是不是文字接口速度快呢?
7.1.1 基本操作
我们之前在文字接口操作的各种命令,其实都可以理解Bash shell我们主要介绍下命令行的一些基本操作。
(1)查看有多少可以使用的shell,/bin/bash是Linux预设的shell
[root@agent ~]$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
(2)type命令查看命令是否是shell内部指令
(3)指令的快速编辑(熟悉这个操作更六)
7.1.2 shell变量功能
作用:用简单的变量取代另一个比较复杂或者是容易变动的数据,就为了方便哦。
(1)变量的取用和设定:echo,变量设定规则,unset
[root@agent ~]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@agent ~]$ echo $HOME
/root
[root@agent ~]$ echo /MAIL
/MAIL
#变量的设定
echo $myname
[root@agent ~]$ echo $myname
[root@agent ~]$ myname=Gaw
[root@agent ~]$ echo $myname
Gaw
(2)变量设定规则
#变量和变量内容用=连接,不能接空格;变量名只能是英文和数字,开头不能用数字;用空格的话用 " 或 ' 符号连接;
#用反斜杠(\)跳脱特殊字符也是OK的,eg:name=gsq\'s\ name;
#在PATH变量下累加目录
[root@agent ~]$ PATH=$PATH:/home/user1/bin
#在name变量内容多出yes和no
[root@agent ~]$ name=${name}yes
echo $name
[root@agent ~]$ yes
[root@agent ~]$ name=${name}no
[root@agent ~]$ echo $name
yesno
#具体的应用例子,这样设置一下下次就方便进入了
[root@agent ~]$ network="/etc/sysconfig/network-scripts/"
[root@agent ~]$ cd $network
#又或者
[root@agent network-scripts]$ netcard1="/etc/sysconfig/network-scripts/ifcfg-ens33"
[root@agent network-scripts]$ vim $netcard1
#用export可以是变量在下一个shell程序中生效
[root@agent ~]$ export name
[root@agent ~]$ bash #进入下一个子程序(就是重新打开一个shell,exit退出)
#取消设定
[root@agent ~]$ unset name
(3)环境变量
#查看shell环境变量
[user1@agent ~]$ env
#查看环境变量及自定义变量
[user1@agent ~]$ set
#将自定义变量转成环境变量
[user1@agent ~]$ export name
7.1.3 命名别名(alias,unalias)及历史命令(history)
[user1@agent ~]$ alias lm='rm -i'
[user1@agent ~]$ alias |grep lm
alias lm='rm -i'
[user1@agent ~]$ unalias lm
[user1@agent ~]$ alias |grep lm
#history查看历史命令,可以尝试下
[user1@agent ~]$ alias h='history'
[user1@agent ~]$ h
#source命令:读入环境配置文件的指令
历史命令也挺有意思的
这张熟悉这么多久差不多了,还有些内容下面可以看到:
7.2 正规表示法和文件格式化处理
这一章我就大概看了下,重点拎出来,了解下就好了。
主要熟悉printf、awk、grep和diff几个命令。
7.3 shell scripts的学习
这一章我专门写了一栏博客介绍,对以后工作都挺重要的,可以看下面这个链接哦。😉
➡点击这里学习shell script (脚本)
八、账号管理和ACL、quota和crontab
8.1 账号管理和ACL权限设定
8.1.1 账号管理
(1)使用者标识符:UID(用户ID:0是系统管理员,1~999为系统账号,1000~60000可登入号),GID(群组ID)
UID和/etc/passwd有关,而GID和/etc/group有关,可以cat查看下。
#查看自己各种ID信息
[user1@agent root]$ id
uid=1000(user1) gid=1000(user1) groups=1000(user1) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
#观察user1信息,我们发现密码那边是个X,是为了防止密码泄露,加密后的密码放在/etc/shadow下
[user1@agent bin]$ cat /etc/passwd |grep user1
user1:x:1000:1000:user1:/home/user1:/bin/bash
(2)useradd添加用户,groupadd添加组,后面具体的参数可以man一下,基本操作下面可以看一下:
另外还有usermod,chage等命令大家可以去了解下
#正常创建用户并设置密码
[root@agent ~]# useradd user3;passwd user3
#添加一个组
[root@agent ~]# groupadd login_users
#添加用户并添加一些要求
[root@agent ~]# useradd -u 1200 -g login_users login_user1
[root@agent ~]# useradd -u 1201 -g login_users login_user2
#设置密码,记住--stdin可以通过管道作为密码输入,对脚本有帮助
[root@agent ~]# echo "123456" | passwd --stdin login_user1
Changing password for user login_user1.
passwd: all authentication tokens updated successfully.
#删除用户(连同目录都删掉)删除用户时出现进程占用的情况,kill -9 “进程号”终止进程
[root@agent ~]# userdel login_user2 -r
[root@agent ~]# userdel -r login_user1
[root@agent ~]# ll /home/
total 4
drwx------. 3 1201 login_users 78 Mar 31 19:03 login_user2
drwx------. 16 user1 user1 4096 Mar 31 19:18 user1
(3)用户密码忘记咋办?
- 用户密码忘记了可以通过root用户帮忙修改
[root@agent bin]# passwd user1
Changing password for user user1.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
- root密码忘了怎么办,也很简单,重启到开机界面,按e键进行如下编辑:
输入以下命令,echo后面“ ”的内容是你的新密码,重启之后就OK了
8.1.2 ACL的使用
ACL是Access Control List的缩写,主要的目的是在提供传统的owner,group,others 的read,write,execute权限之外的细部权限设定。ACL可以针对单一使用者,单一文件或目录来进行r,w,x的权限规范,对于需要特殊权限的使用状况非常有帮助。
那ACL主要可以针对哪些方面来控制权限呢?他主要可以针对几个项目:
- 使用者(user):可以针对使用者来设定权限;
- 群组(group); 针对群组为对象来设定其权限;
- 默认属性(mask);还可以针对在该目录下在建立新文件/目录时,规范新数据的默认权限;
正常ACL预设在Linux系统里,我们直接用命令:getfacl,setfacl (这个ACL我很少接触,做个了解就好了,如果用到的话用man查看下如何使用吧)
- getfacl:取得某个文件/目录的ACL设定项目;
- setfacl:设定某个目录/文件的ACL规范。
8.1.3 sudo的应用
我们都知道用su来切换用户,那sudo干嘛的呢?就是可以让其他用户以root的身份执行命令,就不用来回切换拉。只有 /etc/sudoers 里的用户才可以执行sudo指令。默认只有root有sudo使用权,我们设置一下,让某些用户也可以用sudo哦。
所以我们用visudo来编辑,不然容易出错的哈(这个位置添加指定的用户就行啦,然后保存退出)
[root@agent ~]# visudo
看到了嘛,切换用户就可以用sudo执行root才能执行的指令啦(不过要输入这个用户的密码)。
[root@agent ~]# su user1
[user1@agent root]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[user1@agent root]$ sudo tail -n 1 /etc/shadow
[sudo] password for user1:
user3:$6$3zA.PFAF$ZhIXk66AfR4f/dHqJ8E5fYR0HAoG1Wd/R79Td40lskLnVhMLbHBl2xV7n64vD5a3/vuuYcDfEPVbZDQ2X8XwN.:18352:0:99999:7:::
那我们也可设置执行不用密码,嘿嘿,我们用这个用户修改以下内容就OK了。
[user1@agent root]$ sudo visudo
还有一个很实用的功能,创建一个用户让他只能修改用户密码,修改内容红线标出啦(除了root)
[user1@agent root]$ sudo useradd user_passwd;sudo passwd user_passwd
[user1@agent root]$ sudo visudo
[user1@agent root]$su user_passwd
[user_passwd@agent root]$ sudo passwd user2
[user_passwd@agent root]$ sudo passwd root
[sudo] password for user_passwd:
Sorry, user user_passwd is not allowed to execute '/bin/passwd root' as root on agent.
8.2 磁盘配额(Quota)与进阶文件系统
这章节我就做个简单了解哈哈。😏
8.2.1 磁盘配额(quota)
-
Quota可公平的分配系统上面的磁盘容量给用户;分配的资源可以是磁盘容量(block)或可建立文件数量(inode);
-
Quota的限制可以有soft/hard/grace time等重要项目;
-
Quota是针对整个filesystem 进行限制,XFS文件系统可以限制目录!
-
Quota的使用必须要核心与文件系统均支持。文件系统的参数必须含有usrquota, grpquota, prjquota
-
Quota的xfs_ quota 实作的指令有report, print, limit, timer等指令;
8.2.2 软件磁盘阵列(Software RAID)
-
磁盘阵列(RAID) 有硬件与软件之分,Linux 操作系统可支持软件磁盘阵列,透过mdadm套件来达成;
-
磁盘阵列建置的考虑依据为[容量」、「效能」「资料可靠性」等;
-
磁盘阵列所建置的等级常见有的raid0, raid1, raid1+0, raid5及raid6
-
硬件磁盘阵列的装置文件名与SCSI相同,至于software RAID则为/dev/md[0-9]
-
软件磁盘阵列的状态可藉由/proc/mdstat 文件来了解;
8.2.3 逻辑滚动条管理(lvm)
-
LVM强调的是「弹性的变化文件系统的容量」;
-
与LVM有关的组件有: PV/VG/PE/LV 等组件,可以被格式化者为LV
-
新的LVM拥有LVM thin volume的功能,能够动态调整磁盘的使用率!
-
LVM拥有快照功能,快照可以记录lV的数据内容,并与原有的LV共享未更动的数据,备份与还原就变的很简单;
-
XFS透过xfs_ growfs 指令,可以弹性的调整文件系统的大小
8.3 例行性工作排程(crontab)
这一章我也做个简单了解,其实这一章也挺重要的,有时候用script时会利用到它,也不是很难。到时再说吧😀
九、进程管理和selinux、系统服务和软件安装
9.1 进程管理和selinux
学过操作系统的童鞋应该对进程有一定的理解,其实简单理解:一个程序加载到内存运作,在这个内存的这个数据就称为进程。我们需要了解它们的状态和进程号,这样可以有效的管理。另外与进程有关的selinux我们也要去了解下。
9.1.1 进程的观察和管理
(1)观察目前的背景工作状态: 暂停(stopped)、 运行(running) 、终止(killed)
( jobs 这个命令很常用,想要知道PID就加上 - l 参数)
(2)管理背景当中的工作:kill (-9和-15这两个参数比较常用)
(3)进程的观察(ps -l只查看与本bash相关的信息、ps -aux是系统全部进程信息,我们通常配合grep和egrep查找进程,注意看下面的几张图哈)
(4)动态观察进程变化(top),ps是截取一个时间点的进程状态,top可以持续动态观察。
(5)系统资源的观察
#free观察内存的使用情况(直接free以千字节为单位,可以用-m以兆字节显示内存)
[user1@www root]$ free -m
total used free shared buff/cache available
Mem: 1854 643 415 13 795 992
Swap: 2047 0 2047
#观察系统信息
[user1@www root]$ uname -a
Linux www.centos.gsq 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
#观察系统启动时间和工作负载
[user1@www root]$ uptime
23:19:52 up 2:10, 3 users, load average: 0.01, 0.02, 0.05
(6)网络端口的监听
9.1.2 认识selinux
SELinux(security enhanced Linux)当初的设计是为了避免使用者资源的误用,配置服务器的时候我们会发现有时候会受到它的限制。所以我们有必要去了解一下它哦(必要的情况下要先把它关掉哦)。
我们主要了解下SELinux的模式有: enforcing , permissive, disabled三种,而启动的政策 (Policy) (主要是targeted)
SELinux启动与关闭的配置文件在: /etc/selinux/config ;SELinux的启动与观察: getenforce, sestatus 等指令,我们直接来看叭。
(1)selinux三种模式区别
(2)通过getenforce,sestatus来获取目前selinux的模式和策略
(3)selinux所在的配置文件位置,一般只需要改SELINUX=enforcing那一行,只要修改了都要重启才能生效。
(4)还有一些细微的地方,如重设selinux的安全性文本可以用 restorecon 和 chcon,在SELinux有启动时,必备的服务至少要启动auditd 这个!若要管理预设的SELinux 布尔值,可使用getsebool, setsebool来管理!这些等我们后面遇到的时候再说吧。
9.2 系统服务(daemons)
我们在类Unix操作系统里面经常听到 daemons(恶魔?守护神?)是不是很好奇这个东西哈?我们知道“服务”是“常驻在”
系统内部且提供系统或网络功能的程序”。daemon和service有关,可以理解daemon为service提供程序的运作,例如提供循环型例行性工作排程服务就是crond这个daemon。没有提供服务的daemon的话,就不会有service拉。
以往我们启动服务都是依靠/etc/init.d目录下的脚本文件,现在我们主要都用systemd这个启动服务咯,而这个服务靠systemctl这个指令。以前的systemV都需要 service /chkconfig/setup/init等指令协助,现在只需要 systemctl 就可以完成全部操作啦。所以下面我们主要就来学习systemctl这个家伙!
(1)下面这些参数都很常用哦,启动,关闭,重启服务,设置开机自启动,取消开机自启动,查看状态。要熟悉应用哈!
所以正常我们都通过这个指令来关闭指定的服务,而不是直接kill -9杀死那个进程哦😁
(2)用systemctl观察系统上所有服务(了解下哦)
看看具体怎么操作的哈
(3)玩转模式(命令行模式和图形界面的切换)
(4)systemetl系统默认的配置文件主要放在/usr/lib/systemd/system, 管理员若要修改或自行设计时,则建议放
在/etc/systemd/system/ 目录下。正常情况下我们不需要去修改它。
好了,就了解这么多,知道有这个家伙,简单的操作就可以了。如果还想了解更多得再去网上找些资料了i。
9.3 软件安装:RPM和YUM
其实鸟哥书上还有tarball原始码编译安装,但是这个太麻烦了,所以就产生了软件管理员:RPM和的Debian的dpkg。centos以RPM为主,接着又产生了在线升级机制yum和APT。咱们看一下图理解它们之间的关系。
我们这边主要学习RPM和yum这两种安装软件的方式哈。提前说明下呀,实际在我们用CentOS中主要利用RPM来查询与检验,软件安装我们主要用yum哦。
9.3.1 RPM安装和查询
(1)先了解RPM软件的信息
硬件平台支持:
(2)RPM安装(install)
#先找到rpm包的位置,我之前挂载在哪我也不知道了,所以find一下。没有就重新挂载光盘就可以了
[root@www ~]# find / -name *rpm | head -n 5
#进入到这个rpm包的目录就可执行rpm安装拉
[root@www ~]# cd /var/cache/yum/x86_64/7/base/packages
还有参数和选项说明下
建议直接用ivh,出现问题一个个去排错,所以说rpm安装软件会出现一些问题,建议使用yum
(2)rpm升级与更新
(3)rpm查询(query)
这个就很常用拉,每次安装服务前可以先检查相关软件是否安装,然后再补充安装其他的软件。参数如下:
我们常用的就是rpm -qa 再加上过滤出我们想要查的软件就可以了。
[root@www packages]# rpm -qa | grep bind
bind-libs-9.9.4-74.el7_6.1.x86_64
bind-license-9.9.4-74.el7_6.1.noarch
rpcbind-0.2.0-47.el7.x86_64
bind-libs-lite-9.9.4-74.el7_6.1.x86_64
keybinder3-0.3.0-1.el7.x86_64
bind-utils-9.9.4-74.el7_6.1.x86_64
9.3.2 YUM在线升级机制
我们在本章一开始的地方谈到过yum这玩意儿,这个yum是透过分析RPM的标头资料后,根据各软件的相关性制作出属性相依时的解决方案,然后可以自动处理软件的相依属性问题,以解决软件安装或移除与升级的问题。就是非常方便哦!
(1)yum查询、安装、升级与移除
- 查询功能
#列出yum服务器上所提供的所有软件名称,
[root@www packages]# yum list
#已经安装的软件
Installed Packages
GConf2.x86_64 3.2.6-8.el7 @anaconda
GeoIP.x86_64 1.5.0-13.el7 @anaconda
ModemManager.x86_64 1.6.10-1.el7 @anaconda
#还可以安装的软件
Available Packages
0ad.x86_64 0.0.22-1.el7 epel
0ad-data.noarch 0.0.22-1.el7 epel
0install.x86_64
#注意利用通配符*(记不清软件名字的情况下)
[root@www packages]# yum list pam*
#列出目前服务器可供本机升级的软件
[root@www packages]# yum list updates
#搜寻磁盘阵列(raid)相关的软件
root@www packages]# yum search raid
#找出mdadm这个软件的功能,查出的信息要会看哦 不会的单词百度哦
[root@www packages]# yum info mdadm
Installed Packages
Name : mdadm
Arch : x86_64
Version : 4.1
Release : rc1_2.el7
Size : 1.0 M
Repo : installed
From repo : anaconda
Summary : The mdadm program controls Linux md devices (software RAID arrays)
URL : http://www.kernel.org/pub/linux/utils/raid/mdadm/
License : GPLv2+
Description : The mdadm program is used to create, manage, and monitor Linux MD (software
: RAID) devices. As such, it provides similar functionality to the raidtools
: package. However, mdadm is a single program, and it can perform
: almost all functions without a configuration file, though a configuration
: file can be used to help with some common tasks.
#找出提供passwd这个文件的软件有哪些,这样就可以针对性安装软件啦
[root@www packages]# yum provides passwd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
passwd-0.79-5.el7.x86_64 : An utility for setting or changing passwords using PAM
Repo : base
#
(2)安装和升级功能(install/update)卸载软件(remove),也很简单,模仿下面的就OK了。
#可以不用加参数,这边加参数的话,下载默认就是yes了。
[root@www packages]# yum install pam-devel -y
[root@www packages]# yum update pam-devel
[root@www packages]# yum remove pam-devel
#假如要全系统升级呢
[root@www ~]# yum -y update
(3)yum的配置文件(very important )
① 配置网络源
yum是联机到centos官网上进行安装的,但是有时下载会很慢,这是我们就需要修改到速度快的网站上进行下载。这边我们选择昆大的FTP作为yum源哈。以后有需要再修改,这个很灵活的。下面就是就是昆大的。
http://ftp.ksu.edu.tw/FTP/CentOS/7/
如果你连接到上述的网址后,就会发现里面有一堆连结,那些连结就是这个yum服务器所提供的软件库了!所以高速网络中心也提供了centosplus, cloud, extras, fasttrack, os, updates等软件库,最好认的软件库就是os (系统默认的软件)与updates (软件升级版本),由于鸟哥主机是利用x86_64的版本,因此那个os再点进去就会得到如下的可提供安装的网址:
http://ftp.ksu.edu.tw/FTP/CentOS/7/os/x86_64/
这个链接最重要的就是【repodata】,该目录就是分析RPM软件后所产生的软件属性相依数据放置处!因此,当你要找软件库所在网址时,最重要的就是该网址底下一定要有个名为repodata 的目录存在!那就是软件库的网址了!其他的软件库正确网址,就请各位看信自行寻找一下喔!现在让我们修改配置文件吧! 重点来了哈!
我们编辑下面这个文件,具体每行含义可参考下下面的图片哦,这边我们只需要修改baseurl这一栏,并把#去掉。
[root@www yum.repos.d]# vim CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=http://ftp.ksu.edu.tw/FTP/CentOS/7/os/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
baseurl=http://ftp.ksu.edu.tw/FTP/CentOS/7/os/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
baseurl=http://ftp.ksu.edu.tw/FTP/CentOS/7/os/x86_64/
gpgcheck=1
#用下面这个命令检查改过的软件库是否生效,如图是生效的
[root@www yum.repos.d]# yum repolist all
[root@www yum.repos.d]# yum repolist all | grep enabled
base/7/x86_64 CentOS-7 - Base enabled: 10,097
epel/x86_64 Extra Packages for Enterprise Linux enabled: 13,227
extras/7/x86_64 CentOS-7 - Extras enabled: 341
updates/7/x86_64 CentOS-7 - Updates enabled: 1,787
#记得清除本机的旧数据
[root@www yum.repos.d]# yum clean all
② 配置epel源
(这里的软件可能更全,因为工作关系可能用到第三方软件,这时就需要它啦,我们可以网上搜很多epel源,下面我用的是阿里的centos7的)平时不用 enabled那边设置为0,必要的时候再开启epel源哦。
[root@www yum.repos.d] curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@www yum.repos.d] yum clean all
[root@www yum.repos.d] yum makecache
#我们可以观察下这个文件
[root@www yum.repos.d]# vim epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=http://mirrors.aliyun.com/epel/7/$basearch/debug
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0
[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=http://mirrors.aliyun.com/epel/7/SRPMS
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0
~
③ 配置本地源
在有的公司里面会专门搭建ftp服务器来给本地的主机yum安装软件 ,这个可以用我们先搭建一个ftp服务器,各个主机再重新配置base文件,按上面第一个配置方法就行。但是这边没有本地ftp服务器,也可以配置本地源安装,可以用光盘实现哦(使用没有网络却需要解决很多软件依赖的问题)
假如我们把光盘挂载在/mnt 这个目录,enabled改为1才好。
十、登录档、备份策略、模块管理、X Windows及kernel
这一章我就简单整理了一下,我觉得新手刚开始了解一下就OK了,以后学习过程中遇到的话再去琢磨下!
10.1 登录档
当你的Linux 系统出现不明原因的问题时,很多人都告诉你,你要查阅下登录文件才能够知道系统出了什么问题了,所以说,了解登录档是很重要的事情呢。登录文件可以记录系统在什么时间、哪个主机、哪个服务、出现了什么讯息等信息,这些信息也包括用户识别数据、系统故障排除须知等信息。如果你能够善用这些登录文件信息的话,你的系统出现错误时,你将可以在第一时间发现,而且也能够从中找到解决的方案,而不是昏头转向的乱问人呢。此外, 登录文件所记录的信息量是非常大的,要人眼分析实在很困难。此时利用shell script 或者是其他软件提供的分析工具来处理复杂的登录档,可以帮助你很多很多喔!
「详细而确实的分析以及备份系统的登录文件」是一个系统管理员应该要进行的任务之一。那么什么是登录档呢?简单的说,就是记录系统活动信息的几个文件,例如:何时、何地(来源IP)、 何人(什么服务名称)、做了什么动作(讯息登录哕)。换句话说就是:记录系统在什么时候由哪个程序做了什么样的行为时,发生了何种的事件等等。
-
登录文件可以记录一个事件的何时、何地、何人、何事等四大信息,故系统有问题时务必查询登录档;
-
系统的登录文件默认都集中放置到/var/log/ 目录内,其中又以messages 记录的信息最多!
-
登录文件记录的主要服务与程序为: systemd-journald.service, rsyslog.service, rsyslogd
-
rsyslogd的配置文件在/etc/rsyslog.conf ,内容语法为:「服务名称.等级记载装置或文件J
-
rsyslogd本身有提供登录文件服务器的功能,透过修改/etc/rsyslog. conf内容即可达成;
-
透过linux 的syslog 函数查询,了解上述服务名称有kernel, user, mail..从0到23的服务序号
-
承上,等级从不严重到严重依序有info, notice, warning, error, critical, alert, emergency等
-
logrotate程序利用crontab 来进行登录文件的轮替功能;
-
logrotate的配置文件为/etc/logrotate.conf ,而额外的设定则可写入/etc/logrotate.d/* 内;
-
新的CentOS 7由于内建systemd-journald.service 的功能,可以使用journalctl 直接从内存读出登录文件,查询效能较佳
-
logwatch为CentOS7预设提供的一个登录文件分析软件。
前面都是系统带的登录档分析工具。我们再借助鸟哥自己写的工具,很好用哦。(centos6以前的版本不要用哦)
主要分析如下内容:
下面就可以模仿我操作咯:😎
#curl命令我会在后面和wget及软件安装那边有介绍哈 这边就是下载这个工具到/目录并命名
[root@agent ~]#curl -o /logfile_centos7.tar.gz http://linux.vbird.org//linux_basic/0570syslog//logfile_centos7.tar.gz
#解压
[root@agent ~]# tar -zxvf /logfile_centos7.tar.gz -C /
#查看这个文件是否正确
[root@agent ~]# cat /etc/cron.d/vbirdlogfile
10 0 * * * root /bin/bash /root/bin/logfile/logfile.sh &> /dev/null
#执行脚本
[root@agent ~]# sh /root/bin/logfile/logfile.sh
#开始利用工具观察,直接回车查看就好了,注意观察登录日志信息
[root@agent ~]# mail
#类似如下信息
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 4 messages
> 1 user1@agent.localdom Tue Mar 31 10:12 17/642 "*** SECURITY information for agent ***"
2 user1@agent.localdom Wed Apr 1 01:45 17/628 "*** SECURITY information for agent ***"
3 user1@agent.localdom Wed Apr 1 01:46 17/628 "*** SECURITY information for agent ***"
4 root Wed Apr 1 09:13 70/3168 "agent logfile analysis results"
&
Message 1:
From root@agent.localdomain Tue Mar 31 10:12:34 2020
Return-Path: <root@agent.localdomain>
X-Original-To: root
Delivered-To: root@agent.localdomain
To: root@agent.localdomain
From: user1@agent.localdomain
Auto-Submitted: auto-generated
Subject: *** SECURITY information for agent ***
Date: Tue, 31 Mar 2020 10:12:33 +0800 (CST)
Status: RO
agent : Mar 31 10:12:33 : user1 : user NOT in sudoers ; TTY=pts/1 ; PWD=/home/user1/bin ; USER=root ; COMMAND=/bin/cat /etc/shadow
#看看硬件和操作系统信息,尤其partition使用量需要随时注意
=============== system summary =================================
Linux kernel : Linux version 3.10.0-957.21.3.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org)
CPU informatin: 1 Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
CPU speed : 1800.002 MHz
hostname is : agent
Network IP : 192.168.119.153 192.168.122.1
Check time : 2020/April/01 09:13:20 ( Wednesday )
Summary date : Apr 1
Up times : 11:48,
Filesystem summary:
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 47G 5.9G 42G 13% /
devtmpfs devtmpfs 911M 0 911M 0% /dev
tmpfs tmpfs 928M 284K 927M 1% /dev/shm
tmpfs tmpfs 928M 11M 917M 2% /run
tmpfs tmpfs 928M 0 928M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 206M 809M 21% /boot
tmpfs tmpfs 186M 8.0K 186M 1% /run/user/42
tmpfs tmpfs 186M 0 186M 0% /run/user/0
tmpfs tmpfs 186M 36K 186M 1% /run/user/1000
#这个程序会针对Internet与内部监听的端口号分开显示,注意观察哈
================= Ports 的相關分析資訊 =======================
主機啟用的 port 與相關的 process owner:
對外部介面開放的 ports (PID|owner|command)
tcp 22|(root)|/usr/sbin/sshd -D
tcp 25|(root)|/usr/libexec/postfix/master -w
tcp 53|(nobody)|/usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/de
tcp 111|(root)|/usr/lib/systemd/systemd --switched-root --system --deseri
tcp 631|(root)|/usr/sbin/cupsd -f
tcp 6010|(root)|sshd: root@pts/0
tcp 6011|(root)|sshd: root@pts/2
tcp 10050|(zabbix)|/usr/local/zabbix//sbin/zabbix_agentd
udp 53|(nobody)|/usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/de
udp 67|(nobody)|/usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/de
udp 68|(root)|/sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /v
udp 111|(root)|/usr/lib/systemd/systemd --switched-root --system --deseri
udp 1011|(rpc)|/sbin/rpcbind -w
udp 5353|(avahi)|avahi-daemon: running [agent.local]
udp 46608|(avahi)|avahi-daemon: running [agent.local]
#一下针对有启动的服务个别进行分析
================= SSH 的登錄檔資訊彙整 =======================
一共成功登入的次數: 2
帳號 來源位址 次數
root 192.168.119.1 2
================= Postfix 的登錄檔資訊彙整 ===================
使用者信箱受信次數:
&
At EOF
&
10.2 基础系统设定和备份策略
10.2.1 基础系统设定 (网络,语系和防火墙)
例如网络、语系、日期、时间和防火墙的基础设定,其实这些在图形界面就可以设定拉,但是我们还是简单了解下命令吧。
(1)网络设定(手动和DHCP)借助nmcli 这个命令
查看网卡信息::
修改网卡eth0为手动设置:
自动获取:
修改主机名:
[root@agent ~]# hostnamectl set-hostname www.centos.gsq
[root@agent ~]# cat /etc/hostname
www.centos.gsq
(2)时间设定就不说了,常见还有语系设定,分别有系统语系及软件的语系(我们之前设置的是软件的语系,locale)。下面观察对比一下:
#系统语系的设置,下面的编码格式建议还是设置“en_US.utf8”
[root@agent ~]# localectl set-locale LANG="zh_CN.UTF-8"
[root@agent ~]# systemctl isolate multi-user.target
[root@agent ~]# systemctl isolate graphical.target
[root@agent ~]# localectl
System Locale: LANG=zh_CN.UTF-8
VC Keymap: us
X11 Layout: us
#软件语系设定,下面两个一个是短暂设置,另一个永久更改
[root@agent ~]$ locale
[root@agent ~]$ LANG=en_US.utf8
[root@agent ~]$ export LC_ALL=en_US.utf
#永久生效,这个是root用户下面的,不同用户到各自的主目录下找到这个文件
[root@www yum.repos.d]# echo 'export LANG=en_US.utf8' >> /root/.bash_profile
[root@www yum.repos.d]# source /root/.bash_profile
(3)防火墙的设定,直接可以通过图形界面设定,也可以通过命令来进行配置。后面我会专门写一篇防火墙的配置哈。
10.2.2 备份策略和灾难复原
每个主机的任务,数据重要性都不一样,所以备份策略也就不尽相同。按理说我们只需要备份重要的数据就OK了。例如网站的要备份/home与网页数据,但天天备份系统也受不了。我们可以看一下鸟哥的备份策略(后面借鉴下鸟哥的脚本):
- 1. 主机硬件:使用一个独立的 filesystem 来储存备份数据,此filesystem 挂载到/backup 当中;
- 2. 每日进行:目前仅备份MySQL数据库;
- 3. 每周进行:包括 /home, /var, /etc, /boot, /usr/local 等目录与特殊服务的目录;
- 4. 自动处理:这方面利用 /etc/crontab 来自动提供备份的进行;
- 5. 异地备援:每月定期的将数据分别 (a) 刻录到光盘上面 (b) 使用网络传输到另一部机器上面。
(1)每周系统备份的script(修改自己的保存路径就好了)
[root@agent ~]# mkdir /backup
[root@agent ~]# curl -o /backup/backupwk.sh http://linux.vbird.org/linux_basic/0580backup/backupwk-0.1.sh
[root@www ~]# vim /backup/backupwk.sh
#!/bin/bash
# ====================================================================
# 使用者參數輸入位置:
# basedir=你用來儲存此腳本所預計備份的資料之目錄(請獨立檔案系統)
basedir=/backup/weekly
# ====================================================================
# 底下請不要修改了!用預設值即可!
PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH
export LANG=C
# 設定要備份的服務的設定檔,以及備份的目錄
named=$basedir/named
postfixd=$basedir/postfix
vsftpd=$basedir/vsftp
sshd=$basedir/ssh
sambad=$basedir/samba
wwwd=$basedir/www
others=$basedir/others
userinfod=$basedir/userinfo
# 判斷目錄是否存在,若不存在則予以建立。
for dirs in $named $postfixd $vsftpd $sshd $sambad $wwwd $others $userinfod
do
[ ! -d "$dirs" ] && mkdir -p $dirs
done
# 1. 將系統主要的服務之設定檔分別備份下來,同時也備份 /etc 全部。
cp -a /var/named/chroot/{etc,var} $named
cp -a /etc/postfix /etc/dovecot.conf $postfixd
cp -a /etc/vsftpd/* $vsftpd
cp -a /etc/ssh/* $sshd
cp -a /etc/samba/* $sambad
cp -a /etc/{my.cnf,php.ini,httpd} $wwwd
cd /var/lib
tar -jpc -f $wwwd/mysql.tar.bz2 mysql
cd /var/www
tar -jpc -f $wwwd/html.tar.bz2 html cgi-bin
cd /
tar -jpc -f $others/etc.tar.bz2 etc
cd /usr/
tar -jpc -f $others/local.tar.bz2 local
# 2. 關於使用者參數方面
cp -a /etc/{passwd,shadow,group} $userinfod
cd /var/spool
tar -jpc -f $userinfod/mail.tar.bz2 mail
cd /
tar -jpc -f $userinfod/home.tar.bz2 home
cd /var/spool
tar -jpc -f $userinfod/cron.tar.bz2 cron at
(2)每日备份资料的script(鸟哥只提供了MariaDB的数据库备份,其他数据要备份的话模仿造句 就好咯)
#!/bin/bash
# =========================================================
# 請輸入,你想讓備份資料放置到那個獨立的目錄去
basedir=/backup/daily/
# =========================================================
PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH
export LANG=C
basefile1=$basedir/mysql.$(date +%Y-%m-%d).tar.bz2
basefile2=$basedir/cgi-bin.$(date +%Y-%m-%d).tar.bz2
[ ! -d "$basedir" ] && mkdir $basedir
# 1. MysQL (資料庫目錄在 /var/lib/mysql)
cd /var/lib
tar -jpc -f $basefile1 mysql
# 2. WWW 的 CGI 程式 (如果有使用 CGI 程式的話)
cd /var/www
tar -jpc -f $basefile2 cgi-bin
这样系统就会自动的在每天的2:30 进行Mariadb 的备份,而在每个星期日的3:30 进行重要文件的备份(扯到crontab的知识啦)。
这两个备份脚本值得去摸索下,另外不是在系统上备份就好了,还要定期把/backup里的资料copy出来,防止系统挂掉。
(3)灾难复原
若系统真的挂掉的话,又该怎么还原系统呢?
10.3 开机流程与模块管理、X window及Linux核心编译
这一章节我们就了解下,有兴趣的同学可以看这本书《鸟哥Linux的私房菜》哦,有电子版的网上都会有,不行也可以私信我哈,亲手奉上。这边我就简单梳理了下。
10.3.1 开机流程与模块管理
忘记root密码怎么办呢?可以看前面章节“账号管理”,我就不就不再赘余了哈
-
Linux不可随意关机,否则容易造成文件系统错乱或者是其他无法开机的问题;
-
开机流程主要是: BIOS、 MBR、Loader、kernel+initramfs、 systemd 等流程
-
Loader具有提供选单、加载核心文件、转交控制权给其他loader 等功能。
-
boot loader可以安装在MBR或者是每个分区槽的boot sector区域中
-
initramfs可以提供核心在开机过程中所需要的最重要的模块,通常与磁盘及文件系统有关的模块;
-
systemd的配置文件为主要来自 /etc/systemd/system/default.target 项目;
-
额外的装置与模块对应,可写入 /etc/modprobe.d/*.conf 中;
-
核心模块的管理可使用 lsmod, modinfo, rmmod, insmod, modprobe 等指令;
-
modprobe主要参考 /lib/modules/$(uanem -)/modules.dep 的设定来加载与卸除核心模块;
-
grub2的配置文件与相关文件系统定义档大多放置于 /boot/grub2 目录中,配置文件名为grub.cfg
-
grub2对磁盘的代号设定与Linux 不同,主要透过侦测的顺序来给予设定。如(hd0)及(hd0,1) 等。
-
grub.cfg内每个选单与menuentry 有关,而直接指定核心开机时,至少需要linux16及initrd16 两个项目
-
grub.cfg内设定loader 控制权移交时,最重要者为chainloader+1 这个项目。
-
若想要重建 initramfs ,可使用 dracut 或 mkinitrd 处理
-
重新安装 grub2 到 MBR 或 boot sector 时,可以利用grub2-install 来处理。
-
若想要进入救援模式,可于开机选单过程中,在linux16 的项目后面加入「rd.break J 或「init=/bin/bash 」等方式来进入 救援模式。
-
我们可以对grub2的个别选单给予不同的密码。
10.3.2 认识 X window
X-window 是UNIX和类Unix中功能强大的 图形用户接口(GUI),是基于客户-服务器的一种应用技术。表现为应用可运行在一个功能强大,易与维护的服务器上,而屏幕的输出则显示在另一个工作站上. X-window 技术包括两个成员: X-server 和 Window Manager。 X-server 控制图像和窗口的显示, 跟踪鼠标和键盘的操作。一个X-server可控制多个窗口。Window Manager 则用于显示窗口的菜单和边界,提供窗口的移动,转换,最大,最小化操作。
-
Unix Like操作系统上面的GUI使用的是最初由MIT所开发的 X window system,在1987 释出X11版,并于1994更改为X11R6,故此GUI界面也被称为 X 或 X11
-
X window system的 X server 最初由 XFree86 计划所开发,后来则由Xorg 基金会所持续开发:
-
X window system主要分为 X server 与 X client , 其中X Server在管理硬件,而 X Client则是应用程序。
-
在运作上,X Client应用程序会将所想要呈现的画面告知 X Server,最终由X server来将结果透过他所管理的硬件绘制出来!
-
每一支 X client都不知道对方的存在,必须要透过特殊的X client,称为Window Manager的,来管理各窗口的重迭、移动、最小化等工作。
-
若有需要登入图形接口,有时会有Display Manager来管理这方面的动作
-
startx可以侦测 X server / X client的启动脚本,并呼叫 xinit 来分别执行;
-
X可以启动多个,各个X显示的位置使用 -display 来处理,显示位置为:0, 1...
-
Xorg 是一个X server,配置文件位于/etc/X11/xorg.conf ,里面含有Module, Files, Monitor, Device等设定阶段。目前较新的设定中,会将额外的设定放置于/etc/X11/xorg .conf.d/* .conf
10.3.3 Linux核心编译和管理
我们说的Linux 其实指的就是核心(kernel) 而已。这个核心控制你主机的所有硬件并提供系统所有的功能。我们开机的时候其实就是利用开机管理程序加载这个核心文件来侦测硬件,在核心加载适当的驱动程序后,你的系统才能够顺利的运作。现今的系统由于强调在线升级机制,因此非常不建议自定义核心编译!但是,如果你想要将你的Linux 安装到USB随身碟、想要将你的Eee PC小笔电安装自己的Linux ,想让你的 Linux 可以驱动你的小家电,此时,核心编译就是相当重要的一个任务了!这一篇比较进阶,如果你对系统移植没有兴趣的话,这一篇可以先略过哦!😅
简单了解一下也挺好,这章确实蛮难的。
-
其实核心就是系统上面的一个文件而已,这个文件包含了驱动主机各项硬件的侦测程序与驱动模块;
-
上述的核心模块放置于: /lib/modules/$(uname -r)/kernel/
-
「驱动程序开发」的工作上面来说,应该是属于硬件发展厂商的问题
-
一般的用户,由于系统已经将核心编译的相当的适合一般使用者使用了,因此一般入门的使用者,基本上,不太需要编译核心
-
编译核心的一般目的:新功能的需求、原本的核心太过臃肿、与硬件搭配的稳定性、其他需求(如嵌入式系统)
-
编译核心前,最好先了解到您主机的硬件,以及主机的用途,才能选择好核心功能;
-
编译前若想要保持核心原始码的干净,可使用 make mrproper 来清除暂存盘与配置文件;
-
挑选核心功能与模块可用make 配合: menuconfig, oldconfig, xconfig, gconfig等等
-
核心功能挑选完毕后,一般常见的编译过程为: make bzImage, make modules
-
模块编译成功后的安装方式为: make modules_ install
-
核心的安装过程中,需要移动bzImage 文件、建立 initramfs 文件、重建grub.cfg 等动作;
-
我们可以自行由硬件开发商之官网下载驱动程序来自行编译核心模块!
终于总结完了,希望也对大家有用,也欢迎私信我交流讨论呐!后面我就开始写各种网站的部署和相关服务器的搭建!😀