首页 > 技术文章 > linux基础内容

xiadongzhi 2019-11-04 09:30 原文

计算机系统

计算机硬件

  • 主机
    • 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

末行模式(

推荐阅读