前言:我只总结了我不太清晰的点,需要完整观看书籍的可以下载:https://u15372029.pipipan.com/fs/15372029-393101184
权限结构分析:文件类型,所有者,所属组,其他人
文件类型分为:
- 普通文件
d 目录文件
l 符号链接文件
b 块设备文件
c 字符设备文件
p 管道文件
s 套接字权限
r:4 w:2 x:1
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others = --- = 0+0+0 = 0
当用户user1,对/testdir 目录有写和执行权限时,该目录下的只读文件file1是否可修改和删除?
答:不可修改,可删除
默认权限:
特殊权限:
sudo权限
文件系统属性权限
chgrp:修改文件所属用户组
chown:修改文件拥有者
chown [-R] 账户名称 文件或目录
chown [-R] 账户名称:用户组名称 文件或目录
chmod:修改文件的权限,SUID、SGID、SBIT等的特性。
数字类型修改文件权限
chmod [-R] xyz 文件或目录
chmod 777 文件或目录
符号类型修改文件权限
u g o a
+(加入) -(移除) =(设置)
示例:
chmod u=rwx,go=rx .bashrc
目录的相关操作
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表目前使用者身份所在的家目录
~account 代表account这个使用者的家目录(account是个账户名称)
Vim:https://blog.csdn.net/qq_39578545/article/details/104848900
vim三种模式:
快捷键
nG n为数字,移动到这个文件的第n行。例如20G则会移动到这个文件的第20行(可配合:set nu)
gg 移动到这个文件的第一行,相当于1G(常用)
G 按G到最后一行
/word 向光标之下寻找一个名称为word的字符串。例如要在文件内搜寻vbird这个字符串,就输入 /vbird即可
?word 向光标之上寻找一个字符串名称为word的字符串
n 向下搜索
N 向上搜索
dd 删除行
ndd 删除指定行
d1G 删除光标到第一行的所有数据
dG 删除光标到最后一行的所有数据
yy 复制游标所在的那一行
nyy n为数字。复制光标所在向下20行,例如20yy则是复制20行(常用)
yG 复制光标所在列到第一列的所有数据
p 粘贴,光标在20行,则在21行开始贴
P 粘贴,光标在20行,那么原本的第20行会被推到变成30行
u 撤销
ctrl + r 重做上一个动作
区块选择(Visual Block),当我们按下 v 或者 V 或者 【ctrl + v】
:r filename 来读入某个文件的内容
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个vim的开启的所有文件
示例:将hosts内的前四列IP资料复制到/etc/hosts文件内
在指令列模式输入【:sp {filename}】,如果想要在新窗口启动另一个文件,就加入档名,否则仅输入【:sp】时,出现的则是同一个文件在两个窗口间。
可以利用【ctrl+w+↑】及【ctrl+w+↓】,在两个窗口之间移动。
~/.vimrc,~/.viminfo
可以通过一般指令模式时输入【:set all】来查阅所有设置参数。
整体vim的设定值一般是放置在 /etc/vimrc
这个文件,不过,不建议修改。可以修改~/.vimrc
这个文件。
systemd是一个启动服务机制,早期是通过init进行管理。现在是systemd占主流,init占一小部分。
systemd的好处:
虽然如此,不过systemd也是有些地方无法完全取代init的!包括:
systemd的配置文件放置目录:
基本上,systemd将过去所谓的daemon执行脚本通通称为一个服务单位(unit),而每种服务单位依据功能来区分时,就分类为不同的类型(type)。基本的类型有包括系统服务、数据监听与交换的插槽档服务(socket)、储存系统状态的快照类型、提供不同类似执行等级分类的操作环境(target)等。
也就是说,到底系统开机会不会执行某些服务其实是看/etc/systemd/system/底下的设定,所以该目录底下就是一大堆连结档(如target)。而实际执行的systemd启动脚本配置文件,其实都是放置在/usr/lib/systemd/system/底下的喔!因此如果你想要修改某个服务启动的设定,应该要去/usr/lib/systemd/system/底下修改才对!/etc/systemd/system/仅是连结到正确的执行脚本配置文件而已。所以想要看执行脚本设定,应该就得要到/usr/lib/systemd/system/底下去查阅才对!
systemd的unit类型分类说明
vsftpd 与crond 其实算是系统服务(service),而multi-user要算是执行环境相关的类型(target type)。根据这些扩展名的类型,我们大概可以找到几种比较常见的systemd的服务类型如下:
systemd管理服务
系统上面有多少的服务存在?这个时候就得透过list-units(默认)
及list-unit-files
来观察了。
具体systemctl请看PDF。
ryslog日志管理:https://blog.csdn.net/qq_39578545/article/details/105030690
所谓的logrotate基本上,就是将旧的登录档更改名称,然后建立一个空的登录档,如此一来,新的登录文件将重新开始记录,然后只要将旧的登录档留下一阵子,嗯!那就可以达到将登录档【轮转】
使用systemd提供的journalctl日志管理
系统上所有经由systemd启动的服务,如果再启动或结束的过程中发生一些问题或者是正常的讯息,就会将该讯息由systemd-journald.service
以二进制的方式记录下来(它的记录主要都放置于内存中),之后再将这个讯息发送给rsyslog.service做进一步的记载。
rsyslog.service的配置文件/etc/rsyslog.conf,这个文件规定了【(1)什么服务、(2)什么等级讯息、(3)需要记录在哪里】。
讯息等级
在0(emerg)到6(info)的等级之间,等级数值越高代表越没事。
chattr +a,加入了这个属性之后,你的/var/log/admin.log登录档从此就仅能被增加,而不能被删除,直到root以【chattr-a /var/log/admin.log】取消这个a的参数之后,才能被删除或移动喔!
这个旗标最大的用处除了在保护你登录文件的数据外,他还可以帮助你避免掉不小心写入登录档的状况喔。要注意的是,当[你不小心“手动“更动过登录档后,例如那个
/var/log/messages,你不小心用vi开启他,离开却下达:wq的参数!【】么该文件未来将不会再继续进行登录动作!】这个问题真的很常发生!由于你以vi储存了登录档,则rsyslogd 会误判为该文件已被更动过,将导致rsyslogd不再写入该文件新的内容。
要让该登录档可以继续写入,你只要重新启动rsyslogd.service即可。
不过,也因为这个+a的属性让该文件无法被删除与修改,所以当我们进行登录文件轮替时
(logrotate),将会无法移动该登录档的档名。这个困扰虽然可以使用logrotate的配置文件来解决,但是,还是先将登录档的+a旗标拿掉吧!
下面的chattr的解决方案有解决方案。
让某一部主机当成【登录文件服务器】,用他来记录所有的十部Linux主机的信息。
CentOS 7.x预设的rsyslogd本身就已经具有这个登录文件服务器的功能了,只是默认并没有启动该功能而已。
服务端配置:
客户端配置:
再重新启动rsyslog.service后,在主机上面的登录文件/var/log/admin.log当中,每一行的【主机名】就会显示来自不同主机的信息。
特别留意:rsyslogd利用的是daemon的方式来启动的,当有需求的时候立刻就会被执行的,但是logrotate却是在规定的时间到了之后才来进行登录档的轮替,所以这个logrotate程序是挂载cron底下进行,可以通过/etc/cron.daily/logrotate记录了每天要进行的登录档轮替的行为,工作原理如下:
查看一下/etc/logrotate.conf文件
以/etc/logrotate.d/syslog这个轮替rsyslog.service服务的文件。
假设我们有针对/var/log/messages 这个文件增加chattr+a的属性时,依据 logrotate的工作原理,我们知道,这个/var/log/messages将会被更名成为/var/log/messages.1才是。但是由于加上这个+a的参数啊,所以更名是不可能成功的!那怎么办呢?呵呵!就利用prerotate与postrotate来进行登录档轮替前、后所需要作的动作啊!!!
先给他去掉a这个属性,让登录文件/var/log/mesages可以进行轮替的动作,然后执行了轮替之后,再给他加入这个属性!请特别留意的是,那个/bin/kill -HUP…的意义,这一行的目的在于将系统的rsyslogd重新以其参数档(rsyslog.conf)的资料读入一次!也可以想成是reload的意思啦!由于我们建立了一个新的空的记录文件,如果不执行此一行来重新启动服务的话,那么记录的时候将会发生错误!!!
上面那个-f具有【强制执行】的意思,如果一切的设定都没有问题的话,那么理论上,你的/var/log这个目录就会起变化啰!而且应该不会出现错误讯息才对!
由于logrotate的工作已经加入crontab里头了!所以现在每天系统都会自动的给他查看logrotate。只是要注意一下那个/var/log/messages里头是否常常有类似底下的字眼:
Aug 2001:45:34 study rsyslogd:[origin software="rsyslogd"swVersion="7.4.7"x-pid=“2145”
x-info=“http://ww.rsyslog.com”]rsyslogd was HUPed这说明的是rsyslogd重新启动的时间啦(就是因为/etc/logrotate.d/syslog的设定之缘故!)
假设前提是这样的,前一小节当中,假设你已经建立了/var/log/admin.log这个文件,现在,你想要将该文件加上+a这个隐藏标签,而且设定底下的相关信息:
再强调一次,这个systemd-journald.servicd的讯息是不会放到下一次开机后的,所以,重新启动后,那之前的记录通通会遗失。虽然我们大概都有启动rsyslogd这个服务来进行后续的登录档放置,不过如果你比较喜欢journalctl的存取方式,那么可以将这些数据储存下来喔!
基本上,systemd-journald.service的配置文件主要参考/etc/systemd/journald.conf的内容,详细的参数你可以参考man 5 journald.conf的资料。
只是如果想要保存你的journalctl所读取的登录档,那么就得要建立一个/var/log/journal的目录,并且处理一下该目录的权限,那么未来重新启动systemd-journald.service之后,日志登录文件就会主动的复制一份到/var/log/journal目录下啰!
详细版:
简述版:
1、主机加电自检,加载 BIOS 硬件信息,BIOS进行系统检测。
2、读取 MBR 的引导文件(GRUB、LILO)。
3、引导 Linux 内核。
4、由内核启动运行第一个进程 init (进程号永远为 1 )。(会去读取inittab文件,执行rc.sysinit,,rc文件 /etc/rc.d/rc.local等脚本)
5、进入相应的运行级别
6、运行终端,输入用户名和密码。
(1)第一种方法
进入救援 rescue 模式,并且挂载 / 目录,重新设定一下 root 密码。
(2)第二种方法
但是在新版的systemd的管理机制中,默认的rescue模式是无法直接取得root权限,还是要使用root的密码才能够登入 rescue环境。这下有什么解决方案?通过 【rd.break】的核心参数来处理。只是需要注意的是,rd.break是在Ram Disk里面的操作系统状态,因此你不能直接取得原本的linux系统操作环境。所以,还需要chroot的支持!更由于SELinux的问题,你可能还得要加上某些特殊的流程才能顺利的搞定root 密码的救援喔!
现在就让我们来实作一下吧!(1)按下systemctl reboot 来重新启动,(2)进入到开机画面,在可以开机的选单上按下e来进入编辑模式,然后就在linux16的那个核心项目上面使用这个参数来处理:
改完之后按下[ctrl]+x开始开机,开机完成后屏幕会出现如下的类似画面,此时请注意,你应该是在RAMDisk的环境,并不是原本的环境,因此根目录底下的东西跟你原本的系统无关喔!而且,你的系统应该会被挂载到/sysroot目录下,因此,你得要这样作:
Ctrl+x同上但再按一次会从新回到原位置
不过加上/.autorelabel之后,系统在开机就会重新写入SELinux的type到每个文件,因此会花不少的时间喔!如果你不想要花太多时间,还有个方法可以处理:
restorecon -Rv /etc
仅修改/etc底下的文件;如果因为设定错误导致无法开机时,要怎么办啊?这就更简单了!最容易出错的设定而导致无法顺利开机的步骤,通常就是/etc/fstab这个文件了,尤其是使用者在实作 Quota/LVM/RAID
时,最容易写错参数,又没有经过mount -a来测试挂载,就立刻直接重新启动,真要命!无法开机成功怎么办?
看到最后两行,他说可以输入root的密码继续加以救援喔!那请输入root的密码来取得bash并以mount -o remount,rw /
将根目录挂载成可擦写后,继续处理吧!其实会造成上述画面可能的原因除了
/etc/fstab编辑错误之外,如果你曾经不正常关机后,也可能导致文件系统不一致(Inconsistent)的情况,也有可能会出现相同的问题啊!如果是扇区错乱的情况,请看到上图中的第二行处,fsck告知其实是/dev/md0出错,此时你就应该要利用fsck.ext3去检测/dev/md0才是!等到系统发现错误,并且出现 【clear[Y/N] 】时,输入 y 吧!
RPM安装
rpm -i /rp.pppoe-3.11.rpm
-i: install安装的意思
-v: 查看更详细的安装信息
-h: 显示安装进度
--prefix 新路径
--nodeps // 强制安装
--test //测试安装
RPM查询
rpm -qa
rpm -qf 文件名 // 找出该文件属于哪一个已安装的软件
YUM测试
修改软件库产生的问题与解决之道
由于我们是修改系统默认的配置文件,事实上,我们应该要在/etc/yum.repos.d/底下新建一个文件,该扩展名必须是.repo才行!但因为我们使用的是指定特定的映像站台,而不是其他软件开发商提供的软件库,因此才修改系统默认配置文件。但是可能由于使用的软件库版本有新旧之分,你得要知道,yum会先下载软件库的清单到本机的/var/cache/yum里面去!那我们修改了网址却没有修改软件库名称(中括号内的文字),可能就会造成本机的列表与yum服务器的列表不同步,此时就会出现无法更新的问题了!
那怎么办啊?很简单,就清除掉本机上面的旧数据即可!需要手动处理吗?不需要的,透过yum的clean项目来处理即可!
yum clean [packages|headers|all]
选项与参数:
packages:将已下载的软件文件删除
headers:将下载的软件文件头删除
all:将所有软件库数据都删除!
路径 | 解释 |
---|---|
/root/rpmbuild/SPECS | 软件的配置文件,例如这个软件的信息参数、设定项目等 |
/root/rpmbuild/SOURCES | 放置的是该软件的原始文件(*.tar.gz的文件)以及config这个配置文件 |
/root/rpmbuild/BUILD | 在编译的过程中,有些暂存的数据都会放置在这个目录当中 |
/root/rpmbuild/RPMS | 经过顺利的编译成功后,将打包完成的文件放置在这个目录当中。里头有包含了x86_64,noarch等等的次目录 |
/root/rpmbuild/SRPMS | 与RPMS内相似的,这里放置的就是SRPM封装的文件,有时候想将你的软件用SRPM的方式释出时,你的SRPM文件就会放置在这个目录中。 |
配置文件的主要内容(*.spec)
编译需要的步骤大抵就是/configure,make,make check,make install 等,那这些动作写入就在SPECS目录中。
要注意到的是ntp.sepc这个文件,这是主要的将SRPM编译成RPM的配置文件,他的基本规则可以这样看:
系统整体信息方面
Name: myapp <===软件包的名字(后面会用到)
Version: 0.1.0 <===软件包的版本(后面会用到)
Release: 1%{
?dist} <===发布序号
Summary: my first rpm <===软件包的摘要信息
Group: <===软件包的安装分类,参见/usr/share/doc/rpm-4.x.x/GROUPS这个文件
License: GPL <===软件的授权方式
URL: <===这里本来写源码包的下载路径或者自己的博客地址或者公司网址之类
Source0: %{
name}-%{
version}.tar.gz <===源代码包的名称(默认时rpmbuid回到SOURCES目录中去找),这里的name和version就是前两行定义的值。如果有其他配置或脚本则依次用Source1、Source2等等往后增加即可。
BuildRoot: %{
_topdir}/BUILDROOT <=== 这是make install时使用的“虚拟”根目录,最终制作rpm安装包的文件就来自这里。
BuildRequires: <=== 在本机编译rpm包时需要的辅助工具,以逗号分隔。假如,要求编译myapp时,gcc的版本至少为4.4.2,则可以写成gcc >=4.2.2。还有其他依赖的话则以逗号分别继续写道后面。
Requires: <=== 编译好的rpm软件在其他机器上安装时,需要依赖的其他软件包,也以逗号分隔,有版本需求的可以
%description <=== 软件包的详细说明信息,但最多只能有80个英文字符
根据上面的设定,最终的档名就会是{Name}-{Version}-{Release}.{Arch}.rpm
的样式,以我们上面的设定来说,档名应该会是ntp-4.2.6p5-20.vbird.x86_64.rpm
rpmbuild -ba ntp.spec <== 编译并同时产生RPM与SRPM文件
rpmbuild -bb ntp.spec <== 仅编译成RPM文件
系统执行的过程:
*.spec
里面的Source设定的那个文件,以tar进行解压缩,以我们这个例子来说,则会在/root/rpmbuild/BUILD/ntp-4.2.6p5
当中,将/root/rpmbuild/SOURCES/ntp-*
等等多个原始码文件进行解压缩。%build
及 %install
的设定与编译打包自己软件的示例
mkdir -pv ~/rpmbuild/{
BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
(1)制作原始码文件tarball产生
Name: main
Version: 0.1
Release: 1%{
?dist}
Summary: Show sin and cos value
Group: Scientific Support
License: GPLv2
URL: http://linux.vbird.org/
Source0: main-0.1.tgz
Patch0: main_0.1_to_0.2.patch
# 这两个档名要正确
%description
this package will let you input your name and calculate sin cos value
%prep
%setup -q
%patch0 -p1
%build
make clean main
%install
mkdir -p %{
buildroot}/usr/local/bin
install -m 755 main %{
buildroot}/usr/local/bin
%files
/usr/local/bin/main
%changelog
(3)编译成为RPM与SRPM
# rpmbuild -ba main.spec
(4)安装测试查询
示例2:https://blog.51cto.com/laoguang/1103628