计算机系统
计算机硬件
- 主机
- CPU
- 内存
- 主板
- 外部设备
- 存储 (硬盘 光盘 闪存)
- 输入设备 (键盘 鼠标等)
- 输出设备 (显示器 音箱等)
计算机软件
- 系统软件
- 操作系统
- 编译和解释系统
- 系统服务程序
- 网络软件
- 应用软件
- 文字处理软件
- 各种应用软件包
冯诺依曼体系结构
- 输入
- 输出
- 运算器
- 控制器
- 寄存器
计算机系统计量单位
转换关系 | 字节数 |
---|---|
1B=8bit | 2^0B |
1KB=1024B | 2^10B |
1MB=1024KB | 2^20B |
1GB=1024MB | 2^30B |
1TB=1024GB | 2^40B |
1PB=1024TB | 2^50B |
1EB=1024PB | 2^60B |
服务器
服务器组成
- CPU
- 内存
- 磁盘
- 机械硬盘(IDE/SATA/SCSI/SAS)
- 固态硬盘
- 网卡
- 电源
- 主板
- RAID卡
- RAID0
- RAID1
- RAID5
- RAID6
- RAID10
- RAID50
- RAID60
- 远程管理卡
- 光驱
服务器种类
- 机架式服务器
规格 :
厚度 用U表示 1U=1.75英寸=4.445CM=4.45CM
宽度 19英寸
-
刀片服务器
-
塔式服务器
服务器品牌
- dell
- r610 r710
- r620/r630 r720/r730
- IBM
- 3650
- 3850
- 3950
- HP
- 联想
- 浪潮
操作系统
什么是操作系统
- 用户与计算机硬件之间用于传递信息的系统程序软件
- 管理和控制计算机硬件与软件资源的计算机程序,直接运行在"裸机"上
操作系统种类
- Windows
- Linux
- Unix
- macOS
Linux系统
Linux特点
- 开放源代码,可以自由修改
- unix系统兼容,具备几乎所有unix的优秀特性
- 可自由传播,无任何商业化版权制约
- 适合Intel x86 CPU系列架构的计算机
Linux发展史
- 1969年unix在贝尔实验室诞生
- 1978年诞生BSD(Berkeley Software Distribution)系统。
- 此后,各大厂商及商业公司根据自身公司的硬件架构,并以BSD系统为基础,开发出了各种版本的unix系统
- 1984年,Andrew S. Tanenbaum 开发了用于教学的unix系统,命名为MINIX,并将MINIX系统运行在X86的PC计算机平台
- 1984年,Richard Matthew Stallman发起GNU项目计划,获得自由软件基金(FSF)会支持,并遵循GPL协议,目标是建立一个开源的类Unix系统
- 1990年,芬兰赫尔辛基大学学生Linus Torvalds 首次接触MINIX系统
- 1991年,Linus Torvalds开始在MINIX上编写各种驱动程序等操作系统内核组件
- 1991年底,Linus Torvalds 公开了Linux内核源码0.02版(http://www.kernel.org)
- 1993年,linux1.0版发行,linux转向GPL协议
- 1994年,linux的第一个商业发行版Slackware问世
Linux系统组成
- Linux内核
- GNU项目组件(gcc bash 等)
- 其它必要的应用程序
Linux发行版
- Redhat系列
- redhat
- fedora
- centos
- Debian系列
- Debian
- Ubuntu
- Slackware系列
- arch系列
Linux目录文件操作
命令格式
命令 [选项] [参数]
ls -l /etc/hosts
目录操作
创建目录
mkdir /data
查看目录下内容
ls /data
查看目录本身
ls -d /data
切换目录
cd
cd /data
cd ~
cd -
cd ..
查看当前所在目录
pwd
目录改名(或移动目录)
mv /data /wuxing
复制目录
cp -r /wuxing /root/
删除目录
rm -r /wuxing
绝对路径和相对路径
- 绝对路径: 从 / 开始
- 相对路径: 从当前目录开始
- 所有目录和文件相关的操作都可以使用绝对路径和相对路径
文件操作
创建文件
创建空文件
touch oldboy.txt
创建有内容的文件
echo oldboy > oldboy.txt #覆盖
echo 123456 >> oldboy.txt #追加
查看文件内容
查看文件内容命令很多
cat oldboy.txt
head oldboy.txt
tail oldboy.txt
more oldboy.txt
less oldboy.txt
grep sed awk
查看文件本身
ls -l oldboy.txt
修改文件名(或移动文件)
mv oldboy.txt oldgirl.txt
复制文件
cp oldgirl.txt /tmp/
修改文件内容
vi/vim oldgirl.txt
vi编辑器简单操作步骤
- vi oldgirl.txt #打开文件
- 输入字母i,进入插入模式,编辑文件
- 编辑完成后,按Esc,再输入 :wq 保存退出
删除文件
rm oldgirl.txt
命令分类
- 内置命令
- 外部命令
- 别名
- 函数
type cd
命令帮助
本地帮助
-
命令 --help
-
man 命令/配置文件
-
help 命令 (用于linux内置命令)
-
info 命令
在线帮助
搜索 linux ls 命令
http://man.linuxde.net/
http://linux.51yip.com/
https://www.gnu.org/software/coreutils/manual/coreutils.html
常用快捷键
tab键 命令或路径补全功能
ctrl+c 终止当前命令或程序
ctrl+d 退出当前shell
ctrl+l 清屏
ctrl+a 命令行光标移到行首
ctrl+e 命令行光标移到行尾
ctrl+u 命令行删除光标到行首的内容
ctrl+k 命令行删除光标到行尾的内容
ctrl+r 命令行搜索
ctrl+s 锁屏
ctrl+q 解锁
目录结构
http://www.pathname.com/fhs/pub/fhs-2.3.html
Linux目录机制
- Linux系统只有一个根 /
- 一切从根开始
- 整个根目录就是一颗倒挂的树
- 目录结构和设备是分离的,任何一个目录都可能对应一个不同的磁盘或分区
- 磁盘设备必须挂载才能使用
查看目录树
tree
目录结构详细
/usr 文件系统的主要部分
目录 | 含义 |
---|---|
/usr/bin | 基本用户命令二进制文件 |
/usr/sbin | 系统命令二进制文件 |
/usr/lib | 基本共享库和内核模块 |
/usr/lib64 | 64位共享库 |
/usr/local | 本地安装软件存放目录(源码安装软件默认目录) |
/usr/include | C程序包含的头文件 |
/usr/src | 程序源码目录 |
/usr/share | 与体系结构无关的数据 |
/usr/share/man | 帮助目录 |
/usr/share/doc | 文档目录 |
centos7系统运行级别
/usr/lib/systemd/system/runlevel0.target -> poweroff.target
/usr/lib/systemd/system/runlevel1.target -> rescue.target
/usr/lib/systemd/system/runlevel2.target -> multi-user.target
/usr/lib/systemd/system/runlevel3.target -> multi-user.target
/usr/lib/systemd/system/runlevel4.target -> multi-user.target
/usr/lib/systemd/system/runlevel5.target -> graphical.target
/usr/lib/systemd/system/runlevel6.target -> reboot.target
/boot 引导加载程序的静态文件
/dev 设备文件
- /dev/null
- /dev/zero
- /dev/sda
- /dev/sr0
/etc 系统配置文件
网卡配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0
DNS配置文件
/etc/resolv.conf
主机名配置文件
/etc/hostname
设置主机名
hostnamectl set-hostname wuxingge
hosts文件
/etc/hosts
文件系统自动挂载列表
/etc/fstab
[root@oldboyedu ~]# blkid
/dev/sda1: UUID="1515d309-b3aa-4df7-8a0a-a6bf5d0587c9" TYPE="xfs"
/dev/sda2: UUID="e5256992-206d-4ade-bb70-7ca46ec94998" TYPE="swap"
/dev/sda3: UUID="7189cadf-e438-4507-a4ef-4e304c4c3d40" TYPE="xfs"
/dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
开机自动启动程序
/etc/rc.local -> /etc/rc.d/rc.local
系统默认运行级别
/etc/inittab
各系统运行级别执行的任务
/etc/rc.d/rc0.d/
/etc/rc.d/rc1.d/
/etc/rc.d/rc2.d/
/etc/rc.d/rc3.d/
/etc/rc.d/rc4.d/
/etc/rc.d/rc5.d/
/etc/rc.d/rc6.d/
环境变量配置文件
- /etc/profile 系统环境变量
- /etc/profile.d/*.sh 软件特有的环境变量
- ~/.bash_profile 用户特定的环境变量
别名与函数配置文件
- ~/.bashrc 用户特定的别名和函数
- /etc/bashrc 系统别名和函数
系统登录提示信息
/etc/issue 认证前的输出信息,默认输出版本内核信息
/etc/issue.net
/etc/motd 设置认证后的输出信息
系统信息相关
[root@repo ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@repo ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
[root@repo ~]# uname -a
Linux repo.novalocal 3.10.0-957.12.2.el7.x86_64 #1 SMP Tue May 14 21:24:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
selinux配置文件
/etc/selinux/config
本次关闭selinux
setenforce 0
查看selinux状态
getenforce
语言字符集配置文件
/etc/locale.conf
设置语言字符集
localectl set-locale LANG=zh_CN.utf8
/home 用户家目录
/opt 附加应用程序软件包
/root root用户家目录
/run 运行时变量数据(pid文件)
/run/lock/ 锁文件
/proc 内核和进程信息虚拟文件系统
文件 | 含义 |
---|---|
/proc/cpuinfo | 处理器的信息 |
/proc/meminfo | 内存信息 |
/proc/devices | 当前运行内核所配置的所有设备清单 |
/proc/filesystems | 文件系统 |
/proc/dma | 当前正在使用的DMA通道 |
/proc/interrupts | 正在使用的中断和曾经有多少个中断 |
/proc/ioports | 当前正在使用的I/O端口 |
/sys 虚拟的目录(内存中的信息)
/tmp 临时文件
/var 变化的文件
目录 | 含义 |
---|---|
/var/cache | 应用程序缓存数据 |
/var/lib | 变化的数据 |
/var/log | 日志文件和目录 |
/var/opt | /opt的变量数据 |
/var/spool | 应用程序假脱机数据 |
/var/tmp | 系统重新引导之间保留的临时文件 |
系统相关日志文件
/var/log/messages
/var/log/secure
/var/log/dmesg
/mnt 临时文件系统的挂载点
/media 可移动设备的挂载点
/srv 系统提供的服务数据
文件属性(元数据)
文件属性信息
[root@repo ~]# ll -i /etc/hosts
101031 -rw-r--r--. 1 root root 159 6月 4 17:17 /etc/hosts
列 | 含义 |
---|---|
第一列 | inode号 |
第二列 | 文件类型及权限(第二列共11个字符:其中第一个字符是文件类型,随后的9个字符为文件的对应权限,最后一个字符点号 . 是和selinux有关的一个标识) |
第三列 | 硬链接个数 |
第四列 | 文件所有者(属主) |
第五列 | 文件所属的组(属组) |
第六列 | 文件大小 |
第七、八、九列 | 修改时间 |
第十列 | 文件名 |
inode和block
-
硬盘格式化的时候,操作系统将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
-
inode号是文件在磁盘上的唯一标识
-
inode 用来存放文件的属性和指向其block的指针
-
一个文件占一个inode,至少占用一个block
-
磁盘读取或写入数据是按block为单位进行的
-
读或者写一个block称为一次IO
文件三要素
- 目录项(文件名)
- inode
- block
文件类型 | 目录项 | inode | block |
---|---|---|---|
文件 | 文件名 | inode号 | 文件内容 |
目录 | 目录名 | inode号 | 目录中的文件名 |
找文件过程
-
首先,系统找到这个文件名对应的inode号码
-
其次,通过inode号码,获取inode信息
-
最后,根据inode信息,找到文件数据所在的block,读出数据
查看文件inode
ls -li
查看文件属性详细信息
stat /etc/hosts
查看磁盘inode
df -i
查看磁盘block
df -h
磁盘空间满
inode使用完或block使用完都表示磁盘空间使用完
文件类型
文件类型标识符 | 文件类型 |
---|---|
- | 普通文件(文本文件、二进制文件、数据文件、压缩文件) |
d | 目录(directory) |
l | 软链接(link) |
b | 块设备(block) |
c | 字符设备(character) |
s | socket文件 |
p | 管道文件(pipe) |
查看文件类型
file /etc/hosts
权限
权限 | 含义 | 数字表示 |
---|---|---|
r | 读 | 4 |
w | 写 | 2 |
x | 执行 | 1 |
- | 没有任何权限 | 0 |
属主 | 属组 | 其他用户 |
---|---|---|
rw- | r-- | r-- |
6 | 4 | 4 |
链接数
硬链接
- 具有相同inode号的文件(互为硬链接),本质是一个文件
- 目录自带硬链接但不能做硬链接
- 硬链接不能跨文件系统
目录硬链接说明
[root@oldboy test]# ls -ldi oldboy oldboy/. oldboy/oldboydir/..
398269 drwxr-xr-x 3 root root 4096 Aug 26 20:20 oldboy
398269 drwxr-xr-x 3 root root 4096 Aug 26 20:20 oldboy/.
398269 drwxr-xr-x 3 root root 4096 Aug 26 20:20 oldboy/oldboydir/..
创建硬链接
ln oldboy.txt OLDBOY.TXT
删除文件本质
- 删除文件的所有硬链接
文件删除条件
- 文件硬链接数为0
- 文件没有进程占用
软链接(符号链接)
- 软链接文件指向源文件
- 软链接与源文件是不同的文件
- 可以跨文件系统
创建软链接
ln -s oldboy.txt old.txt
用户和组
用户类型
UID | 用户类型 | 用户特性 |
---|---|---|
0 | 超级用户root | linux系统超级管理员 |
1-999 | 虚拟用户 | 不能登录系统 |
1000-65535 | 普通用户 | 可以登录系统 |
文件时间
-
modify mtime 文件内容(block)修改时间
-
change ctime 文件属性(元数据)改变时间
-
access atime 文件内容访问时间
ls -lhi
7 8 9 三列是时间(修改时间)
文件归档
tar [选项] 归档文件 【文件或目录】
参数 | 参数说明 | 其他说明 |
---|---|---|
-z | gzip压缩格式 | |
-c | 创建归档 | |
-f | 指定归档文件 | |
-r | 给归档文件中添加文件 | |
-t | 列出归档文件的内容 | |
-x | 从归档中提取文件 | |
-v | 显示执行过程 | |
-C | <目录> 指定解压到的目录 | |
--exclude=文件目录 | 排除文件 | --exclude=/etc/services --exclude=c --exclude=b |
-h | 需要打包的文件是软链接用此参数 | |
-P | 从/开始打包 |
软件包管理
rpm
- rpm 红帽软件包管理工具
- rpm管理的软件包是rpm包
rpm命令格式
rpm [选项...] 参数
查询选项
选项 | 含义 |
---|---|
-q | 查询 |
-a | 所有 |
-p | 软件包 |
-f | 文件属于哪个软件包 |
-l | 软件包中的文件列表 |
-c | 软件包中的配置文件 |
-R | 软件包依赖 |
安装/升级/卸载选项
选项 | 含义 |
---|---|
-i | 安装 |
-v | 显示附加信息 |
-h | 安装时输出hash记号 |
-e | 卸载 |
-U | 升级 |
--nodeps | 不检查依赖 |
yum
rpm包管理工具,自动解决依赖关系
yum命令格式
yum [选项] command [参数]
常用command
- clean
clean all 清除全部
clean packages 清除临时包文件(/var/cache/yum 下文件)
clean headers 清除rpm头文件
clean oldheaders 清除旧的rpm头文件
- list
list 可安装和可更新的RPM包
repolist 显示资源库的配置
list installed 已安装的包
list extras 已安装且不在资源库的包
deplist 列出包的依赖
- 安装/重装/卸载/升级
install 安装包
localinstall 安装本地的RPM包
groupinstall 组安装
reinstall 重新安装包
remove 卸载包
update 更新包
- 搜索
search 搜索包
provides 搜索文件属于哪个包
- 其它
history 查看yum历史操作
info installed 已安装包的信息
yum源配置
- yum源配置文件 /etc/yum.repos.d/*.repo
[BaseOS]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
二进制包
- 下载
- 解压
源码包
- 下载
- 解压
- 进入目录
- 配置
./configure
- 编译
make
- 安装
make install
wget https://src.fedoraproject.org/repo/pkgs/man-pages-zh-CN/manpages-zh-1.5.1.tar.gz/13275fd039de8788b15151c896150bc4/manpages-zh-1.5.1.tar.gz
./configure --disable-zhtw --prefix=/usr/local/zhman
make
make install
alias cman='man -M /usr/local/zhman/share/man/zh_CN'
用户管理
Linux是一个多用户多任务的操作系统
用户作用
-
登录认证
-
管理计算机资源
用户组
- 组是一个逻辑概念,将用户分成不同的组,方便管理
- Linux中用户与组的关系是多对多
用户分类
UID | 用户类型 |
---|---|
0 | 超级用户root |
1-499/1-999 | 虚拟用户 |
>500/> 1000 | 普通用户 |
组分类
gid | 组类型 |
---|---|
0 | root组 |
1-499/1-999 | 系统用户组 |
>500/> 1000 | 普通用户组 |
用户相关文件
- /etc/passwd
用户相关信息
root | x | 0 | 0 | root | /root | /bin/bash |
---|---|---|---|---|---|---|
账号 | 密码占位符 | UID | GID | 用户说明 | 家目录 | 登录shell |
- /etc/shadow
密码相关信息
账号 | 用户账号名称 |
---|---|
密码 | 加密后的口令 |
最近更改密码的时间 | 从1970年1月1日起,到用户最后一次更改密码的天数 |
禁止修改密码的天数 | 从1970年1月1日起,到用户可以更改密码的天数 |
用户必须更改口令的天数 | 从1970年1月1日起,到用户必须更改密码的天数 |
警告更改密码的期限 | 用户密码过期前多少天提示用户更改密码 |
不活动时间 | 在用户密码过期之后到禁用账户的天数 |
失效时间 | 从1970年1月1日起,到用户被禁用的天数 |
标志 | 保留 |
- /etc/default/useradd
添加用户时的默认配置
GROUP=100 依赖于/etc/login.defs 的USERGROUPS_ENAB参数,如果为no,则此处控制
HOME=/home 把用户家目录建在/home 下
INACTIVE=-1 是否启用账号过期停权,-1表示不启用
EXPIRE= 账号终止日期,不设置表示不启用
SHELL=/bin/bash 新用户默认所用的shell类型
SKEL=/etc/skel 配置新用户家目录的环境配置文件路径
CREATE_MAIL_SPOOL=yes 创建mail文件
- /etc/login.defs
用户认证的默认属性
PASS_MAX_DAYS 99999 一个密码最长可以使用的天数
PASS_MIN_DAYS 0 更换密码的最小天数
PASS_MIN_LEN 5 密码的最小长度
PASS_WARN_AGE 7 密码失效前提前多少天开始警告
- /etc/skel/
用来存放新用户的环境配置文件,为新创建的用户添加初始化配置
[root@localhost ~]# ll /etc/skel/ -a
总用量 28
drwxr-xr-x. 2 root root 76 9月 25 15:45 .
drwxr-xr-x. 101 root root 8192 10月 28 12:01 ..
-rw-r--r--. 1 root root 18 5月 11 08:16 .bash_logout
-rw-r--r--. 1 root root 141 5月 11 08:16 .bash_profile
-rw-r--r--. 1 root root 312 5月 11 08:16 .bashrc
-rw-r--r--. 1 root root 658 5月 12 00:06 .zshrc
组相关文件
- /etc/group 组信息文件
- /etc/gshadow 组密码信息文件
创建用户
useradd
选项 | 说明 |
---|---|
-u uid | 指定用户id |
-g initial_group | 用户登录起始用户组(主要组) |
-G group,[...] | 附加组(次要组) |
-M | 不创建家目录。一般创建虚拟用户是不创建家目录,部署服务时要创建虚拟用户 |
-s shell | 指定用户登录系统后使用的shell |
-d home_dir | 指定家目录 |
-r | 创建虚拟用户 |
-c comment | 注释说明信息 |
-m | 用户目录如不存在则自动创建 |
-e expire_date | 账号终止日期(账号过期时间) 日期 -e "+30 day" -e "2016/12/20" |
-f | 账号过期几日后永久停权 |
查看用户信息
id root
查看用户登录系统的信息
w
who
users
last
lastlog
切换用户
su [选项] 用户
选项 | 说明 |
---|---|
- | 使切换后的用户登录自己对应的shell |
-c | 以另外一个用户身份执行一个命令 |
-m | 切换用户时,不登录自己的shell |
-s | 切换用户时,登录指定的shell |
修改用户
usermod
选项 | 注释说明 |
---|---|
-u uid | 指定用户id |
-g initial_group | 用户登录起始用户组(主要组) |
-G group,[...] | 附加组(次要组) |
-s shell | 指定用户登录系统后使用的shell |
-d home_dir | 指定家目录 |
-m newhome_dir | 将家目录内容移至新位置 (仅于 -d 一起使用) |
-L | 冻结用户的密码,使之无法登录,实际就是修改/etc/shadow 的密码栏,在前面加上 ! useradd -e chage -E 或 passwd -l 都有类似效果 |
-U | 取消冻结用户密码,使之恢复登录 |
-c comment | 注释说明信息 |
-e expire_date | 账号终止日期(账号过期时间) 日期 -e "+30 day" -e "2016/12/20" |
-f | 账号过期几日后永久停权 |
删除用户
userdel 用户名
选项
-r 删除用户家目录
密码管理
passwd
passwd [选项...] <用户名>
选项 | 说明 |
---|---|
-k | 保留即将过期的用户在期满后仍然能使用 |
-d | 删除用户密码,仅能以root权限操作 |
-l | 锁定用户,仅能通过root操作 |
-u | 解除锁定 |
-f | 强制操作,只有root才能操作 |
-x | 两次密码修改的最大天数,后面接数字,只有root才能操作 |
-n | 两次密码修改的最小天数,后面接数字,只有root才能操作 |
-w | 在距多少天提醒用户修改密码,只有root才能操作 |
-i | 在密码过期后多少天,用户被禁用,只有root才能操作 |
-S | 查询用户的密码状态,只有root才能操作 |
--stdin | 从stdin读入密码 |
组管理
gpasswd
gpasswd [-a user] [-d user] [-A user,...] [-M user,...] [-r] [-R] groupname
选项 | 含义 |
---|---|
-a | 添加用户到组 |
-d | 从组删除用户 |
-A | 指定管理员 |
-M | 指定组成员和-A的用途差不多 |
-r | 删除密码 |
-R | 限制用户登入组,只有组中的成员才可以用newgrp加入该组 |
sudo
作用
以其他用户身份执行一条命令
某个用户可以使用不同角色,执行不同的命令
sudo命令格式及选项
sudo [选项] [command]
选项 | 含义 |
---|---|
-l | 列出用户在主机上可以使用的命令 |
-u | 用户名 指定以某个用户身份执行特定的命令(默认是root) |
-k | 删除时间戳(时间戳默认5分钟失效) |
-v | 跟踪最新的时间戳 |
sudo配置文件
visudo <====> vim /etc/sudoers
sudo授权语法规则
用户或组 | 主机 | 可以切换的用户角色 | 命令 |
---|---|---|---|
root | ALL= | (ALL) | ALL |
User_Alias ADMINS = jsmith,mikem, %groupname | Host_Alias FILESERVERS = fs1,fs2 | Runas_Alias OP = root | Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig |
用户别名
User_Alias KAIFA_ADMINS = kaifa01, kaifa02
User_Alias OLD_ADMINS = oldboy, oldgirl, %sa
User_Alias OLD_NETADMINS = leo,maya
主机别名
Host_Alias FILESERVERS = fs1, fs2
角色别名
Runas_Alias OP1 = root, oldboy
Runas_Alias OP2 = root, oldgirl
命令别名
Cmnd_Alias USERCMD = /usr/bin/passwd [a-zA-Z0-9]*, /bin/chown, /bin/chmod, !/usr/bin/passwd root
Cmnd_Alias DISKCMD = /sbin/fdisk, /sbin/parted
Cmnd_Alias NETMAGCMD = /sbin/ifconfig, /etc/init.d/network
Cmnd_Alias CTRLCMD = /usr/sbin/reboot, /usr/sbin/halt
Cmnd_Alias KAFACMD = /bin/grep,/usr/bin/tail,/bin/cat
sudo日志审计
visudo 最后添加
Defaults logfile=/var/log/sudo.log
各种开源跳板机或堡垒机
- jumpserver
- gateone
- teleport
文件权限
[root@localhost ~]# ll /etc/passwd
-rw-r--r-- 1 root root 1514 10月 18 21:28 /etc/passwd
linux系统的三种权限
- 所有者(属主):当用户创建文件时,创建者就是这个文件的属主
- 用户的属组: 同组人
- 其他人
三种基本权限
权限 | 含义 | 八进制数字表示 |
---|---|---|
r | 读 | 4 |
w | 写 | 2 |
x | 执行 | 1 |
- | 没有任何权限 | 0 |
属主 | 属组 | 其他用户 |
---|---|---|
rw- | r-- | r-- |
6 | 4 | 4 |
三种基本权限对文件目录含义
权限 | 文件 | 目录 |
---|---|---|
r:读 | 查看阅读 | 列出目录中文件列表 |
w:写 | 对文件内容增 删 改操作 | 在目录中创建文件 删除文件 修改文件名 |
x:执行 | 运行 | 可以使用cd命令进入目录 |
访问文件时,linux权限的执行顺序
- 访问者是属主吗?如果是,启用用户权限,不是,执行下一步
- 是属组成员吗? 如果是, 启用组权限
- 以上都不是,启用其他人权限
- 以上都没通过,被拒绝访问
权限设置
chmod命令格式
chmod [选项]... 模式[,模式]... 文件...
chmod [选项]... 八进制模式 文件...
模式
用户类型 | 操作字符 | 权限字符 |
---|---|---|
ugoa | +-= | rwx- |
八进制模式
三个八进制数: 属主 属组 其他人
chown 修改文件属主和属组
chown [选项]... [所有者][:[组]] 文件
常用选线 -R
chown 用户 文件或目录
chown :组 文件或目录
chown 用户:组 文件或目录
chown 用户.组 文件或目录
各种权限组合对文件目录的作用
权限 | 针对文件 | 针对目录 |
---|---|---|
--- | 什么都做不了 | 什么都做不了 |
r-- | 可以查看文件内容 | 只能看到文件名 |
-w- | 对文件写操作会覆盖文件内容 | 什么都做不了 |
--x | 什么都做不了 | 可以cd |
rw- | 正常读写 | 只能查看文件名 |
r-x | 可读可执行 | 可以cd 可以查看 |
-wx | 对文件写操作会覆盖文件内容 | 可以cd 可以写 不能查看 |
rwx | 什么都可以做 | 什么都可以做 |
umask
- 控制默认权限
- 系统内核文件默认权限是666
- 系统内核目录默认权限是777
umask默认值
- root用户:umask(022)
- 其它用户:umask(002)
修改umask值
umask 数字
文件默认权限控制
- 文件默认权限=系统内核文件默认权限-umask
- 目录默认权限=系统内核目录默认权限-umask
对于文件 umask值任意一位是奇数时, 减umask值 后, 对应位为奇数的 加1
默认权限与权限安全临界点
- inux的默认权限就是安全的临界点,也是最佳的权限
- 目录 755 文件 644 是相对安全的临界点
特殊权限位
- suid
- sgid
- sticky(粘滞位)
suid
4(SUID) 设置SUID的文件,无论谁执行此文件,他都有文件所有者的权限
- SUID 权限仅对二进制程序(binary program)有效
- 执行者对于该程序需要具有x的可执行权限;
- 本权限仅在执行该程序的过程中有效 (run-time);
- 执行者将具有该程序拥有者 (owner) 的权限。
sgid
2(SGID) 设置SGID的目录,无论谁来此目录,他都有目录所属组的权限
- SGID 可以针对目录来设置,目录设置sgid后,普通用户放到这个目录下的文件的用户组跟这个目录走
- SGID 对二进制程序的作用跟suid类似
- 程序执行者对于该程序来说,需具备 x的权限
- 执行者在执行的过程中将会获得该程序群组的支持
sticky(粘滞位)
1(sticky) 存放在该目录的文件只允许属主操作
特殊权限位设置
chmod 4755 filename
chmod u+s filename
chmod g+s filename
chmod +t /tmp
suid | sgid | sticky |
---|---|---|
4 | 2 | 1 |
chmod没有执行权限修复
install
install [选项]... 源文件 目标文件
install -m 755 chmod /bin/chmod
隐藏权限
设置隐藏权限
chattr
chattr [选项] 参数(文件)
+ - =
i 不可改变
a 只能添加数据,不能删除 一般用于日志文件
A atime不可修改 S 磁盘I/O同步
c 数据存取时经过压缩
d 不备份j 日志功能 从ext3开始有此功能
s 保密性的删除文件,硬盘空间全部回收
u 最大限度保存数据
查看隐藏权限
lsattr 文件名
进程管理
程序
静态的指令集合
不占用系统的运行资源
不能申请系统资源、不能被系统调度、也不能作为独立运行的单位
进程概念
进程(Process)是一个程序在其自身的虚拟地址空间中的一次执行活动。
一个程序的动态执行过程,它具有生命期,是动态的产生和消亡的资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源
进程的类型
- 交互进程
- 批处理进程
- 守护进程
进程的属性
- 每个进程都存在于机器的物理内存中
- 每个进程都有一个PID作为进程识别号
- 每个进程除了PID之外还有另外4个识别号
- 实际用户识别号
- 实际组识别号
- 有效用户识别号
- 有效组识别号
进程的输入输出环境
打开文件的描述符
- 几乎每个进程都从外部源读取信息或将信息写入外部源,通常是两者兼有
- 在Linux系统中,打开文件的描述符充当信息源或接收器
- 进程从文件描述符中读取信息或者将信息写入文件描(数字)述符中
- 文件描述符可以与常规文件、设备节点、网络套接字连接,甚至和其他描述符连接,构成管道(允许进程间通信)
内存映射文件
最常被用来存放进程的可执行代码,也用于其他类型的非串行数据访问
文件系统环境
和进程相关的文件系统概念,例如进程的当前工作目录、和进程的umask(用来为新生成文件设置权限)
环境变量
所有环境变量的集合,称为进程的环境
遗留信息
- 每个进程都以PID或进程id来识别,PID在进程创建时指定
- 每个进程都有一个明确定义的父进程和可能被充分定义的子进程
- 一个进程本身的身份、其子进程的身份,以及在某种程度上其同胞进程的身份都是由该进程来维护的
凭证
- 每个进程在一个一个给定用户id和组id集合环境下运行。这些凭证限制进程所能访问的资源
- 文件操作
- 和其他哪些进程通信
资源统计和限制
- 内存大小
- 打开的文件数目
- CPU时间总量及其他
进程的启动方式
- 前台启动
- 后台启动
- 调度启动
进程管理工具
ps
进程选择
-A,-e,ax 所有进程
-C,commmand 所有command的实例
-U,--user username 属于user的所有进程
-t,--tty terminal 从terminal启动的所有进程
-p,p,--pid N Pid为N的进程
-eo
选项 | 含义 |
---|---|
user | 用户名 |
uid | UID |
pid | 进程号 |
ppid | 父进程号 |
size | 内存大小 |
vsize | 总虚拟内存大小 |
share | 共享页面文件数量 |
nice | 进程优先级 |
pmem | 物理内存占用率 |
trs | 程序执行代码驻留大小 |
rss | 进程使用的总物理内存数 kbytes |
time | cpu使用时间 |
stat | 进程状态 |
cmd(args) | 命令内容 |
输出选择
选项 | 含义 |
---|---|
-f | 详尽列表 |
-l,l | 长格式 |
-j,j | 作业格式 |
top
按键
按键 | 含义 |
---|---|
q | 退出 |
h或? | 帮助 |
S | 设置两次更新之间的时间(以秒为单位) |
Space | 更新显示 |
M | 根据内存大小对进程排序 |
P | 根据CPU(处理器)占用对进程排序 |
U | 显示特定用户的进程 |
K | 杀死进程(给进程发送信号) |
R | 更改进程优先级 |
z | 高亮显示 |
x | 选中列 |
shift + < 或 > | 移动选中列 |
c | 命令详细 |
选项
选项 | 含义 |
---|---|
-d secs | 在两次刷新之间延迟secs秒(默认为5秒) |
-n N | 刷新N次后退出 |
-p | 只监控指定的进程PID |
-i | 只显示正在使用CPU的进程 |
-H | 显示线程 |
-u | 只查看指定用户名的进程 |
-b | 将输出编排成易处理格式,适合输出到文件处理 |
显示结果说明
列名 | 含义 |
---|---|
PID | 进程ID |
USER | 进程所有者 |
PR | 进程优先级 |
NI | 负值表示高优先级,正值表示低优先级 |
VIRT | 进程启动后使用虚拟内存总量(KB), VIRT=SWAP+RES |
RES | 实际物理内存使用大小(KB),RES=CODE+DATA |
SHR | 共享内存大小(KB),可能与其它进程共享的内存;计算进程使用物理内存大小: RES-SHR |
S | 进程状态; R 运行, S 休眠, D 不可中断, T 停止, Z 僵尸 |
%CPU | 上次更新到现在的CPU时间占用百分比 |
%MEM | 使用物理内存百分比 |
TIME+ | 使用CPU总时间 |
COMMAND | 命令名称和参数 |
进程的状态
- 在Linux系统中,第一个进程由内核在启动时运行
- 其他所有进程都是父进程自我复制或派生(forking)的结果
- 一个进程由另一个进程执行的过程叫做exec
- 新命令由进程(通常是Shell)运行,首先派生(fork),继而执行(exec)。这种机制被称为派生和执行(forkandexec)机制
- 进程总是处于五种状态之一
- 当进程终止时,父进程负责收集进程的返回值和资源使用信息
- 如果父进程在子进程之前终止,失去父进程的子进程托孤给第一个进程
五种状态
- 可运行(R)
- 处于可运行状态的进程,一旦有机会,就会访问CPU
- 在任何给定时间内只有一个进程可以在CPU上运行
- 自愿(可中断的)睡眠(S)(可中断睡眠(等待事件完成))
- 非自愿(不可中断或强制)睡眠(D)
- 内核迫使进程进入非自愿睡眠状态
- 当资源被释放时,内核会唤醒进程并将设置为可运行状态
- 停止的(挂起的)进程(T)( 被挂起的进程在被用户重新启动前不会执行任何操作 )
- 僵尸进程(Z)
- 每个快要终止的进程会经历一个短暂的僵尸状态
- 有时有些进程会一直停留在僵尸状态
状态其它说明
符号 | 含义 |
---|---|
< | 高优先级 |
N | 低优先级 |
L | 将页面锁定到内存中 |
s | 是session领导者 |
l | 是多线程的 |
+ | 位于前台进程组中 |
进程如何启动
- 引导系统时,Linux内核启动第一个进程。一个已存在的进程继续派生,所有其他进程得以启动
- 在通常情况下,创建一个新进程是为了运行一个指定的命令(例如,bash Shell创建运行chmod命令的进程)
- Linux(和UNIX)系统不同于其他操作系统,进程创建和命令执行是两个不同的概念
- 不运行新命令也可以创建新进程
- 不创建新进程也可以运行新命令
创建新进程
- 新进程通过一种名叫派生的方式创建
- 当进程派生时,它创建自己的一个副本
- 新派生的进程(子进程)几乎精确复制了原进程(父进程)
- 子进程继承了与父进程内存完全一样的副本,继承了父进程任何打开的文件,并且继承完全一样的父进程拥有的任何参数。例如当前工作目录或umask
- 执行新命令(exec)
- 执行新命令时,当前进程清除并释放出它的大多数资源,从文件系统中指定的命令那里装入一套新指令。新程序从程序的入口点开始执行
父进程与子进程直接的区别
- 子进程的遗留信息(子进程有不同的进程ID和父进程ID)
- fork()系统调用的返回值
进程如何终止
- 通过选择退出(exit)正常终止
- 接收到信号而非正常终止
孤儿进程
如果父进程在子进程之前终止,这个子进程就变成了孤儿进程
僵尸进程
- 当进程退出,释放大多数资源和它的父进程收集它的返回值、释放剩余资源这两段时间之间,子进程处于一个特殊状态,被称为僵尸进程(zombie)
- 每个进程都会经过一个短暂的僵尸状态
进程优先级
数字越小,优先级越高
范围
-20(最大优先级)~19(最小优先级)
进程优先级修改
renice -15 -p 3371 #进程号为3371的进程优先级设置为-15
进程间通信(IPC)方式
- 管道
- 信号
- 消息队列
- 共享内存
- 套接字(socket)
- 本地(unix /tmp/mysql.sock )
- 网络 ( tcp 10.0.0.51:3306 10.0.0.51:36572 1224/mysqld )
信号
为什么要发送信号
- 硬件异常
- 软件状态
- 终端中断
- 其他进程
kill发送信号
信号名 | 信号数字 | 含义 |
---|---|---|
HUP | 1 | 终端断线 |
INT | 2 | 中断(同 Ctrl + C) |
QUIT | 3 | 退出(同 Ctrl + \) |
KILL | 9 | 强制终止 |
TERM | 15 | 终止 |
CONT | 18 | 继续(与STOP相反, fg/bg命令) |
STOP | 19 | 暂停(同 Ctrl + Z) |
trap
trap "reboot" 2 #获取2信号,执行reboot命令
trap "" 2 #屏蔽一个信号
trap 2 #恢复信号
作业
Bash允许前台运行一个作业,后台运行多个作业
从shell提示符运行命令时,除非特别指定,命令会在前台运行
通过给命令行附加一个“&”字符,任何指定的命令也可以在后台运行
作业管理
jobs #查看后台作业
ctrl+z #挂起当前的前台作业,并将其置于后台
bg %num # 将后台作业由stoped变成running
fg %num #把后台的作业搬到前台
kill %N #终止后台作业N
& #后台运行程序
nohup #将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端
screen
screen -S test #创建一个名称为test会话,并进入此会话
Ctrl+a+d #按Ctrl+a,然后再按d 暂时离开当前会话
screen -ls #查看所有screen会话
screen -r test #进入test会话
进程相关内存文件
-
/proc
-
进程号目录
- cmdline
- comm
- exe -> /usr/sbin/sshd
- fd
- smaps
- status
-
cpuinfo
-
diskstats
-
filesystems
-
fs
-
loadavg
-
meminfo
-
swaps
-
uptime
-
vmstat
-
-
/sys
- dev
- devices
- fs
- kernel
- module
服务管理
服务:启动后在后台执行,等待用户或其他软件调用
分类
- 系统服务--服务对象是linux系统本身
- 网络服务--服务对象是网络中的其他客户端
启动方法
- 独立系统服务
- 一经启动,后台驻留,不管是否被用到
- 响应速度快
- 占用资源
- 临时服务
- 用时启动,使用完毕结束
- 节省资源
- 响应慢
独立系统服务管理
C6
/etc/init.d/* ----> /etc/rc.d/init.d/*
service servername start/stop/restart/reload/status
C7
/usr/lib/systemd/system/*.service
systemctl start/status/stop/restart/reload servername
开机启动设置
C6
chkconfig servername on/off
开机启动的本质
ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc3.d/S99oracle
备注
S表示服务开启
K表示服务关闭
C7
systemctl enable/disable servername
开机启动本质
Created symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service → /usr/lib/systemd/system/firewalld.service.
Created symlink /etc/systemd/system/multi-user.target.wants/firewalld.service → /usr/lib/systemd/system/firewalld.service.
设置开机启动项目
/etc/rc.local -----> /etc/rc.d/rc.local
临时服务管理
xinetd
计划任务
计划任务种类
- 突发性(只执行一次) -- at batch
- 周期性 -- cron
at
只执行一次的任务
服务
atd
相关文件
/etc/at.allow #允许使用at的用户
/etc/at.deny #禁止使用at的用户
/var/spool/at/ #计划任务存放位置
at命令选项
选项 | 含义 |
---|---|
-m | 完成工作后,使用邮件通知用户 |
-l | 查看计划任务 |
-d | 删除 |
-v | 详细信息 |
-c | 查看工作的详细内容 |
时间格式
HH:MM [YY-MM-DD]
操作步骤
at 04:00
at> command
ctrl+d 退出
cron
周期性执行任务
服务
crond
相关文件
/etc/cron.allow
/etc/cron.deny
/etc/cron.d
/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly
/var/spool/cron/
/etc/crontab
crontab命令选项
-u 用户名 指定用户名称
-e 定制计划任务
-l 查看计划任务
计划任务中的内容
分 | 时 | 日 | 月 | 周 | 任务 |
---|---|---|---|---|---|
0-59 | 0-23 | 1-31 | 1-12 | 0-7 | 命令或脚本 |
计划任务中的特殊符号
符号 | 含义 |
---|---|
* | 任何时间 |
, | 分隔时间 |
- | 时间范围 |
/n | 每隔n个单位 |
计划任务需要注意的问题
执行的任务的输出一定要重定向
vi编辑器
linux下的文本编辑器
插入(编辑)模式
命令 | 含义 |
---|---|
i | 在当前光标插入 |
a | 在当前光标后面插入 |
o | 在当前行下一行插入一个新的空行并进入编辑模式 |
O | 在当前行上一行插入一个新的空行并进入编辑模式 |
C | 把光标所在位置到行尾的内容删除并进入编辑模式 |
命令模式
- 移动光标
含义 | 命令 |
---|---|
移动到文件的最后一行 | G |
移动到文件的第一行 | gg |
把光标移动到行尾 | $ |
把光标移动到行首 | ^ |
移动到第100行 | 100gg 100G |
移动光标到括号的另一半 | % |
- 复制剪切粘贴删除等操作
含义 | 命令 |
---|---|
复制当前行 | yy |
粘贴 | p |
剪切当前的内容 | dd |
剪切光标到行首内容 | d^ |
剪切光标到行尾内容 | d$ |
剪切一个单词 | dw |
剪切当前行到最后一行内容 | dG |
剪切当前行到第一行内容 | dgg |
撤销 | u |
恢复 | ctrl + r |
剪切光标位置一个字符 | x |
替换光标位置一个字符 | r |