linux基础内容

计算机系统

计算机硬件

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

末行模式(😃

含义 命令
显示行号 :set nu
取消显示行号 :set nonu
取消高亮显示 :noh
保存文件内容 :w
退出 :q
保存文件内容并退出 :wq
强制退出 :q!
强制保存退出 :wq!
n1到n2行查找word1并替换为word2 :n1,n2s#word1#word2#g
全文查找word1并替换为word2 :%s#word1#word2#g
将n1到n2行的内容移动到n3行后面 :n1,n2 m n3
将n1到n2行的内容拷贝到n3行后面 :n1,n2 co n3
删除n1到n2行的内容 :n1,n2d
删除空行及全部是空白字符的行 :g/^\s*$/d
删除所有行尾的空白字符 :%s#\s*$##
保存当前文件到filename文件 :w filename
将n1到n2行的内容保存成filename文件 :n1,n2 w filename
读入filename文件内容并加载到当前文件 :r filename
暂时离开vi到命令行模式下执行command的显示结果 :!command
帮助 :h :wq
切换到下一个文件 :bn
切换到上一个文件 :bp

末行模式(/或?)

  • / 向下搜索
  • ? 向上搜索

视图模式

  • 1、 ctrl + v / shift + v

  • 2、 光标(任意移动光标的命令)选中

  • 3、 命令

    • 批量插入模式 I

    • 批量删除内容 x

  • 4、 esc 退出视图模式(插入模式需要退出)

shell基础

  • 命令补全和文件路径补全tab

  • 快捷键

  • 命令记忆功能

  • 别名功能

  • shell执行命令顺序

  • shell类型

  • shell环境加载文件

  • 字符流处理

  • 变量相关

  • shell符号

快捷键

ctrl+c  终止当前命令或程序
ctrl+d  退出当前shell
ctrl+l  清屏
ctrl+a  命令行光标移到行首
ctrl+e  命令行光标移到行尾
ctrl+u  命令行删除光标到行首的内容
ctrl+k  命令行删除光标到行尾的内容
ctrl+y   粘贴
ctrl+r  命令行搜索
ctrl+  <   光标左移一个单词
ctrl+  >   光标右移一个单词
ctrl+s  锁屏
ctrl+q  解锁

别名功能

自己设置一个命令,执行时其实是执行另一个命令

[root@repo ~]# alias 
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'

shell执行命令顺序

别名--->函数--->内置命令--->外部命令(可执行文件)

shell类型

  • 交互式shell
  • 非交互式shell

shell环境配置文件

/etc/profile           通用的有效环境变量
/etc/profile.d/*.sh    软件包特有的环境变量
~/.bash_profile        用户特有的环境变量
~/.bashrc             用户特有的别名、shell功能和shell选项
/etc/bashrc           通用别名、shell功能和shell选项
~/.bash_logout       用户退出shell执行
~/.bash_history      命令历史记忆功能history

登录式shell

登录式shell加载配置文件顺序

/etc/profile -> /etc/profile.d/*.sh -> ~/.bash_profile -> ~/.bashrc -> /etc/bashrc

非登录式shell

~/.bashrc -> /etc/bashrc

退出shell

~/.bash_logout

shell环境加载文件

source(或.)  文件

字符流处理

输入与输出

  • 标准输入 0 键盘
  • 标准输出 1 显示器
  • 标准错误 2 显示器

输入输出重定向

  • 输入重定向
< (或  0<)   覆盖  
<< (或 0<<)  追加
  • 输出重定向
> (1>)    覆盖
>> (1>>)  追加
  • 错误输出重定向
2>    覆盖
2>>   追加
  • 标准输出与错误输出合并
2>&1    &>

管道(|)

  • | 将前者命令的标准输出交给后者命令的输入
  • |& 将前者命令的错误输出交给后者命令的输入
  • |xargs 前面命令的标准输出传给后面命令,作为后面命令的参数

子shell

  • 子shell的本质是shell的子进程

  • 子进程是由父进程的概念引申而来,在linux系统下,我们所运行的应用程序几乎都是从init(systemd)(pid为1的进程)进程延伸出来的

  • shell子进程是从一个父shell进程调用shell程序而产生的一个全新的shell

  • source(或 .)

  • export

变量相关

变量

  • 存储程序运行过程中的一些中间结果,为了方便以后调用
  • 变量代表一个有名字的,具有特定属性的一个存储单元
  • 它用来存放数据,也就是存放变量的值
  • 在程序运行期间,变量的值是可以改变的

Variables变量 are used to store保存、储存
information信息 to be referenced被以后调用
and manipulated操作或更改 in a computer program程序.
They also并且还 provide提供 a way方式 of labeling标记 data数据 with a descriptive描述性 name,
so our programs can be understood理解 more clearly更清晰 by the reader阅读者 and ourselves我们自己.
It is helpful to think of variables as containers容器 that hold保持、保存 information(如果我们把变量看作成是一个保存信息的容器是更容易理解的).
Their sole主要 purpose目的 is to label标记 and store存储 data in memory内存里. This data数据 can then然后 be used使用它 throughout整个 your program

变量名

  • 由字母、数字、下划线组成
  • 必须以字母或者下划线开头,一般以字母开头
  • 不能是编程语言保留字(关键字)
  • 变量命名要见名知意

变量赋值

变量名=变量值

变量取值

$变量名

环境变量

  • 一般用于定义shell的运行环境,保证shell命令的正确执行

  • shell通过环境变量来确定登录用户名、命令路径、终端类型、登录目录等,可用于所有子进程中

  • 定义它的shell及其子shell可以使用,使用export申明

特殊变量

?  获取执行上一个命令的返回值
$  获取当前执行脚本的进程号
!  获取上一个后台进程号信息
_  获取上一个命令的最后一个参数

shell符号

元字符

/   根目录或者路径分隔符
~   用户家目录
#   注释
.  当前目录 隐藏文件名开头
..  上级目录
$   取变量值
\   转义符号(或 续行符)
!   执行历史记录中的命令(或取反)
&   后台执行命令
()   子shell中执行命令
{}   {a,g,l}  {1..100}  {1..10..2}

引号

符号 含义
'' 单引号 强引用 所有字符都不解析
"" 双引号 弱引用 可以解析 $ ` \ !
`` 命令替换 `命令` ==== $(命令)

命令关系符

符号 含义
; 顺序执行每个命令
&& 前面执行成功, 则执行后者
|| 前面执行失败, 则执行后者

通配符

匹配命令参数

符号 含义
* 匹配任意多个字符
? 匹配任意一个字符
[] 匹配括号中任意一个字符a-z,0-9,A-Z,a-Z
[^] 排除括号中任意一个字符a-z,0-9,A-Z,a-Z

shell模式匹配

shopt 内置命令启用shell选项 (extglob) 则会识别几个扩展模式匹配运算符

  • 查看
shopt |grep extglob
  • 开启
shopt -s extglob
  • 关闭
shopt -u extglob
符号 含义
?(pattern-list) 匹配给定模式零或一次
*(pattern-list) 匹配给定模式零次或多次
+(pattern-list) 匹配给定模式一次或多次
@(pattern-list) 匹配给定模式之一
!(pattern-list) 匹配除了给定的模式

重要命令

find

find [path...] [expression]

  • 默认路径为当前目录;默认表达式为 -print
  • 表达式组成:操作符、选项、测试表达式以及动作

操作符

优先级递减;未做任何指定时默认使用 -and

( EXPR )   ! EXPR   -not EXPR   EXPR1 -a EXPR2   EXPR1 -and EXPR2
EXPR1 -o EXPR2   EXPR1 -or EXPR2   EXPR1 , EXPR2

比较测试

N 可以是 +N 或 -N 或 N

表达式

-type [bcdpflsD]
-name 匹配模式
-iname 匹配模式 
-size N[bcwkMG] 
-atime N
-ctime N 
-mtime N 
-amin N
-cmin N
-mmin N
-uid N
-gid N 
-used N 
-user NAME
-group 名称
-inum N
-perm [-/]MODE
-regex PATTERN
-iregex 匹配模式
-path PATTERN 
-ipath 匹配模式


-anewer FILE  
-empty 
-false 
-fstype 类型 
-ilname 匹配模式
-links N 
-lname 匹配模式 
-cnewer 文件
-newer 文件
-nouser 
-nogroup 
-readable 
-writable 
-executable
-wholename PATTERN 
-true  
-xtype [bcdpfls]
-context 文本

操作

-delete

-print
-print0
-printf 格式

-fprintf 文件 格式 
-fprint0 文件 
-fprint 文件 

-ls 
-fls 文件 

-prune

-exec 命令 ; 
-exec 命令 {} + 

-quit
-ok 命令 ;

echo

选项

-n     不自动换行
-e    支持转义字符

字体颜色

echo -e "\033[30m 黑色字oldboy trainning \033[0m"
echo -e "\033[31m 红色字oldboy trainning \033[0m"
echo -e "\033[32m 绿色字oldboy trainning \033[0m"
echo -e "\033[33m 黄色字oldboy trainning \033[0m"
echo -e "\033[34m 蓝色字oldboy trainning \033[0m"
echo -e "\033[35m 紫色字oldboy trainning \033[0m"
echo -e "\033[36m 天蓝字oldboy trainning \033[0m"
echo -e "\033[37m 白色字oldboy trainning \033[0m"

背景颜色

echo -e "\033[40;37m 黑底白字 welcome to old1boy\033[0m"
echo -e "\033[41;37m 红底白字 welcome to old2boy\033[0m"
echo -e "\033[42;37m 绿底白字 welcome to old3boy\033[0m"
echo -e "\033[43;37m 黄底白字 welcome to old4boy\033[0m"
echo -e "\033[44;37m 蓝底白字 welcome to old5boy\033[0m"
echo -e "\033[45;37m 紫底白字 welcome to old6boy\033[0m"
echo -e "\033[46;37m 天蓝白字 welcome to old7boy\033[0m"
echo -e "\033[47;30m 白底黑字 welcome to old8boy\033[0m"

cat

选项

-n     显示所有行行号
-A    显示所有

输出

cat<<-EOF
	1.[install lamp]
	2.[install lnmp]
	3.[exit]
EOF

输入输出

cat >> /etc/profile <<'EOF'
$PATH
EOF

date

语法

date [OPTION]... [+FORMAT]

选项

选项 说明
-s 设置日期与时间
-d 显示字符串所指的日期与时间 -2day +48Hour +1440Min

格式

符号 含义
%F 年月日
%T 时分秒
%w 星期 周日显示0
%u 星期 周日显示7
%Y
%m
%d
%H
%M
%S

seq

语法

seq [OPTION]... FIRST INCREMENT LAST

选项 说明
-s 指定分隔符(默认\n)
-w 使输出字符串宽度相等
-f FORMAT 指定格式
seq  -s " "  -f "stu%g"  10 15

sort

选项 说明
-r 降序
-o 把排序后的结果输出到文件
-n 以数字排序
-k 指定列 -k 1.2 第一列第二个字符开始到本列最后一个字符
-t 指定分隔符
-h 以人类可读排序
-R 随机排序
-u 去除重复行
-f 忽略大小写

uniq

选项 说明
-c 打印出现的次数
-d 只打印重复行
-D 只打印重复行,并且把所有重复行打印出来
-u 只打印不重复行
-i 忽略大小写
-f N 比较时跳过前N列
-s N 比较时跳过前N个字符
-w N 对每行第N个字符以后内容不做比较

cut

选项 说明
-b 选中第几个字符
-c 选中多少个字符
-d 指定分隔符,默认是空格
-f 指定字段

tr

语法

tr [OPTION]... SET1 [SET2]

默认是将set1中的字符替换为set2中的字符

选项

选项 说明
-c set1的补集
-d 删除set1中字符
-s 把set1中连续重复的字符以单独一个字符表示

wc

-c     打印文件字节数,一个英文字母1字节,一个汉字占2-4字节
-m    打印文件字符数,一个汉字占2个字符
-l    打印文件行数
-L     打印最长行的长度,也可以统计字符串的长度

set

  • 显示shell变量的名称和值
  • 设置shell位置参数的值
  • 设置或取消设置shell选项
    • -x 打开调试模式
    • +x 关闭调试模式

env

bash

选项 说明
-c bash从字符串中读入命令,如果字符串后还有变量就被设定为从$0开始的位置参数
-n 检测脚本是否正确,并不执行脚本
-x 执行脚本,输出执行过程

正则表达式

匹配位置

符号 含义
^ 匹配开头
$ 匹配结尾
^$ 匹配开头结尾 (即空行)
\<...\> 锚定边界

匹配内容

  • . 任意一个字符

  • []

    • [abc] 匹配a或者b或者c任意一个字符
    • [^abc] 匹配非a且非b且非c 任意一个字符
    • [a-z] 匹配a到z中的任意一个字符
  • \ 转义

    • \b 单词边界
    • \w [a-Z0-9]中任意一个字符
    • \W [^a-Z0-9]
    • \s 任意一个空白字符
    • \S 任意一个非空白字符
  • | 或

  • () 分组 (把多个内容看成一个整体)

匹配次数

  • * 重复前面一个字符任意多次(0次或多次)
  • + 重复前面一个字符1次或多次
  • ? 重复前面一个字符0次或1次
  • {}
  • a{n,m} 匹配a这个字符 n到m次
  • a{n,} 匹配a这个字符至少n次
  • a{,m} 匹配a这个字符最多m次
  • a{n} 匹配a这个字符n次

备注

扩展正则表达式

  • ?
  • |
  • ()
  • {}

grep

语法

grep   [OPTION]...    PATTERN   [FILE]...
选项 说明
-o 仅显示匹配的内容
-i 忽略大小写
-n 显示行号
-v 反向选择
-E 扩展的grep
-A 显示匹配字符串及其后n行
-B 显示匹配字符串及其前n行
-C 显示匹配字符串及其前后各n行
-w 匹配单词
-c 包含关键字的有多少行
-m 匹配地几个
-a 在二进制文件中,以文本文件方式搜索
-l 匹配多个文件时,显示匹配的文件名
-r 递归
-P 调用perl正则

perl正则

名字 表达式 含义
(零宽度正预测先行断言 ) (?=subexp) 如果匹配到右边则成功
(零宽度负预测先行断言) (?!subexp) 如果没有匹配到右边则成功
(零宽度正回顾后发断言) (?<=subexp) 如果匹配到左边则成功
(零宽度负回顾后发断言) (?<!subexp) 如果没有匹配到左边则成功
[root@bogon ~]# ip a s eth0 |grep -Po '(?<=inet )([0-9]{1,3}\.?){4}'
10.0.0.130
[root@bogon ~]# ip a s eth0 |grep -Po '([0-9]{1,3}\.?){4}(?=/[0-9]{1,2})'
10.0.0.130

sed

语法

sed [option] '条件{sed-commands...}' [input-file]

选项

-n      取消默认输出,常与sed软件的p命令连用
-r     支持扩展正则表达式,默认只支持基本正则表达式
-i      修改文件内容(修改磁盘上的数据),sed软件默认只修改内存中的数据
-e      每个 -e 选项后可接一个命令
-s     把后面的多个文件看成一个一个的单独文件 ,sed默认会把多个文件看成一个文件
-f      选项后面可以接sed脚本的文件名

sed命令

p     打印模式空间的内容,通常p与选项 -n 一起使用
=     打印行号

a     追加,在指定行后添加一行或多行文本
i      插入,在指定行前添加一行或多行文本

d    删除指定的行

c 取代指定的行

s 替换

  • Ms#▇#▲#Ng

  • 把▇替换为▲

  • ▇能用正则表达式,但▲不能用,必须是具体的

  • Ms 第M行处理,无g标志,只处理第一处,有g标志则处理全部

  • Ng 从第N处开始处理到结尾

  • N 只处理第N处 ( N的取值范围: 1<N<512 )

  • 分组替换

    • \1为第一个记住的模式,即第一个小括号中匹配的内容
    • \2为第二个记住的模式,即第二个小括号中匹配的内容
    • sed最多可以记住9个
    • &代表▇
  • 扩展

    • \u 将下一个字符转为大写
    • \l 将下一个字符转为小写

y

根据对应位置转换字符

w

另存,把模式空间的内容保存到文件中

q

退出sed

!

不执行命令,放在命令前面

;

连接两个命令

N

不清空模式空间,并读取下一行数据并追加到模式空间

标签(本段内容可忽略)

:label

定义一个标签(这里的label是标签名,可自定义)

b label

跳转到该标签执行它后面的命令

t label

如果前面的命令执行成功,那么就跳转到t指定的标签处,继续往下执行后续命令,否则,仍然继续正常的执行流程

T label

如果前面的命令执行失败,那么就跳转到t指定的标签处,继续往下执行后续命令,否则,仍然继续正常的执行流程

地址范围

  • 10{sed-commands} 第10行

  • 10,20{sed-commands} 第10到20行

  • 10,${sed-commands} 第10到最后一行

  • 10,+20{sed-commands} 第10到30(10+20)行

  • 1~2{sed-commands} 第1,3,5,7...行

  • 行号可以换成模式(条件) /pattern/

awk

语法

awk    [option]    'BEGIN{ commands } pattern{ commands } [pattern{ commands }]...END{ commands }'

选项

-F     指定列分隔符
-v  var=val   自定义变量赋值
-P(或--posix)   支持{}
-f   指定awk脚本文件

字段(列)

每条记录都是由多个字段组成的,默认情况下字段之间的分隔符是由空格(或tab)

变量名 含义
$1 第一个字段
$2 第二个字段
$3 第三个字段
$NF 最后一个字段
$0 整行
NF 每行字段数
FS 输入字段分隔符
OFS 输出字段分隔符

记录(行)

默认记录(行)分隔符为换行

变量名 含义
NR ( number of record) 行号,记录的数 awk当前处理着的,记录的数
RS (record separator) 输入记录(行)分隔符
ORS (output record separator) 输出时候的分隔符
FNR 当前文件的读入记录号

正则匹配

/pattern/      整行正则匹配
$3~/pattern/    $3正则匹配
$4!~/pattern/    $4正则不匹配

模式

范围模式

/pattern1/,/pattern2/{command}
/pattern/,NR==xxx{command}
NR==xxx,NR==xxx{command}

逻辑模式

/pattern/  &&  /pattern/    逻辑and,同时满足两个模式
/pattern/  ||  /pattern/     逻辑or,满足其中一个模式
!/pattern/    逻辑not,不满足模式
pattern ? pattern : pattern

BEGIN{}

awk读取文件之前执行

END{}

awk读取完所有文件之后,再执行END模块

网络

OSI网络模型

  • 应用层
    • 应用程序及接口 提供应用程序的接口 ftp telnet http dns pop3等
  • 表示层
    • 对数据进行转换,加密和压缩
  • 会话层
    • 建立、管理和终止会话
  • 传输层
    • 端到端的连接 接收上一层的数据, 分段 重组 连接控制
  • 网络层
    • 控制子网的运行,如逻辑编址, 分组传输, 路由选择 将上层分段的数据进行打包
  • 数据链路层
    • 将分组数据封装成帧;提供节点到节点方式传输 物理寻址,并将原始比特流转变为逻辑传输线路
  • 物理层
    • 机械,电子,定时接口通信信道上的原始比特流传输

tcp/ip网络模型

应用层

  • http
  • ftp
  • dns
  • smtp
  • snmp

传输层

  • tcp

  • udp

网络层

  • ip
  • icmp
  • 各种路由协议

接入层

  • arp
  • rarp

网络模型特点

  • 网络模型每层都有自己的功能集
  • 层与层之间相互独立又相互依靠
  • 上层依赖于下层,下层为上层提供服务

网络传输介质

  • 有线
    • 双绞线(网线)
    • 光纤
    • 同轴电缆
  • 无线
    • wifi
    • 蓝牙
    • 红外

网络设备

网卡

交换机

连接多个计算机组成一个网络,让计算机之间通信

在一个交换机的端口上连接的所有终端设备,均在一个网段上(称为一个广播域)

同一网络

路由器

连接多个网络,让不同的网络通信

数据转发,维护路由表

路由器会作为网关

连接广域网(WAN)

网关: 不同网络通信的逻辑地址

路由: 网络间数据通信的规则

网络检查相关命令

  • ping
  • telnet
  • traceroute
  • tracert

linux网络配置文件

/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0       <- 第一块网卡逻辑设备名;第二块为eth1
TYPE=Ethernet      <- 上网类型,目前基本都是以太网
UUID=sasd-sdasd-wqe-12   <- 通用唯一识别码(Universally Unique Identifier);克隆虚拟主机时,要进行删除(centos6)
HWADDR=00:0c:29:10:2e:28    <- 以太网硬件地址即MAC地址,如果是vmware克隆的虚拟机 克隆虚拟主机时,要进行删除(centos6)
ONBOOT=yes      <- 这个地方要设置为yes,才能保证下次开机启动激活网卡设备
NM_CONTROLLED=no       <- 是否通过NetworkManager管理网卡设备(centos6关闭)
BOOTPROTO=none         <- 启动协议,获取IP地址配置方式,有none|bootp|dhcp三个选项
IPADDR=10.0.0.51         <- 表示本台局域网中服务器的固定IP地址
NETMASK=255.255.255.0          <- 子网掩码,用来规划网络为和主机位的,一般为255.255.255.0
GATEWAY=10.0.0.254        网关地址
DNS1=223.5.5.5         <- 主DNS,这里默认会覆盖以及优先于/etc/resolv.conf的配置生效
DNS2=223.6.6.6         <- 第二个DNS,这里默认会覆盖以及优选于/etc/resolv.conf的配置文件
PEERDNS=yes      <- 是否确认网卡配置文件中的DNS配置优先于/etc/resolv.conf配置文件

ip命令

添加ip

ip addr add 10.0.0.33/24 dev eth0 label eth0:0

开启/关闭网卡

ip link set dev eth0 up/down

添加路由

ip route add 10.15.150.0/24 via 192.168.150.253 dev eth0

永久添加

/etc/sysconfig/network-scripts/route-eth0

10.0.0.0/8 via 10.172.7.247 dev eth0
100.64.0.0/10 via 10.172.7.247 dev eth0
172.16.0.0/12 via 10.172.7.247 dev eth0
192.168.0.0/16 via 10.172.7.247 dev eth0

bond

ifcfg-bond0

NAME=bond0
DEVICE=bond0
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100"

ifcfg-eth0

MASTER=bond0
SLAVE=yes

桥接

桥接网卡 ifcfg-br0

TYPE=Bridge

其它网卡

BRIDGE=br0

ss

选项 含义
-a 所有
-n 数字(不解析名字)
-l 监听
-t tcp
-u udp
-p pid/program
-s 连接统计

nmcli

https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html-single/networking_guide/index#sec-Using_the_NetworkManager_Command_Line_Tool_nmcli

磁盘管理

磁盘体系结构

磁盘分类

  • 机械硬盘
  • 固态硬盘
    • 基于闪存
    • 基于DRAM

机械硬盘

接口类型

  • IDE

  • SCSI

  • SATA

  • SAS

  • FC

固态硬盘

接口类型

  • SATA
    • SATA
    • SATA2
    • SATA3.0
  • PATA
    • IDE44PIN
    • IDE40PIN
  • PCI-E
    • mSATA
    • m.2(ngff)
    • nvme
    • m.2
    • PCIE(IDE)
    • PCIE(SATA)
    • ZIF

机械硬盘相关名词

英文 中文
disk 磁盘
head 磁头
sector 扇区
track 磁道
Cylinder 柱面
Units 单元块(一个柱面的大小)
block 数据块
inode 索引节点

机械磁盘读写原理

  • 读/写一个盘面的一个磁道
  • 切换磁头,读/写下一个盘面的相同半径的磁道
  • 切换磁道读/写

扇区

一个扇区大小 512B

磁盘分区

MBR

MBR本身仅是单个物理扇区(512字节)

  • IPL (initial program loader) 初始化程序加载器 --- 446B
  • 分区表 (partition table) ----- 64B 每个分区表占16B
  • 校验 (保证IPL数据的正确性)

分区格式

  • msdos
  • gpt

msdos分区格式

  • 主分区
  • 扩展分区(特殊的主分区)(只能有一个)
  • 逻辑分区(在扩展分区上再次分区)
  • 主分区最多4个

磁盘及分区名称规则

  • 第一块IDE接口磁盘的第1个分区 /dev/hda1
  • 第一块IDE接口磁盘的第5个分区 /dev/hda5
  • 第二块SCSI接口磁盘的第1个分区 /dev/sdb1
  • 第二块SCSI接口磁盘的第5个分区 /dev/sdb5

分区命令fdisk

[root@oldboy ~]# fdisk /dev/sdc

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition           #删除一个分区
   l   list known partition types    #查看分区类型对应编号列表
   m   print this menu          #打印帮助菜单
   n   add a new partition        #新建一个分区
   o   create a new empty DOS partition table 
   p   print the partition table     #打印分区表
   q   quit without saving changes   #退出程序,不保存
   s   create a new empty Sun disklabel
   t   change a partition's system id       #更改分区类型
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit        #将操作写入分区表并退出程序
   x   extra functionality (experts only)

强制内核重新查找分区表

partprobe /dev/sdc

分区命令parted

传统的fdisk分区不支持2T以上的磁盘分区,而parted分区可以支持,而ext4格式不支持16T以上的磁盘空间分区,必须使用xfs分区

parted /dev/sdb mklabel gpt Yes
parted /dev/sdb mkpart primary 0 10 Ignore
parted /dev/sdb mkpart primary linux-swap 11 21 Ignore
parted /dev/sdb mkpart logical ext4 22 32 Ignore
parted /dev/sdb p
[root@localhost ~]# parted /dev/sdb   # 使用parted来对GPT磁盘操作,进入交互式模式

(parted) mklabel gpt                  # 将MBR磁盘格式化为GPT

(parted) print                                 #打印当前分区

(parted) mkpart primary 0 4.5TB                # 分一个4.5T的主分区

(parted) mkpart primary 4.5TB 12TB            # 分一个7.5T的主分区

(parted) print                                  #打印当前分区

(parted) quit                                   #退出
Information: Don’t forget to update /etc/fstab, if necessary.

磁盘格式化

mkfs

挂载

mount

磁盘相关其它命令

  • dd
  • partprobe
  • dumpe2fs
  • tune2fs
  • fsck
  • e2fsck

RAID

RAID级别 最少磁盘数量 优点 缺点 应用场景
RAID 0 1 读写熟读快 没有任何冗余 mysql slave,集群的节点RS
RAID 1 2 100%冗余 读写性能一般,成本高 数据重要,且不能宕机的业务, 监控、系统盘
RAID 5 3 具备一定性能和冗余,可以坏一块 读性能不错 写入性能不高 一般的业务都可以用
RAID 10 4 读写速度快,100%冗余 成本高 性能和冗余要求都很好的业务。数据库主库和存储的主节点

文件系统

什么是文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统

  • 文件系统是对一个存储设备上的数据和元数据进行组织的一种机制

文件系统类型

/proc/filesystems

/lib/modules/3.10.0-957.el7.x86_64/kernel/fs/

文件存储结构

Linux正统的文件系统(如ext2、ext3)一个文件由目录项(文件名)、inode(元数据) 和 数据组成

  • 目录项: 文件名
  • inode(元数据):又称文件索引节点,是文件属性的存放地和数据块指针存放地。所有与某个文件相关联的额外信息都保存在一个叫做inode的结构中inode包括 文件类型、权限、硬链接数、所有者及所属组、文件大小、时间信息
  • 数据:文件的具体内容存放地

文件系统组成

创建文件系统,磁盘被分成块组( 块组0 块组1 ... 块组n )

块组

超级块

  • 数据块block与inode的总的数量
  • 已经使用的和未使用的inode和block的数量
  • 上次mount的时间,最近写入数据的时间及磁盘检查(fsck)的时间
  • inode的大小
  • block的大小(ext2,ext3为 1k,2k,4k 其中默认/boot为1k,其他分区默认为4k)
  • 有效位,0 载入 , 1 未载入

组描述

记录本块组从何处开始

块位图

使用位示图记录哪些块已用 ,哪些块未用

inode位图

记录inode的使用情况

inode表

各inode组成的区域,每个inode都有一个唯一编号

  • 文件类型
  • 权限
  • 硬链接数
  • 用户和组信息
  • 文件大小
  • 时间信息
  • 块指针

data块

各block组成的区域,用于存放文件数据

ext2文件系统

  • ext2文件系统没有日志功能
  • ext2 目前最多支持 32000 个子目录
  • ext2目前支持最大16TB文件系统和最大2TB文件
  • ext2 默认的inode 大小 128B

ext3文件系统

  • ext3 目前最多支持 32000 个子目录
  • ext3目前支持最大16TB文件系统
  • ext3 默认的inode 大小 128B

ext4文件系统

  • ext4 支持无限数量的子目录
  • ext4最大支持16TB的文件系统
  • ext4默认inode大小为256B

xfs文件系统

  • xfs支持16TB以上的文件系统

  • xfs提供了xfsdump备份, xfsrestore恢复

  • xfs默认inode大小为512B

各系统默认的文件系统

  • Centos7 采用xfs文件系统
  • Centos6采用ext4文件系统
  • Centos5采用ext3文件系统
  • SUSE linux 的默认文件系统 ReiserFS文件系统
  • IBM的AIX使用 jfs日志文件系统
  • Sun OS 所有的文件系统 ufs

swap文件系统

交换分区文件系统,当内存使用

制作swap文件系统

dd if=/dev/zero of=/tmp/swap bs=1M count=128
mkswap /tmp/swap

开启swap

swapon  /tmp/swap
swapon -a

关闭swap

swapoff  /tmp/swap
swapoff -a

查看swap状态

swapon -s

swap相关内核参数

cat /proc/sys/vm/swappiness 
30

tmpfs文件系统

临时文件系统,是一种基于内存的文件系统

制作tmpfs文件系统

mount -t tmpfs -o size=100m tmpfs /mnt/tmpfs

添加导/etc/fstab

tmpfs /mnt/tmpfs tmpfs size=100m 0 0

dd命令

用于复制文件并对原文件的内容进行转换和格式化处理

  • 创建文件
dd if=/dev/zero of=/tmp/swap bs=1M count=128
  • 备份数据
dd if=/dev/sda of=mbr.bin bs=512 count=1

centos7启动过程

    1. UEFi或BIOS初始化,运行POST开机自检
    1. 选择启动设备
    1. 引导装载程序, centos7是grub2
    1. 读取装载程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg
    1. 加载initramfs驱动模块
    1. 加载内核选项
    1. 内核初始化,centos7使用systemd代替init
    1. 执行initrd.target所有单元,包括挂载/etc/fstab
    1. 从initramfs根文件系统切换到磁盘根目录
  • 10.systemd执行默认target配置,配置文件/etc/systemd/system/default.target
  • 11.systemd执行sysinit.target初始化系统及basic.target准备操作系统
  • 12.systemd启动multi-user.target下的本机与服务器服务
  • 13.systemd执行multi-user.target下的/etc/rc.d/rc.local
  • 14.Systemd执行multi-user.target下的getty.target及登录服务
  • systemd执行graphical需要的服务

posted on 2019-11-04 09:30  1226032602  阅读(118)  评论(0编辑  收藏  举报

导航