Linux记录
Linux记录
- RPM & yum
- 源码安装
- 用户组管理
- useradd 命令新建用户
- passwd命令:修改用户密码
- usermod命令:修改用户信息
- chage用法详解:修改用户密码状态
- userdel命令详解:删除用户
- id命令:查看用户的UID和GID
- su命令:用户间切换(包含su和su -的区别)
- whoami和who am i命令用法和区别
- groupadd命令:添加用户组
- groupmod命令详解:修改用户组
- gpasswd命令用法详解:把用户添加进组或从组中删除
- newgrp命令用法详解:切换用户的有效组
- Linux权限管理
- chgrp命令:修改文件和目录的所属组
- chown命令:修改文件和目录的所有者和所属组
- chmod命令:修改文件或目录的权限
- umask详解:令新建文件和目录拥有默认权限
- ACL 权限设置(setfacl和getfacl)
- mask有效权限详解
- SetUID(SUID)文件特殊权限
- SetGID(SGID)文件特殊权限
- Stick BIT(SBIT)文件特殊权限
- chattr命令详解:修改文件系统的权限属性
- lsattr命令:查看文件系统属性
- sudo命令用法详解:系统权限管理
- Linux文件系统管理
- df用法详解:查看文件系统硬盘使用情况
- du命令:统计目录或文件所占磁盘空间大小
- du命令和df命令的区别
- mount命令详解:挂载Linux系统外的文件
- umount命令:卸载文件系统
- fsck命令:检测和修复文件系统
- dumpe2fs命令:查看文件系统信息
- fdisk命令详解:给硬盘分区
- parted命令用法详解:创建分区
- mkfs命令详解:格式化分区(为分区写入文件系统)
- mke2fs命令:格式化硬盘(给硬盘写入文件系统)
- Linux虚拟内存和物理内存
- Linux高级文件系统管理
- 磁盘配额
- quotacheck命令:扫描文件系统并建立Quota记录文件
- quotaon命令:开启磁盘配额限制
- quotaoff命令:关闭磁盘配额限制
- edquota命令:修改用户(群组)的磁盘配额
- setquota命令详解:非交互式设置磁盘配额
- quota和repquota命令查询磁盘配额方法详解
- LVM逻辑卷管理机制(硬盘分区管理机制)
- PV物理卷(创建、查看和删除)
- VG卷组(创建、激活、查看、扩容、减小及删除)
- LV逻辑卷(创建、查看、调整大小及删除)
- 系统管理(进程管理、工作管理和系统定时任务)
- 进程启动的2种方式
- 手工启动进程
- 调度启动进程
- ps命令详解:查看正在运行的进程
- top命令详解:持续监听进程运行状态
- 缓冲(buffer)和缓存(cache)的区别
- pstree命令:查看进程树
- lsof命令:列出进程调用或打开的文件信息
- 进程优先级
- nice和renice命令:改变进程优先级
- 常用信号(进程间通信)及其含义
- kill命令详解:终止进程
- killall命令:终止特定的一类进程
- pkill命令:终止进程,按终端号踢出用户
- pkill命令踢出登陆用户
- 工作管理简介
- 命令放入后台运行方法(&和Ctrl+Z)
- jobs命令:查看当前终端放入后台的工作
- fg命令:把后台命令恢复在前台执行
- bg命令:把后台暂停的工作恢复到后台执行
- nohup命令:后台命令脱离终端运行
- at命令详解:定时执行任务
- crontab命令:循环执行定时任务
- anacron命令
- vmstat命令详解:监控系统资源
- dmesg命令:显示开机信息
- free命令:查看内存使用状态
- w和who命令:查看登陆用户信息
- last和lastlog命令:查看过去登陆的用户信息
- 数据备份与恢复
- 备份策略(完全备份、增量备份和差异备份)
- tar命令备份数据
- dump命令用法详解:备份分区、文件或目录
- restore命令:还原dump操作备份下的文件、目录或分区
- dd命令详解:数据备份,并在备份过程中进行格式转换
- rsync命令用法详解
- 系统服务管理
- 系统服务及其分类
- 端口及查询方法
- 独立服务管理(RPM包的启动与自启动)
- 基于xinetd服务的管理方法
- 源码包服务管理(启动与自启动)
- 常见服务类别及功能
- 影响Linux系统性能的因素
- sar命令详解:分析系统性能
- 系统日志管理
- rsyslogd服务及启动方法
- 日志文件(常见)及其功能
- 日志文件格式分析
- rsyslogd配置文件格式及其内容
- 日志服务器设置过程
- 日志轮替(日志转储)及logrotate配置文件分析
- logrotate命令用法详解:进行日志转储(轮替)
- 日志分析工具(logwatch)安装及使用
- 系统启动管理
- 系统启动流程(以CentOS 6为对象)
- BIOS开机自检简介
- 主引导目录(MBR)结构及作用
- 内核(内核模块)的加载过程
- /sbin/init初始化系统环境
- /etc/inittab:设置(修改)系统默认运行级别
- /etc/rc.d/rc.local配置文件用法
- 启动引导程序(GRUB)加载内核的过程
- /boot/grub/目录分析
- GRUB磁盘分区表示法
- /boot/grub/grub.conf(GRUB配置文件)
- 多系统并存的GRUB配置文件
- GRUB手动安装方法
- GRUB加密方法详解(2种加密方式)
- 字符界面调整分辨率的方法
- 内核模块管理(查看、添加和删除)
- NTFS文件系统安装教程
- LAMP环境搭建和LNMP环境搭建
- LAMP环境搭建的前期准备
- libxml2安装
- libmcrypt安装
- mhash和mcrypt安装
- zlib和libpng安装
- peg6安装过程
- 安装freetype
- gd库安装
- Apache安装过程详解(LAMP环境搭建)
- ncurses安装
- MySQL安装
- 安装PHP
- memcache安装和配置(自启动)
- phpmyadmin安装及配置过程
- LNMP安装的前期准备(LNMP一键安装包下载)
- LNMP一键安装
- LNMP安装php扩展模块(eAccelerator、xCache、memcached、imageMagick和ionCube)
- SELinux管理
- SELinux的主要作用
- SELinux 的工作模式(Disabled、Permissive和Enforcing)
- SELinux配置文件(/etc/selinux/config)
- SELinux工作模式设置(getenforce、setenforce和sestatus命令)
- 命令
- diff 命令基本格式为:
- 补丁文件的生成和使用
RPM & yum
https://c.biancheng.net/view/2872.html
Linux 系统中用于保存源代码的位置主要有 2 个,分别是 “/usr/src” 和 “/usr/local/src”,其中 “/usr/src” 用来保存内核源代码,“/usr/local/src” 用来保存用户下载的源代码。
通过源码包方式安装的各个软件,其安装文件独自保存在 /usr/local/ 目录下的各子目录中
与 RPM 包不同,源码包的安装通常采用手动指定安装路径(习惯安装到 /usr/local/ 中)的方式。
https://c.biancheng.net/view/2931.html
Yum 是一个基于 RPM 的高级软件包管理器
yum list:查询所有已安装和可安装的软件包
yum search 关键字:从 yum 源服务器上查找与关键字相关的所有软件包
yum info 包名:查询执行软件包的详细信息
yum -y install 包名
yum -y update:升级所有软件包和内核
。不过考虑到服务器强调稳定性,因此该命令并不常用。
yum -y update 包名:升级特定的软件包
yum -y upgrade :只更新所有包
,不更新系统内核
yum remove 包名
yum groupinfo 软件组名
yum groupinstall 软件组名
yum groupremove 软件组名
操作层面:RPM 更底层,主要针对单个软件包的操作;而 Yum 更高层,能够自动处理软件包的依赖关系,简化了软件包的管理。
依赖处理:RPM 不会自动解决软件包的依赖关系,这要求用户自行确保所有依赖都被满足;Yum 则可以自动解析并安装所需的依赖项。
使用场景:对于需要精确控制每个软件包安装细节的情况,可能会选择使用 RPM;而对于希望快速部署应用而不必担心依赖关系的用户来说,Yum 是更好的选择。
源码安装
.
/configure
软件配置与检查。这一步主要完成以下 3 项任务:
- 检测系统环境是否符合安装要求。
- 定义需要的功能选项。
– 通过 “./configure--prefix=安装路径
” 可以指定安装路径。此命令没有加载其他功能,只是指定安装目录
– 注意,configure 不是系统命令,而是源码包软件自带的一个脚本程序,所以必须采用 “./configure” 方式执行(“./” 代表在当前目录下)。
“./configure” 支持的功能选项较多,可执行 “./configure–help” 命令查询其支持的功能- 把系统环境的检测结果和定义好的功能选项写入 Makefile 文件,因为后续的编译和安装需要依赖这个文件的内容。
make
编译。
make 会调用 gcc 编译器,并读取 Makefile 文件中的信息进行系统软件编译。
编译的目的就是把源码程序转变为能被 Linux 识别的可执行文件,这些可执行文件保存在当前目录下。
make install
正式开始安装软件,这里通常会写清程序的安装位置,如果没有,则建议读者把安装的执行过程保存下来,以备将来删除软件时使用
注意,如果在 “./configure” 或 “make” 编译中报错,则在重新执行命令前一定要执行
make clean
命令,它会清空 Makefile 文件或编译产生的 “.o” 头文件。
Linux源码包卸载
- rm -rf /usr/local/apache2/
用户组管理
Linux 系统将所有用户的名称与 ID 的对应关系都存储在 /etc/passwd
文件中。
在 /etc/passwd 文件中,利用 UID 可以找到对应的用户名;在 /etc/group 文件中,利用 GID 可以找到对应的群组名。
/etc/passwd 文件中,每行用户信息都以 “:” 作为分隔符,划分为 7 个字段,每个字段所表示的含义如下:
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
真正的密码保存在 /etc/shadow 文件中
UID,也就是用户 ID
全称“Group ID”,简称“组ID”,表示用户初始组的组 ID 号。
通常情况下,Linux 系统默认使用的命令解释器是 bash(/bin/bash),当然还有其他命令解释器,例如 sh、csh 等
/etc/passwd、/etc/shadow、/etc/group,它们之间的关系可以这样理解,即先在 /etc/group 文件中查询用户组的 GID 和组名;然后在 /etc/passwd 文件中查找该 GID 是哪个用户的初始组,同时提取这个用户的用户名和 UID;最后通过 UID 到 /etc/shadow 文件中提取和这个用户相匹配的密码。
/etc/login.defs:创建用户的默认设置文件
useradd 命令新建用户
[root@localhost ~]#useradd [选项] 用户名
在没有特殊要求下,无需使用任何选项即可成功创建用户
useradd 命令在添加用户时参考的默认值文件主要有两个,分别是 /etc/default/useradd 和 /etc/login.defs
passwd命令:修改用户密码
[root@localhost ~]#passwd [选项] 用户名
usermod命令:修改用户信息
[root@localhost ~]#usermod [选项] 用户名
#【例 1】
#锁定用户
[root@localhost ~]# usermod -L lamp
[root@localhost ~]# grep "lamp" /etc/shadow
lamp:!$6$YrPj8g0w$ChRVASybEncU24hkYFqxREH3NnzhAVDJSQLwRwTSbcA2N8UbPD9bBKVQSky xlaMGs/Eg5AQwO.UokOnKqaHFa/:15711:0:99999:7:::
#其实锁定就是在密码字段前加入"!",这时lamp用户就暂时不能登录了#解锁用户
[root@localhost ~]# usermod -U lamp
[root@localhost ~]# grep "lamp" /etc/shadow
lamp:$6$YrPj8g0w$ChRVASybEncU24hkYFqxREH3NnzhAVDJSQLwRwTSbcA2N8UbPD9bBKVQSkyx laMGs/Eg5AQwO.UokOnKqaHFa/:15711:0:99999:7:::
#取消了密码字段前的 "!"#把lamp用户加入root组
[root@localhost ~]# usermod -G root lamp
[root@localhost ~]# grep "lamp" /etc/group
root:x:0:lamp
#lamp用户已经加入了root组
lamp:x:501:#修改用户说明
[root@localhost ~]# usermod -c "test user" lamp
[root@localhost ~]# grep "lamp" /etc/passwd
lamp:x:501:501:test user:/home/lamp:/bin/bash
#查看一下,用户说明已经被修改了
chage用法详解:修改用户密码状态
如果你要修改用户的密码信息,我个人建议,还是直接修改 /etc/shadow 文件更加方便。
chage 命令除了修改密码信息的功能外,还可以强制用户在第一次登录后,必须先修改密码,并利用新密码重新登陆系统,此用户才能正常使用
userdel命令详解:删除用户
id命令:查看用户的UID和GID
[root@localhost ~]# id 用户名[root@localhost ~]# id lamp
uid=501(lamp) gid=501(lamp) groups=501(lamp)
#能看到uid(用户ID)、gid(初始组ID), groups是用户所在组,这里既可以看到初始组,如果有附加组,则也能看到附加组[root@localhost ~]# usermod -G root lamp
#把用户加入root组
[root@localhost ~]# id lamp
uid=501(lamp) gid=501(lamp) groups=501(lamp),0(root)
#大家发现root组中加入了lamp用户的附加组信息
su命令:用户间切换(包含su和su -的区别)
whoami和who am i命令用法和区别
[Cyuyan@localhost ~]$ whoami
Cyuyan
[Cyuyan@localhost ~]$ who am i
Cyuyan pts/0 2017-10-09 15:30 (:0.0)
[Cyuyan@localhost ~] su - root
[root@localhost ~]$ whoami
root
[root@localhost ~]$ who am i
Cyuyan pts/0 2017-10-09 15:30 (:0.0)
看到了吗?在未切换用户身份之前,whoami 和 who am i 命令的输出是一样的,但使用 su 命令切换用户身份后,使用 whoami 命令打印的是切换后的用户名,而 who am i 命令打印的仍旧是登陆系统时所用的用户名。
执行 whoami 命令,等同于执行 id -un 命令;执行 who am i 命令,等同于执行 who -m 命令。
也就是说,使用 su 或者 sudo 命令切换用户身份,骗得过 whoami,但骗不过 who am i。要解释这背后的运行机制,需要搞清楚什么是实际用户(UID)和有效用户(EUID,即 Effective UID)。
所谓实际用户,指的是登陆 Linux 系统时所使用的用户,因此在整个登陆会话过程中,实际用户是不会发生变化的;而有效用户,指的是当前执行操作的用户,也就是说真正决定权限高低的用户,这个是能够利用 su 或者 sudo 命令进行任意切换的。
groupadd命令:添加用户组
groupmod命令详解:修改用户组
groupdel命令:刪除用户组
gpasswd命令用法详解:把用户添加进组或从组中删除
newgrp命令用法详解:切换用户的有效组
Linux权限管理
chgrp命令:修改文件和目录的所属组
[root@localhost ~]# chgrp [-R] 所属组 文件名(目录名)
# -R(注意是大写)选项长作用于更改目录的所属组,表示更改连同子目录中所有文件的所属组信息。[root@localhost ~]# groupadd group1
#新建用于测试的群组 group1
[root@localhost ~]# chgrp group1 install.log
#修改install.log文件的所属组为group1
[root@localhost ~]# ll install.log
-rw-r--r--. 1 root group1 78495 Nov 17 05:54 install.log
#修改生效
[root@localhost ~]# chgrp testgroup install.log
chgrp: invaild group name 'testgroup'
chown命令:修改文件和目录的所有者和所属组
[root@localhost ~]# chown [-R] 所有者 文件或目录
[root@localhost ~]# chown [-R] 所有者:所属组 文件或目录
chown :group install.log 就表示修改 install.log 文件的所属组,但修改所属组通常使用 chgrp 命令,因此并不推荐大家使用 chown 命令。
chmod命令:修改文件或目录的权限
r --> 4
w --> 2
x --> 1
所有者 = rwx = 4+2+1 = 7
所属组 = rw- = 4+2 = 6
其他人 = r-x = 4+1 = 5
chmod [-R] 权限值 文件名
文件的基本权限就是 3 种用户身份(所有者、所属组和其他人)搭配 3 种权限(rwx),chmod 命令中用 u、g、o 分别代表 3 种身份,还用 a 表示全部的身份(all 的缩写)。另外,chmod 命令仍使用 r、w、x 分别表示读、写、执行权限。
[root@localhost ~]# chmod u=rwx,go=rx .bashrc
[root@localhost ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Sep 22 2004 .bashrc
umask详解:令新建文件和目录拥有默认权限
Windows 系统中,新建的文件和目录时通过继承上级目录的权限获得的初始权限,而 Linux 不同,它是通过使用 umask 默认权限来给所有新建的文件和目录赋予初始权限的。
那么,我们如何得知 umask 默认权限的值呢?直接通过 umask 命令即可:
[root@localhost ~]# umask
0022
#root用户默认是0022,普通用户默认是 0002
读者可能会问,不应该只有 3 个数字(分别对应 3 种用户身份)吗,为什么有 4 个? umask 默认权限确实由 4 个八进制数组成,但第 1 个数代表的是文件所具有的特殊权限(SetUID、SetGID、Sticky BIT),此部分内容放到后续章节中讲解,现在先不讨论。也就是说,后 3 位数字 “022” 才是本节真正要用到的 umask 权限值,将其转变为字母形式为 ----w–w-。
文件(或目录)的初始权限 = 文件(或目录)的最大默认权限 - umask权限
https://c.biancheng.net/view/764.html
ACL 权限设置(setfacl和getfacl)
ACL,是 Access Control List(访问控制列表)的缩写,在 Linux 系统中, ACL 可实现对单一用户设定访问文件的权限。也可以这么说,设定文件的访问权限,除了用传统方式(3 种身份搭配 3 种权限),还可以使用 ACL 进行设定。拿本例中的 st 学员来说,既然赋予它传统的 3 种身份,无法解决问题,就可以考虑使用 ACL 权限控制的方式,直接对 st 用户设定访问文件的 r-x 权限。
权限前的字符,表示文件的具体类型,比如 d 表示目录,- 表示普通文件,l 表示连接文件,b 表示设备文件,等等。
setfacl 和 getfacl 命令,前者用于给指定文件或目录设定 ACL 权限,后者用于查看是否配置成功。
[root@localhost ~]# getfacl 文件名
[root@localhost ~]# setfacl 选项 文件名
- setfacl -m:给用户或群组添加 ACL 权限
setfacl -d:设定默认 ACL 权限
setfacl -R:设定递归 ACL 权限
setfacl -x:删除指定的 ACL 权限
setfacl -b:删除指定文件的所有 ACL 权限
mask有效权限详解
mask 权限,指的是用户或群组能拥有的最大 ACL 权限,也就是说,给用户或群组设定的 ACL 权限不能超过 mask 规定的权限范围,超出部分做无效处理。
SetUID(SUID)文件特殊权限
SUID 特殊权限仅适用于可执行文件,所具有的功能是,只要用户对设有 SUID 的文件有执行权限,那么当用户执行此文件时,会以文件所有者的身份去执行此文件,一旦文件执行结束,身份的切换也随之消失。
SetGID(SGID)文件特殊权限
当 s 权限位于所属组的 x 权限位时,就被称为 SetGID,简称 SGID 特殊权限
Stick BIT(SBIT)文件特殊权限
Sticky BIT,简称 SBIT 特殊权限,可意为粘着位、粘滞位、防删除位等。
SBIT 权限仅对目录有效,一旦目录设定了 SBIT 权限,则用户在此目录下创建的文件或目录,就只有自己和 root 才有权利修改或删除该文件
[root@localhost ~]# ll -d /tmp
drwxrwxrwt. 4 root root 4096 Apr 19 06:17 /tmp
# 可以看到,在其他人身份的权限设定中,原来的 x 权限位被 t 权限占用了,这就表示此目录拥有 SBIT 权限。
chattr命令详解:修改文件系统的权限属性
chattr 命令,专门用来修改文件或目录的隐藏属性,只有 root 用户可以使用。该命令的基本格式为:
[root@localhost ~]# chattr [+-=] [属性] 文件或目录名
# + 表示给文件或目录添加属性,- 表示移除文件或目录拥有的某些属性,= 表示给文件或目录设定一些属性。
lsattr命令:查看文件系统属性
使用 chattr 命令配置文件或目录的隐藏属性后,可以使用 lsattr 命令查看
- -a:后面不带文件或目录名,表示显示所有文件和目录(包括隐藏文件和目录)
- -d:如果目标是目录,只会列出目录本身的隐藏属性,而不会列出所含文件或子目录的隐藏属性信息;
- -R:和 -d 恰好相反,作用于目录时,会连同子目录的隐藏信息数据也一并显示出来。
sudo命令用法详解:系统权限管理
[root@localhost ~]# sudo [-b] [-u 新使用者账号] 要执行的命令
常用的选项与参数:
-b :将后续的命令放到背景中让系统自行运行,不对当前的 shell 环境产生影响。
-u :后面可以接欲切换的用户名,若无此项则代表切换身份为 root 。
-l:此选项的用法为 sudo -l,用于显示当前用户可以用 sudo 执行那些命令。
sudo命令的配置文件/etc/sudoers
修改 /etc/sudoers,不建议直接使用 vim,而是使用 visudo。因为修改 /etc/sudoers 文件需遵循一定的语法规则,使用 visudo 的好处就在于,当修改完毕 /etc/sudoers 文件,离开修改页面时,系统会自行检验 /etc/sudoers 文件的语法。
Linux文件系统管理
硬盘可分为机械硬盘(Hard Disk Drive, HDD)和固态硬盘(Solid State Disk, SSD),机械硬盘采用磁性碟片来存储数据,而固态硬盘通过闪存颗粒来存储数据。
df用法详解:查看文件系统硬盘使用情况
与整个文件系统有关的数据,都保存在 Super block(超级块)中,而 df 命令主要读取的数据几乎都针对的是整个文件系统,所以 df 命令主要是从各文件系统的 Super block 中读取数据。
Filesystem:表示该文件系统位于哪个分区,因此该列显示的是设备名称;
1K-blocks:此列表示文件系统的总大小,默认以 KB 为单位;
Used:表示用掉的硬盘空间大小;
Available:表示剩余的硬盘空间大小;
Use%:硬盘空间使用率。如果使用率高达 90% 以上,就需要额外注意,因为容量不足,会严重影响系统的正常运行;
Mounted on:文件系统的挂载点,也就是硬盘挂载的目录位置。
du命令:统计目录或文件所占磁盘空间大小
du命令和df命令的区别
有时我们会发现,使用 du 命令和 df 命令去统计分区的使用情况时,得到的数据是不一样的。那是因为df命令是从文件系统的角度考虑的,通过文件系统中未分配的空间来确定文件系统中已经分配的空间大小。也就是说,在使用 df 命令统计分区时,不仅要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)。
而 du 命令是面向文件的,只会计算文件或目录占用的磁盘空间。也就是说,df 命令统计的分区更准确,是真正的空闲空间
mount命令详解:挂载Linux系统外的文件
[root@localhost ~]# mount [-l]
单纯使用 mount 命令,会显示出系统中已挂载的设备信息,使用 -l 选项,会额外显示出卷标名称(读者可自行运行,查看输出结果)
[root@localhost ~]# mount -a
-a 选项的含义是自动检查 /etc/fstab 文件中有无疏漏被挂载的设备文件,如果有,则进行自动挂载操作。
这里简单介绍一下 /etc/fstab 文件,此文件是自动挂载文件,系统开机时会主动读取 /etc/fstab 这个文件中的内容,根据该文件的配置,系统会自动挂载指定设备
[root@localhost ~]# mount [-t 系统类型] [-L 卷标名] [-o 特殊选项] [-n] 设备文件名 挂载点
-t 系统类型:指定欲挂载的文件系统类型。Linux 常见的支持类型有 EXT2、EXT3、EXT4、iso9660(光盘格式)、vfat、reiserfs 等。如果不指定具体类型,挂载时 Linux 会自动检测。
-L 卷标名:除了使用设备文件名(例如 /dev/hdc6)之外,还可以利用文件系统的卷标名称进行挂载。
-n:在默认情况下,系统会将实际挂载的情况实时写入 /etc/mtab 文件中,但在某些场景下(例如单人维护模式),为了避免出现问题,会刻意不写入,此时就需要使用这个选项;
-o 特殊选项:可以指定挂载的额外选项,比如读写权限、同步/异步等,如果不指定,则使用默认值(defaults)。
【例 1】
[root@localhost ~] mount
#查看系统中已经挂载的文件系统,注意有虚拟文件系统
/dev/sda3 on / type ext4 (rw)
# <--含义是,将 /dev/sda3 分区挂载到了 / 目录上,文件系统是 ext4,具有读写权限
proc on /proc type proc (rw)
sysfe on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw, gid=5, mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fe/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfe/rpc_pipefs type rpc_pipefs (rw)
【例 2】
修改特殊权限。通过例 1 我们查看到,/boot 分区已经被挂载了,而且采用的是 defaults 选项。这里我们重新挂载分区,并采用 noexec 权限禁止执行文件执行,看看会出现什么情况(注意不要用 / 分区做实验,否则系统命令也就不能执行了。
[root@localhost ~] mount -o remount noexec /boot
#重新挂载 /boot 分区,并使用 noexec 权限
[root@localhost sh] cd /boot
#写一个 shell 脚本,看是否会运行
[root@localhost boot] vi hello.sh
#!/bin/bash
echo "hello!!"
[root@localhost boot] chmod 755 hello.sh
[root@localhost boot] ./hello.sh
-bash:./hello.sh:权限不够
#虽然赋予了hello.sh执行权限,但是仍然无法执行
[root@localhost boot] mount -o remount exec /boot
#记得改回来,否则会影响系统启动
【例 3】挂载分区。
[root@localhost ~]# mkdir /mnt/disk1
#建立挂载点目录
[root@localhost ~]# mount /dev/sdb1 /mnt/disk1
#挂载分区
/dev/sdb1 分区还没有被划分。我们在这里只看看挂载分区的方式,非常简单,甚至不需要使用 “-ext4” 命令指定文件系统,因为系统可以自动检测。
可能读者会想,为什么使用 Linux 系统的硬盘分区这么麻烦,而不能像 Windows 系统那样,硬盘安装上就可以使用?
其实,硬盘分区(设备)挂载和卸载(使用 umount 命令)的概念源自 UNIX,UNIX 系统一般是作为服务器使用的,系统安全非常重要,特别是在网络上,最简单有效的方法就是“不使用的硬盘分区(设备)不挂载”,因为没有挂载的硬盘分区是无法访问的,这样系统也就更安全了。
另外,这样也可以减少挂载的硬盘分区数量,相应地,也就可以减少系统维护文件的规模,当然也就减少了系统的开销,即提高了系统的效率。
umount命令:卸载文件系统
[root@localhost ~] umount 设备文件名或挂载点
卸载命令后面既可以加设备文件名,也可以加挂载点,不过只能二选一
如果加了两个(如下所示),从理论上分析,会对光驱卸载两次,当然,卸载第二次的时候就会报错。
在卸载时有可能会出现以下情况:
[root@localhost ~] cd /mnt/cdrom/
#进入光盘挂载点
[root@localhost cdrom] umount /mnt/cdrom/
umount: /mnt/cdrom: device is busy.
#报错,设备正忙
这种报错是因为我们已经进入了挂载点,因此,如果要卸载某硬件设备,在执行 umount 命令之前,用户须退出挂载目录。
卸载硬件设备成功与否,除了执行 umount 命令不报错之外,还可以使用 df 命令或 mount -l 来查看目标设备是否还挂载在系统中。
fsck命令:检测和修复文件系统
计算机难免会由于某些系统因素或人为误操作(突然断电)出现系统异常,这种情况下非常容易造成文件系统的崩溃,严重时甚至会造成硬件损坏。这也是我们一直在强调的“服务器一定要先关闭服务再进行重启”的原因所在。
那么,如果真出现了文件系统损坏的情况,有办法修复吗?可以的,对于一些小问题,使用 fsck 命令就可以很好地解决。
fsck 命令用于检查文件系统并尝试修复出现的错误。
[root@localhost ~] fsck [选项] 分区设备文件名
此命令通常
只有
身为root
用户且文件系统出现问题
时才会使用,否则,在正常状况
下使用 fsck 命令,很可能损坏系统
。另外,如果你怀疑已经格式化成功的硬盘有问题,也可以使用此命令来进行检查。
使用 fsck 检查并修复文件系统是存在风险的,特别是当硬盘错误非常严重的时候,因此,当一个受损文件系统中包含了非常有价值的数据时,务必首先进行备份!
如果想要修复某个分区
[root@localhost ~]fsck -r /dev/sdb1
#采用互动的修复模式
fsck 命令在执行时,如果发现存在没有文件系统依赖的文件或目录,就会提示用户是否把它们找回来,因为这些没有文件系统依赖的文件或目录对用户来说是看不到的,换句话说,用户根本无法使用,这通常是由文件系统内部结构损坏导致的。如果用户同意找回(输入 y),fsck 命令就会把这些孤立的文件或目录放到 lost+found 目录中,并用这些文件自己对应的 inode 号来命名,以便用户查找自己丢失的文件。
因此,当用户在利用 fsck 命令修复磁盘分区以后,如果发现分区中有文件丢失,就可以到对应的 lost+found 目录中去查找,但由于无法通过文件名称分辨各个文件,这里可以利用 file 命令查看文件系统类型,进而判断出哪个是我们需要的文件。
dumpe2fs命令:查看文件系统信息
[root@www ~] dumpe2fs [-h] 文件名
#-h 选项的含义是仅列出 superblock(超级块)的数据信息;
通过 df 命令找到根目录硬盘的文件名,然后使用 dump2fs 命令观察文件系统的详细信息
root@localhost ~] df <==这个命令可以叫出目前挂载的装置
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hdc2 9920624 3822848 5585708 41% /
/dev/hdc3 4956316 141376 4559108 4% /home
/dev/hdc1 101086 11126 84741 12% /boot
tmpfs 371332 0 371332 0% /dev/shm[root@localhost ~] dumpe2fs /dev/hdc2
dumpe2fs 1.39 (29-May-2006)
Filesystem volume name: /1 <==这个是文件系统的名称(Label)
Filesystem features: has_journal ext_attr resize_inode dir_indexfiletype needs_recovery sparse_super large_file
Default mount options: user_xattr acl <==默认挂载的参数
Filesystem state: clean <==这个文件系统是没问题的(clean)
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 2560864 <==inode的总数
Block count: 2560359 <==block的总数
Free blocks: 1524760 <==还有多少个 block 可用
Free inodes: 2411225 <==还有多少个 inode 可用
First block: 0
Block size: 4096 <==每个 block 的大小啦!
Filesystem created: Fri Sep 5 01:49:20 2008
Last mount time: Mon Sep 22 12:09:30 2008
Last write time: Mon Sep 22 12:09:30 2008
Last checked: Fri Sep 5 01:49:20 2008
First inode: 11
Inode size: 128 <==每个 inode 的大小
Journal inode: 8 <==底下这三个与下一小节有关
Journal backup: inode blocks
Journal size: 128MGroup 0: (Blocks 0-32767) <==第一个 data group 内容, 包含 block 的启始/结束号码Primary superblock at 0, Group descriptors at 1-1 <==超级区块在 0 号 blockReserved GDT blocks at 2-626Block bitmap at 627 (+627), Inode bitmap at 628 (+628)Inode table at 629-1641 (+629) <==inode table 所在的 block0 free blocks, 32405 free inodes, 2 directories <==所有 block 都用完了!Free blocks:Free inodes: 12-32416 <==剩余未使用的 inode 号码
Group 1: (Blocks 32768-65535)
#由于数据量非常的庞大,这里省略了一部分输出信息
可以看到,使用 dumpe2fs 命令可以查询到非常多的信息,以上信息大致可分为 2 部分。前半部分显示的是超级块的信息,包括文件系统名称、已使用以及未使用的 inode 和 block 的数量、每个 block 和 inode 的大小,文件系统的挂载时间等。
另外,Linux 文件系统(EXT 系列)在格式化的时候,会分为多个区块群组(block group),每 个区块群组都有独立的 inode/block/superblock 系统。此命令输出结果的后半部分,就是每个区块群组的详细信息(如 Group0、Group1)。
fdisk命令详解:给硬盘分区
在 Linux 中有专门的分区命令 fdisk 和 parted。其中 fdisk 命令较为常用,但不支持大于 2TB 的分区;如果需要支持大于 2TB 的分区,则需要使用 parted 命令,当然 parted 命令也能分配较小的分区
[root@localhost ~]# fdisk -l
#列出系统分区
[root@localhost ~]# fdisk 设备文件名
#给硬盘分区
注意
,千万不要在当前的硬盘上尝试使用 fdisk,这会完整删除整个系统,一定要再找一块硬盘,或者使用虚拟机
Device:分区的设备文件名。
Boot:是否为启动引导分区,在这里 /dev/sda1 为启动引导分区。
Start:起始柱面,代表分区从哪里开始。
End:终止柱面,代表分区到哪里结束。
Blocks:分区的大小,单位是 KB。
id:分区内文件系统的 ID。在 fdisk 命令中,可以 使用 “i” 查看。
System:分区内安装的系统是什么。
parted命令用法详解:创建分区
parted 命令是可以在命令行直接分区和格式化的,不过 parted 交互模式才是更加常用的命令方式
[root@localhost ~] parted 硬盘设备文件名
#进入交互模式
mkfs命令详解:格式化分区(为分区写入文件系统)
分区完成后,如果不格式化写入文件系统,则是不能正常使用的。这时就需要使用 mkfs 命令对硬盘分区进行格式化
[root@localhost ~] mkfs [-t 文件系统格式] 分区设备文件名# -t 文件系统格式:用于指定格式化的文件系统,如 ext3、ext4;
mke2fs命令:格式化硬盘(给硬盘写入文件系统)
mkfs 命令为硬盘分区写入文件系统时,无法手动调整分区的默认参数(比如块大小是 4096 Bytes),如果想要调整,就需要使用本节介绍的 mke2fs 命令
Linux虚拟内存和物理内存
虚拟内存是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存。用作虚拟内存的磁盘空间被称为交换空间(又称 swap 空间)。
就是内核会将暂时不用的内存块信息写到交换空间,这样一来,物理内存得到了释放,这块内存就可以用于其他目的
Linux 的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存
要深入了解 Linux 内存运行机制,需要知道下面提到的几个方面:
- 首先,Linux 系统会不时地进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux 也会交换出暂时不用的内存页面,因为这样可以大大节省等待交换所需的时间。
- 其次,Linux 进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,Linux 内核根据“最近最经常使用”算法,仅仅将一些不经常使用的页面文件交换到虚拟内存。
合理规划和设计 Linux 内存的使用是非常重要的,关于物理内存和交换空间的大小设置问题,取决于实际所用的硬盘大小,但大致遵循这样一个基本原则:
- 如果内存较小(根据经验,物理内存小于 4GB),一般设置 swap 分区大小为内存的 2 倍;
- 如果物理内存大于 4GB,而小于 16GB,可以设置 swap 分区大小等于物理内存;
- 如果内存大小在 16GB 以上,可以设置 swap 为 0,但并不建议这么做,因为设置一定大小的 swap 分区是有一定作用的。
Linux高级文件系统管理
磁盘配额
用来限制普通用户在分区中可以使用的容量和文件个数;LVM
可以在不停机和不损失数据的情况下修改分区大小;RAID
由几块硬盘或分区组成,拥有数据冗余功能,当其中的某块硬盘或分区损坏时,硬盘或分区中保存的数据不会丟失。
磁盘配额
磁盘配额(Quota)就是 Linux 系统中用来限制特定的普通用户或用户组在指定的分区上占用的磁盘空间或文件个数的。
- 磁盘配额限制的用户和用户组,只能是普通用户和用户组,也就是说超级用户 root 是不能做磁盘配额的;
- 磁盘配额限制只能针对分区,而不能针对某个目录,换句话说,磁盘配额仅能针对文件系统进行限制,举个例子,如果你的 /dev/sda5 是挂载在 /home 底下,那么,在 /home 下的所有目录都会受到磁盘配额的限制;
- 我们可以限制用户占用的磁盘容量大小(block),当然也能限制用户允许占用的文件个数(inode)。
使用磁盘配额的前提,是必须要内核以及文件系统支持才行
Quota 仅针对文件系统进行限制,因此我们有必要查一下,/home 是否是独立的文件系统
[root@localhost ~]# df -h /home
Filesystem Size Used Avail Use% Mounted on
/dev/hda3 4.8G 740M 3.8G 17% /home <-- /home 确实是独立的!
由于 VFAT 文件系统并不支持磁盘配额功能,因此,这里需要查看 /home 的文件系统
[root@localhost ~]# mount | grep home
/dev/hda3 on /home type ext3 (rw)
在此基础上,如果想要获得文件系统的支持,还需要为执行的文件系统添加挂载参数,分别是 usrquota(启用用户限额)和 grpquota(启动用户组限额)
直接修改 /etc/fstab 文件,将挂载参数写入到配置文件中
[root@www ~] vi /etc/fstab
......
LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2
[root@www ~] umount /home
[root@www ~] mount -a
[root@www ~] mount | grep home
/dev/hda3 on /home type ext3 (rw,usrquota,grpquota)
quotacheck命令:扫描文件系统并建立Quota记录文件
其实,磁盘配额(Quota)就是通过分析整个文件系统中每个用户和群组拥有的文件总数和总容量,再将这些数据记录在文件系统中的最顶层目录中,然后在此记录文件中使用各个用户和群组的配额限制值去规范磁盘使用量的。因此,建立 Quota 的记录文件是非常有必要的。
扫描文件系统(必须含有挂载参数 usrquota 和 grpquota)并建立 Quota 记录文件,可以使用 quotacheck 命令。此命令的基本格式为:
[root@localhost ~] quotacheck [-avugfM] 文件系统
对整个系统中含有挂载参数(usrquota 和 grpquota)的文件系统进行扫描
[root@localhost ~]# quotacheck -avug
quotacheck: Scanning /dev/hda3 [/home] quotacheck: Cannot stat old user quota
file: No such file or directory <--有找到文件系统,但尚未制作记录文件!
quotacheck: Cannot stat old group quota file: No such file or directory
quotacheck: Cannot stat old user quota file: No such file or directory
quotacheck: Cannot stat old group quota file: No such file or directory
done <--上面三个错误只是说明记录文件尚未创建而已,可以忽略不理!
quotacheck: Checked 130 directories and 107 files <--实际搜寻结果
quotacheck: Old file not found.
quotacheck: Old file not found.
# 若运行这个命令却出现如下的错误信息,表示你没有任何文件系统有启动 quota 支持!
# quotacheck: Can't find filesystem to check or filesystem not mounted with quota option.[root@localhost ~]# ll -d /home/a*
-rw------- 1 root root 8192 Mar 6 11:58 /home/aquota.group
-rw------- 1 root root 9216 Mar 6 11:58 /home/aquota.user
# 可以看到,扫描的同时,会创建两个记录文件,放在 /home 底下
quotaon命令:开启磁盘配额限制
quotaoff命令:关闭磁盘配额限制
edquota命令:修改用户(群组)的磁盘配额
setquota命令详解:非交互式设置磁盘配额
quota和repquota命令查询磁盘配额方法详解
LVM逻辑卷管理机制(硬盘分区管理机制)
PV物理卷(创建、查看和删除)
VG卷组(创建、激活、查看、扩容、减小及删除)
https://c.biancheng.net/view/918.html
LV逻辑卷(创建、查看、调整大小及删除)
系统管理(进程管理、工作管理和系统定时任务)
进程启动的2种方式
手工启动和通过调度启动
手工启动进程
前台启动进程
[root@localhost ~] find / -name demo.jpg <--在根目录下查找 demo.jpg 文件,比较耗时
#此处省略了该命令的部分输出信息
#按“CTRL+Z”组合键,即可将该进程挂起
[root@localhost ~] ps <--查看正在运行的进程
PID TTY TIME CMD
2573 pts/0 00:00:00 bash
2587 pts/0 00:00:01 find
2588 pts/0 00:00:00 ps
将进程挂起,指的是将前台运行的进程放到后台,并且暂停其运行
后台启动进程
[root@localhost ~]# find / -name install.log &
[1] 1920
#[1]是工作号,1920是进程号
调度启动进程
在 Linux 系统中,任务可以被配置在指定的时间、日期或者系统平均负载量低于指定值时自动启动。
例如,Linux 预配置了重要系统任务的运行,以便可以使系统能够实时被更新,系统管理员也可以使用自动化的任务来定期对重要数据进行备份。
实现调度启动进程的方法有很多,例如通过 crontab、at 等命令,有关这些命令的具体用法
ps命令详解:查看正在运行的进程
[root@localhost ~] ps aux
#查看系统中所有的进程,使用 BS 操作系统格式
[root@localhost ~] ps -le
#查看系统中所有的进程,使用 Linux 标准命令格式
选项:
a:显示一个终端的所有进程,除会话引线外;
u:显示进程的归属用户及内存的使用情况;
x:显示没有控制终端的进程;
-l:长格式显示更加详细的信息;
-e:显示所有进程;
可以看到,ps 命令有些与众不同,它的部分选项不能加入"-“,比如命令"ps aux”,其中"aux"是选项,但是前面不能带“-”。
大家如果执行 “man ps” 命令,则会发现 ps 命令的帮助为了适应不同的类 UNIX 系统,可用格式非常多,不方便记忆。所以,我建议大家记忆几个固定选项即可。比如:
- “ps aux” 可以查看系统中所有的进程;
- “ps -le” 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;
- “ps -l” 只能看到当前 Shell 产生的进程;
- ps –ef 命令查询所有进程及其环境变量信息
top命令详解:持续监听进程运行状态
缓冲(buffer)和缓存(cache)的区别
我们还要解释一下缓冲(buffer)和缓存(cache)的区别:
缓存(cache)是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中读取。
缓冲(buffer)是在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。
简单来说,缓存(cache)是用来加速数据从硬盘中"读取"的,而缓冲(buffer)是用来加速数据"写入"硬盘的。
pstree命令:查看进程树
lsof命令:列出进程调用或打开的文件信息
lsof 命令,“list opened files”的缩写,直译过来,就是列举系统中已经被打开的文件。
通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。
进程优先级
nice和renice命令:改变进程优先级
常用信号(进程间通信)及其含义
kill命令详解:终止进程
kill 命令的执行原理是这样的,kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。
【例 1】 标准 kill 命令。
pstree -p 丨 grep httpd | grep -v "grep"
#查看 httpd 的进程树及 PID。grep 命令査看 httpd 也会生成包含"httpd"关键字的进程,所以使用“-v”反向选择包含“grep”关键字的进程,这里使用 pstree 命令来查询进程,当然也可以使用 ps 和 top 命令
|-httpd(2246)-+-httpd(2247)
| |-httpd(2248)
| |-httpd(2249)
| |-httpd(2250)
| |-httpd(2251)kill 2248
#杀死PID是2248的httpd进程,默认信号是15,正常停止
#如果默认信号15不能杀死进程,则可以尝试-9信号,强制杀死进程
[root@localhost ~]# pstree -p | grep httpd | grep -v "grep"
|-httpd(2246>-+-httpd(2247)
| |-httpd(2249)
| |-httpd(2250)
| |-httpd(2251)
#PID是2248的httpd进程消失了
使用“-1”信号,让进程重启
使用“-19”信号,让进程暂停。
killall命令:终止特定的一类进程
killall 也是用于关闭进程的一个命令,但和 kill 不同的是,killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程,也正是由于这一点,该命令常与 ps、pstree 等命令配合使用。
【例 1】杀死 httpd 进程。
[root@localhost ~] service httpd start
#启动RPM包默认安装的apache服务
[root@localhost ~] ps aux | grep "httpd" | grep -v "grep"
root 1600 0.0 0.2 4520 1696? Ss 19:42 0:00 /usr/local/apache2/bin/httpd -k start
daemon 1601 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start
daemon 1602 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start
daemon 1603 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start
daemon 1604 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start
daemon 1605 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start
#查看httpd进程
[root@localhost ~] killall httpd
#杀死所有进程名是httpd的进程
[root@localhost ~] ps aux | grep "httpd" | grep -v "grep"
#查询发现所有的httpd进程都消失了
【例 2】交互式杀死 sshd 进程。
[root@localhost ~] ps aux | grep "sshd" | grep -v "grep"
root 1733 0.0 0.1 8508 1008? Ss 19:47 0:00/usr/sbin/sshd
root 1735 0.1 0.5 11452 3296? Ss 19:47 0:00 sshd: root@pts/0
root 1758 0.1 0.5 11452 3296? Ss 19:47 0:00 sshd: root@pts/1
#查询系统中有3个sshd进程。1733是sshd服务的进程,1735和1758是两个远程连接的进程
[root@localhost ~] killall -i sshd
#交互式杀死sshd进程
杀死sshd(1733)?(y/N)n
#这个进程是sshd的服务进程,如果杀死,那么所有的sshd连接都不能登陆
杀死 sshd(1735)?(y/N)n
#这是当前登录终端,不能杀死我自己吧
杀死 sshd(1758)?(y/N)y
#杀死另一个sshd登陆终端
pkill命令:终止进程,按终端号踢出用户
当作于管理进程时,pkill 命令和 killall 命令的用法相同,都是通过进程名杀死一类进程
[root@localhost ~] pkill -9 httpd <--按名称强制杀死 httpd 进程
[root@localhost ~] pstree -p | grep httpd <-- 查看 apache 进程,发现没有了
[root@localhost ~] service httpd start <--重新启动 apache 进程
Starting httpd: httpd: Could not reliably determine the server’s fully qualified domain me, using 127.0.0.1 for ServerName
[OK]
[root@localhost ~] pstree -p | grep httpd <-- 再次查看,apache 进程重新启动- httpd (11157) -+-httpd(11159)| |-httpd(11160)| |-httpd(11161)| |-httpd(11162)| |-httpd(11163)| |-httpd(11164)| |-httpd(11165)| |-httpd(11166)
pkill命令踢出登陆用户
[root@localhost ~] w
#使用w命令查询本机已经登录的用户
20:06:34 up 28 min, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root ttyl - 19:47 18:52 0.01s 0.01s -bash
root pts/0 192.168.0.100 19:47 0.00s 0.09s 0.04s w
root pts/1 192.168.0.100 19:51 14:56 0.02s 0.02s -bash
#当前主机已经登录了三个root用户,一个是本地终端ttyl登录,另外两个是从192.168.0.100登陆的远程登录
[root@localhost ~] pkill -9 -t pts/1
#强制杀死从pts/1虚拟终端登陆的进程
[root@localhost ~] w
20:09:09 up 30 min, 2 users, load average: 0.00, 0.00,0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root ttyl - 19:47 21:27 0.01s 0.01s -bash
root pts/0 192.168.0.100 19:47 0.00s 0.06s 0.00s w
#虚拟终端pts/1的登录进程已经被杀死了
工作管理简介
命令放入后台运行方法(&和Ctrl+Z)
jobs命令:查看当前终端放入后台的工作
fg命令:把后台命令恢复在前台执行
bg命令:把后台暂停的工作恢复到后台执行
nohup命令:后台命令脱离终端运行
at命令详解:定时执行任务
crontab命令:循环执行定时任务
anacron命令
vmstat命令详解:监控系统资源
vmstat命令,是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息
[root@localhost ~] vmstat [-a] [刷新延时 刷新次数]
[root@localhost ~] vmstat [选项]
-a 的含义是用 inact/active(活跃与否) 来取代 buff/cache 的内存输出信息。除此之外,表 1 罗列出了 vmstat 命令的第二种基本格式中常用的选项及各自的含义。
本机是一台测试用的虚拟机,并没有多少资源被占用,所以资源占比都比较低。如果服务器上的资源占用率比较高,那么使用 vmstat 命令查看到的参数值就会比较大,我们就需要手工进行干预。如果是非正常进程占用了系统资源,则需要判断这些进程是如何产生的,不能一杀了之;如果是正常进程占用了系统资源,则说明服务器需要升级了。
dmesg命令:显示开机信息
free命令:查看内存使用状态
w和who命令:查看登陆用户信息
last和lastlog命令:查看过去登陆的用户信息
数据备份与恢复
备份策略(完全备份、增量备份和差异备份)
tar命令备份数据
https://c.biancheng.net/view/788.html
https://c.biancheng.net/view/822.html
dump命令用法详解:备份分区、文件或目录
restore命令:还原dump操作备份下的文件、目录或分区
dd命令详解:数据备份,并在备份过程中进行格式转换
rsync命令用法详解
使用 -a 选项,等同于同时使用 -r、-l、-p、-t、-g、-o、-D 选项,且 -a 还可以和 --no-OPTION 一并使用。下面再来看看
如果不使用 -l 选项,系统将不理会软链接文件。
–delete 选项用来–delete 删除 DEST 中 SRC 没有的文件
如果在 DEST 中增加文件,而 SRC 中不包含这些文件,那么在使用 --delete 选项做同步备份操作时,DEST 新增的这些文件会被删除
系统服务管理
系统服务及其分类
端口及查询方法
独立服务管理(RPM包的启动与自启动)
基于xinetd服务的管理方法
https://c.biancheng.net/view/1054.html
源码包服务管理(启动与自启动)
常见服务类别及功能
影响Linux系统性能的因素
sar命令详解:分析系统性能
系统日志管理
rsyslogd服务及启动方法
日志文件(常见)及其功能
日志文件格式分析
rsyslogd配置文件格式及其内容
https://c.biancheng.net/view/1102.html
日志服务器设置过程
https://c.biancheng.net/view/1105.html
日志轮替(日志转储)及logrotate配置文件分析
logrotate命令用法详解:进行日志转储(轮替)
日志分析工具(logwatch)安装及使用
系统启动管理
系统启动流程(以CentOS 6为对象)
BIOS开机自检简介
主引导目录(MBR)结构及作用
内核(内核模块)的加载过程
/sbin/init初始化系统环境
/etc/inittab:设置(修改)系统默认运行级别
/etc/rc.d/rc.local配置文件用法
启动引导程序(GRUB)加载内核的过程
/boot/grub/目录分析
GRUB磁盘分区表示法
/boot/grub/grub.conf(GRUB配置文件)
多系统并存的GRUB配置文件
GRUB手动安装方法
GRUB加密方法详解(2种加密方式)
字符界面调整分辨率的方法
内核模块管理(查看、添加和删除)
NTFS文件系统安装教程
https://c.biancheng.net/view/1040.html
LAMP环境搭建和LNMP环境搭建
LAMP环境搭建的前期准备
https://c.biancheng.net/view/1113.html
libxml2安装
libxml2是一个用来解析XML文档的函数库。它用 C 语言写成,并且能被多种语言所调用,如 C、C++、XSH、C#、Python、Kylix、Delphi、Ruby、PHP 等。它最初是为 GNOME 开发的项目,但是现在可以用在各种各样的项目中。
https://c.biancheng.net/view/1116.html
libmcrypt安装
libmcrypt 是加密算法扩展库,支持 DES、3DES、RIJNDAEL、Twofish、IDEA、GOST、CAST-256、ARCFOUR、SERPENT、SAFER+ 等算法
https://c.biancheng.net/view/1117.html
mhash和mcrypt安装
mhash 是基于离散数学原理的不可逆向的 PHP 加密方式扩展库。mhash 可以用于创建校验数值,消息摘要,消息认证码,以及无须原文的关键信息保存(如密码)等。
mcrypt 是 PHP 里面重要的加密支持扩展库。mcrypt 库支持 20 多种加密算法和 8 种加密模式。
mcrypt 要比 libmcrypt 更加先进,在很多项目中必须使用 mcrypt 加密方式。请大家注意,在安装 mcrypt 之前,必须先正确安装 libmcrypt 和 mhash。
https://c.biancheng.net/view/1118.html
zlib和libpng安装
zlib 是提供数据压缩用的函数库,使用 DEFLATE 算法,最初是为 libpng 函数库所写的,后来普遍被许多软件所使用。此函数库为自由软件,使用 zlib 授权。
libpng 软件中包含 libpng 函数库,这些库是用来解码 .png 格式的图片的
https://c.biancheng.net/view/1121.html
peg6安装过程
jpeg6 软件是用来解码 .jpg 和 .jpeg 格式的图片的
https://c.biancheng.net/view/1122.html
安装freetype
FreeType 库是一个完全免费(开源)的、高质量的、可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括 TrueType、OpenType、Type1、CID、CFF、Windows FON/FNT、X11 PCF 等,支持单色位图、反走样位图的渲染。
FreeType 库是高度模块化的程序库,虽然它是使用 ANSI C 开发的,但是采用面向对象的思想,因此,FreeType 的用户可以灵活地对它进行裁剪。
https://c.biancheng.net/view/1123.html
gd库安装
gd 库是 PHP 处理图形的扩展库,它提供了一系列用来处理图片的 API(应用程序编程接口),使用 gd 库可以处理图片或者生成图片。在网站上,gd 库通常用来生成缩略图,或者对图片加水印,或者生成汉字验证码,或者对网站数据生成报表等。
Apache安装过程详解(LAMP环境搭建)
Apache 其实是一个软件基金会组织的名字,早期他们开发的 Web Server 软件非常流行,当时的名称就叫做 Apache,不过后来改名字叫做 httpd 了,所以,现在大家常说的 Apache ,通常指的就是 httpd。
另外,Apache 就是 LAMP 环境中的“A”。前面做了这么多准备工作,就是为了正确安装 Apache+MySQL+PHP,现在可以安装 Apache 了
https://c.biancheng.net/view/1125.html
ncurses安装
ncurses 提供字符终端处理库,包括面板和菜单。它提供了一套控制光标、建立窗口、改变前景/背景颜色及处理鼠标操作的函数,使用户在字符终端编写应用程序时绕过了那些恼人的底层机制。简而言之,它是一个可以使应用程序直接控制终端屏幕显示的函数库。
这个软件既可以采用 RPM 包方式安装,也可以采用源码包方式安装。
https://c.biancheng.net/view/1126.html
MySQL安装
https://c.biancheng.net/view/1127.html
安装PHP
https://c.biancheng.net/view/1128.html
memcache安装和配置(自启动)
memcache 是一个高性能的分布式的内存对象缓存系统,通过在内存中维护一张统一的、巨大的 Hash 表,它能够用来存储各种格式的数据,包括图像、视频、文件及数据库检索的结果等。简单地说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
phpmyadmin安装及配置过程
本节学习如何安装 phpMyAdmin,它是用 PHP 脚本写的 MySQL 数据库的管理软件,是使用 Web 图形模式直接管理 MySQL 数据库的工具。phpMyAdmin 可以用来创建、修改、删除数据库和数据表;可以用来创建、修改、删除数据记录;可以用来导入和导出整个数据库;还可以完成许多其他的 MySQL 系统管理任务。
对于不熟悉使用命令来进行数据库管理的管理者来说,phpMyAdmin 更加简单和方便。其实大家可以把 phpMyAdmin 当作使用 PHP 脚本写的一个项目,我们安装 phpMyAdmin 的方法可以套用到绝大多数 PHP 开源项目的安装上(其他 PHP 的开源项目在安装到 LAMP 环境中时,可能需要手工建立后台数据库结构和数据库表结构)
LNMP安装的前期准备(LNMP一键安装包下载)
https://c.biancheng.net/view/1132.html
LNMP一键安装
https://c.biancheng.net/view/1134.html
LNMP安装php扩展模块(eAccelerator、xCache、memcached、imageMagick和ionCube)
https://c.biancheng.net/view/1135.html
SELinux管理
其实绝大多数系统的严重错误都是由于 root 用户的误操作引起的,来自外部的攻击产生的影响反而不是那么严重。root 用户的权限过高了,一些看似简单、微小的操作,都很有可能对系统产生重大的影响。最常见的错误就是 root 用户为了管理方便,给重要的系统文件或系统目录设置了 777 权限,这会造成严重的安全隐患。
SELinux 是由美国国家安全局(NSA)开发的,整合在 Linux 内核当中,针对特定的进程与指定的文件资源进行权限控制的系统。即使你是 root 用户,也必须遵守 SELinux 的规则,才能正确访问正确的资源,这样可以有效地防止 root 用户的误操作(当然,root 用户可以修改 SELinux 的规则)。
需要注意的是,系统的默认权限还是会生效的,也就是说,用户既要符合系统的读、写、执行权限,又要符合 SELinux 的规则,才能正确地访问系统资源。
SELinux的主要作用
SELinux 的工作模式(Disabled、Permissive和Enforcing)
Disable工作模式(关闭模式)
Permissive工作模式(宽容模式)
Enforcing工作模式(强制模式)
https://c.biancheng.net/view/3906.html
SELinux配置文件(/etc/selinux/config)
https://c.biancheng.net/view/3925.html
SELinux工作模式设置(getenforce、setenforce和sestatus命令)
https://c.biancheng.net/view/3921.html
命令
diff 命令基本格式为:
[root@localhost ~]# diff 选项 old new
#比较old和new文件的不同
此命令中可使用如下几个选项:
-a:将任何文档当作文本文档处理;
-b:忽略空格造成的不同;
-B:忽略空白行造成的不同;
-I:忽略大小写造成的不同;
-N:当比较两个目录时,如果某个文件只在一个目录中,则在另一个目录中视作空文件;
-r:当比较目录时,递归比较子目录;
-u:使用同一输出格式;
补丁文件的生成和使用
利用 diff 命令,比较两个文件(old.txt 和 new.txt)的不同,并生成补丁文件(txt.patch)
[root@localhost test]# diff -Naur /root/test/old.txt /root/test/new.txt > txt. patch
#比较两个文件的不同,同时生成txt.patch补丁文件
利用补丁文件 txt.patch 更新 old.txt 旧文件,实现此步操作需利用 patch 命令
[root@localhost test]# patch -pn < 补丁文件
#按照补丁文件进行更新
-pn 选项中,n 为数字(例如 p1、p2、p3 等),pn 表示按照补丁文件中的路径,指定更新文件的位置。
这里对 -pn 选项的使用做一下额外说明。我们知道,补丁文件是要打入旧文件的,但是当前所在目录和补丁文件中记录的目录不一定是匹配的,需要 “-pn” 选项来同步两个目录。
给旧文件打补丁依赖的不是新文件,而是补丁文件,所以即使新文件被删除也没有关系。
补丁文件中记录的目录和当前所在目录需要通过 “-pn” 选项实现同步,否则更新可能失败。