- Linux学习阶段:
基本操作命令 - 各种配置(网络 存储等) - shell 脚本 - 系统调优 - 深入了解Linux内核
-
学习方法:
先整体后细节 - 要知道怎么查 怎么用 - 先how 再why
计算机是 做中学
Linux是实操性 用指令要非常溜 拿过来就敲
-
学习大纲:
基础篇:Linux入门 - vim和Linux的安装 - Linux目录结构
- Linux应用场景
Linux开发项目(JavaEE、Python、PHP、C等)、运维、嵌入式等
-
Linux应用领域
**服务器:**免费、高效。这是Linux最主要的应用领域
嵌入式:对软件进行裁剪,可对内核进行定制
-
免费、稳定、开源、可高并发的系统
-
主要发行版:ubuntu、Redhat、CentOS、Debain、Fedora、SuSE、CoreOS、OracleLinux等
-
Linux是内核,发行版是内核+程序包等扩展功能形成的封装版
Linux发行版与Windows或Mac OS(操作系统)一样,Linux由多种类型组成,称为分发,每个发行版都很相似,但是不完全一样。一般情况下,Linux发行版是各种应用程序(软件)的集合,从而来适应使用目的,除了在服务器上安装之外,其他还要提前设置,以便可以立即进行实际使用。
Linux发行版主要有:Debian类型、Slackware系列、Red Hat 1.Debian类型: Debian拥有出色的性能,可用于嵌入式设备等众多应用。此外,它已经发展成为一种流行的Linux发行版,名为Ubuntu。 2.Slackware系列: Slackware管理方法比其他线路更复杂,对于初学者来说相对困难。Slackware著名的发行版包括openSUSE,Plamo Linux和Puppy Linux。 3.Red Hat: 目前Red Hat大致分为两类,第一个是红帽企业Linux(RHEL),有些服务是要收费的。另一种是名为Fedora(Fedora)的免费发行版。 4、Centos CentOS是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。
- 1970s 贝尔实验室+Ken Tompson + Dennis = Unix诞生 (多用户分时操作系统)
- 1980s Unix发行版 高端机型才能用 PC用不了
- 著名黑客Richard Stallman发起了GNU计划 倡导开源精神,大家都能阅读源代码,软件公司提供服务和培训。
- Linus贡献了Linux Kernel(可在x86系统上运行),越来越多的人贡献了FTP、editor等功能 => GNU/Linux
-
win10系统,安装之后要 控制面板-程序-打开或关闭windows功能-虚拟机 开启
-
手动配置分区:
Linux磁盘空间分区一般分三个区:Boot分区、Swap分区、根分区
- Boot分区:包含启动文件和内核
- Swap分区:交换分区,系统内存不足时,调用硬盘的一部分,可以理解为虚拟内存。
- 根分区:存放用户文件
-
安装模式
实际生产环境会选择Minimal,不带用户界面的那种
-
KDUMP 生产环境会开启
- 桥接模式:虚拟系统可以与外部进行通信,但用的是主机的网段,容易发生IP冲突(占用同一个网段)
- NAT模式:网络地址转换,虚拟系统可以和外部系统通信,不造成外部冲突
- 主机模式:独立系统,不与外界通信
- 直接复制虚拟机文件
- vmware自带克隆功能
- 就是Save and Load功能
-
详见教程
-
设置与主机的共享文件夹
在CentOS中,共享文件夹位于/mnt/hgfs/下
-
实际生产环境下,上传下载是使用远程方式完成的
- 树状结构 根目录下有各种子目录(规定好的)
- Linux会把硬件
- 资源映射成文件来管理,所以Linux里面一切皆文件,隐藏文件是以 . 开头的
- 具体目录结构:
-
/bin 存放最常使用的指令,单人维护模式下也可以执行的指令。
-
/sbin 存放系统管理员的管理程序
-
/home 用户的家目录。~表示当前用户的家目录
-
/root 系统管理员的用户主目录
-
/lib 动态链接共享库,函数库
-
/etc 系统管理所需要的配置文件和子目录。
-
/opt 安装包 约定俗成 放在这里
-
/usr:Unix System Resource,操作系统软件资源,里面放着/sbin /bin /lib等
-
/boot Linux启动引导
-
/proc 系统内存映射 /srv 服务启动 /sys 【这些都不能动】
-
/dev 类似windows的设备管理器,将硬件映射为文件的形式
-
/mnt 自动识别的设备 U盘 光驱等
-
/mnt 让用户临时挂载别的文件系统
-
/var 存放经常变动的文件 一般可以把日志文件放进去 (/var/log 系统日志)
-
/run centos7之后才有,将经常变动的项目移动到内存中暂存,不占用硬盘容量。放在内存中每次开机都变动。
-
- 系统变量
- 位置查看:echo $PATH
- 作用:当输入一个命令的时候,系统需要寻找这个命令的路径,系统变量就是告诉系统去哪里寻找命令,节省时间
- 将新增系统变量:将目录加入到~/.bash_profile
Filesystem Hierarchy Standard
linux目录结构的标准规范。 定义了根目录以及/usr, /var中的内容以及应该放置的数据。
-
实际生产环境中,Linux服务器是开发小组共享;上线的项目运行在公网
-
Xshell远程登录(只能做一些命令性指令),Xftp文件远程上传下载
-
XShell远程连接的条件:1、知道Linux公网IP 2、能ping通远程服务器
-
ifconfig 查看Linux公网IP地址,windows终端ping一下这个IP试试
-
windows编码是gbk,Linux编码用的是UTF-8
-
Telnet和SSH是用于远程访问服务器的两大协议,telnet是明码传输,ssh是加密传输
-
tty1-tty6
-
linux预设6个terminal可供登录,使用 ctrl+alt+f1-f6 来切换
-
开机之后默认提供一个tty,切换之后才产生新的
-
systemctl status sshd.service
是通过OpenSSH server.daemon来实现的
Linux的文本编辑器
-
三种模式:
- 正常模式(不能输入内容)
- 插入模式:按i进入
- 命令行模式:按/ or : 进入
-
实例:
vim hello.java # 创建新文件或者打开文件 i #进入编辑模式 # 按Esc 再输入:wq即可退出vim # 按:可以进入命令行模式 :wq 保存退出 :q! 强制退出
-
- 正常模式下:yy 复制当前行;5yy复制当前行下面的5行;p 粘贴
- 正常模式下:dd 删除当前行;5dd 删除当前行下面的5行
- 查找单词:正常模式输入/ 进入命令行模式,输入单词,回车,按n切到下一个
- 显示行号:正常模式输入/进入命令行模式,输入set nu,set nonu
- 大文件:正常模式下,移动到首行 小写gg;移动到末尾,大写G,移动到首行
- 撤销:正常模式,输入u
- 快速到某一行:1、可以在正常模式下输入 20 shift+g;2、可以在命令模式下输入:20
- 按电源键,服务器启动,首先会加载BIOS或者UEFI
- BIOS会检测硬件是否准备就绪,例如内存、硬盘、CPU等。
- 硬件检测通过,会选择启动设备,可以是硬盘、光驱、网络服务器。
- 从设备中读取引导文件(grub),读取到之后会提示选择内核版本,操作系统等。
- Linux内核启动,运行用户环境,systemd将成为第一个用户空间的进程。用于管理系统中的进程和服务,并挂载文件系统。
- 在操作系统启动时,也会启动相关的服务或者进程,比如sshd,syslog,或者用户设置的开机启动服务。
- 运行启动脚本,并配置用户环境。
- 然后显示登录界面,提示输入用户名密码。
-
shutdown -h now 立刻关机
-
shutdown -h 1 1min之后关机
-
shutdown -r noe 现在重启
-
reboot 现在重启
-
sync 将内存数据同步到磁盘 关机之前要进行一遍
sync; sync; sync; reboot- shutdown / halt / poweroff这几个命令都是去call systemctl
-
root用户:UID=0,GID=0
-
普通用户:UID>1000
-
系统用户:伪用户,nologin 无法登陆,0<UID<1000,是为系统中某些进程准备的,即nobody用户:
-
nobody在linux中是一个不能登陆的帐号,一些服务进程如Apache,aquid等都采用一些特殊的帐号来运行,比如nobody,news,games等等,这是就可以防止程序本身有安全问题的时候,不会被黑客获得root权限。
1、Windows系统在安装后会自动建立一些用户帐户,在Linux系统中同样有一些用户帐户是在系统安装后就有的,就像Windows系统中的内置帐户一样。
2、它们是用来完成特定任务的,比如nobody和ftp等,我们访问网页程序时,官网的服务器就是让客户以 nobody 身份登录的(相当于Windows系统中的匿名帐户); 我们匿名访问ftp时,会用到用户ftp或nobody。
3、首先,nobody是一个普通用户,非特权用户。 使用nobody用户名的'目的'是,使任何人都可以登录系统,但是其 UID 和 GID 不提供任何特权,即该uid和gid只能访问人人皆可读写的文件。 4、其次,许多系统中都按惯例地默认创建一个nobody,尽量'限制它的权限至最小',当服务器向外服务时,可能会让client以nobody的身份登录。
5、nobody就是一个普通账户,因为默认登录shell是 '/sbin/nologin',所以这个用户是无法直接登录系统的,也就是黑客很难通过漏洞连接到你的服务器来做破坏。此外这个用户的权限也给配置的很低。因此有比较高的安全性。一切都只给最低权限。这就是nobody存在的意义。
-
-
登录
一般不会给你root用户权限,普通用户想要切换成root用户,输入 su - 用户名,切换成root用户(直接 su - 也行
-
注销:logout 在用户级别3时才有效
-
su 命令 申请切换root用户,需要输入root用户密码;sudo su 是临时申请root权限,所输入的是用户密码。
-
每个用户的登陆环境在家目录中有 ~/.bash.profile 和
/.bashrc两个配置文件,通常个人bash环境设置都定义在/.bashrc中 -
对所有用户生效的配置文件:/etc/bash.profile 和 /etc/bash.rc
useradd 用户名
1、创建用户成功后,自动创建该用户的家目录,位于/home/用户名
2、通过 useradd -d 指定目录 用户名 :可以给新创建的用户制定家目录
passwd 用户名 密码 (注意加上用户名,否则是给当前用户改密码)
userdel 用户名 (保留了家目录)一般建议保留家目录
userdel -r 用户名 (删除家目录)
id 用户名
-
su - 用户名 (带 - 是切换用户的同时切换环境变量)
-
su 直接切换,不是登录shell,该用户的环境变量没有被切换。
-
命令行#代表root用户 $代表普通用户
-
root用户切其他用户是不需要输入密码的,即使该user没设置密码。
who am i 显示的是第一次登录到的用户信息
(给组设置具体权限,把用户拉进来)
groupadd 组名
groupdel 删除组
(如果新建用户时没有指定的组,系统会自动建一个用户名同名的组,放进去)
groupadd -g 用户组 用户名:新建用户同时放到一个组里
groupmod -g 用户组 用户名 :更改用户组
usermod -aG 组名 用户名
chgrp 组名 文件名
/etc/passwd 用户配置文件,记录用户的各种信息
(查询已有用户:cat /etc/passwd)
/etc/shadow 口令的配置文件 ,记录密码,登录信息啥的
/etc/group 组的配置文件
shell:类似解释器的进程,把命令转换为Linux内核可以识别的命令,中国一般用bash shell
Azure 用的是 Bourne Again shell (Bash)
- 0 关机
- 1 单用户【找回丢失密码】(单人维护模式仅挂载根目录)
- 2 多用户状态没有网络
- 3 多用户状态 有网络服务 【使用最多】
- 4 保留给用户
- 5 图形界面 【也常用】
- 6 系统重启
centOS 7 以后,运行级别3 等同于 multi-user.target;运行级别5 等同于 graphical.target
查看默认的运行级别:systemctl get-default
设置默认的运行级别:systemctl set-default multiuser.target
-
找回root密码
开机界面进入单用户模式
curl cheat.sh/tree #可以查看命令的常用方法
- ctrl + a 光标移动到最前面;ctrl+e 光标移动到最后面
是link数;每个文件都会将权限和属性记录到文件系统的i-node中;每个文件名也会连接到一个inode。
第二列的数字就是该文件的硬连接数,相当于该文件有多少个别名。
-
pwd (print working directory)
-
cd:
cd ~ 回到家目录(root回到/root,普通用户回到家目录)
cd .. 回到上一级目录(cd ../.. 可以连着用)
. 或者 ./ 代表当前目录;.. 或者 ../s 代表上一级目录
-
mkdir 创建目录
-
mkdir /home/animal
-
mkdir -p 创建多级目录
mkdir -p /home/animal/tiger
-
-
rmdir 删除目录
-
默认删除空目录,里面有内容不生效
-
里面有东西可以用这个恐怖指令:
rm -rf 目录路径
这里推荐用 mv指令 移动到 /delete 文件夹 定期清理
-
-
touch 创建空文件
当这个文件已经存在时,可以将其时间标签更新为系统当前时间
-
cp 文件复制
- 单个文件:cp 文件名 目录
cp hello.py /opt/
-
复制整个目录: cp -r 源目录 目标目录
cp -r /home/bbb /opt # 直接复制过去 若有同名文件 会一个一个提示是否覆盖 \cp -r /home/bbb /opt # 不提示 直接覆盖 (cp -rf也可以)- cp -p 旧文件 新文件:将修改时间和访问权限也复制到新文件
-
cut 文件提取
-
sort 能把文件里面的行排好序显示出来,不改变原始内容
-
awk 命令行编程工具 不需要编译 可以用变量 字符、数字函数等。
awk '{print $1,$2}' # 输出前两行 awk '/Enlish {print}'
-
sed 文本替换
sed -i 's/[old text]/[new text]/g' xxx.txt -
rm 删除文件或者目录
-r 递归删除
-f 强制删除不提示
有三个主要的变动时间:
- mtime:修改时间,更改文件内容
- ctime:status time,修改文件状态会更新这个时间,例如改文件属性
- atime:access time,文件内容被读取就会更新
其中,ls -ll 默认显示mtime;想要看其他的time,要加参数,例如
ls -ll --time=atime /var/log/messagestouch可以修改mtime和atime
- cmp 一个字母一个字母的比较
- comm 比较两个sorted的文件
- diff 按行比较
mv 旧文件名 新文件名
mv 源目录 新目录
mv 源文件 新目录/新名字 (移动并且重命名)
更加安全 只能看不能改
- cat -n 显示行号
- 一般会带上管道命令 | more (管道命令是将前面的结果交给后面处理)
head 默认查看前10行
head -n 5 看前5行
-
tail -f 可以实时监控文件末尾改变
tail -f /opt/mylog.txt tail -fn 10 test.log #循环实时查看最后10行记录(最常用的)实时监控 按ctrl + C 中断指令
tail -f 只能监控echo写入的内容,vim写入的不行。因为tail -f 是基于文件的inode监控,而vim会改变文件的inode
(Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。)
按回车一行一行看,空格一页一页看
分屏查看 支持各种终端 动态加载 适合查看大文件 效率高
-
echo [选项] 输出内容
echo $HOSTNAME
echo "Hello World"
写shell脚本的时候相当于printf
-
echo "xxx" > xxx.txt 新建文件的方法2
> 是覆写 >> 是追加
-
echo “Hello World” > /home/mylog.txt
-
ls -l > 文件 (将ls -l显示出来的列表内容写入到文件)文件不存在的话,自动创建
ls -al >> 文件 (将列表内容追加到文件末尾)
cat 文件1 > 文件2 (将文件1的内容覆写到文件2)
-
cal >> /home/mycal 可以把日历信息输出到文件中
-
cat 文件1 文件2 > 文件3 把两个文件的信息合并到一起
-
cat 文件1 > 文件2 快捷复制文件 速度非常快
-
ln -s 软链接/符号链接
-
类似快捷方式,不占用磁盘空间
-
基本语法: ln -s [源文件或目录] [软连接名]
-
注意:如果软链接的目的路径和源文件路径不同的话,都需要使用绝对路径才能成功创建
-
软链接的文件Inode是不同的
-
-
ln 硬链接
- 基本语法: ln [源文件或目录] [软连接名]
- 硬链接只能链接文件,不能链接目录
- 链接与源文件的inode相同,代表这是同一个文件
- 把源文件移走或重命名,都不影响内容或者权限的同步改变
- 删掉原文件之后,硬链接文件仍然保持着原内容
-
改变内容:
- 对于软硬链接而言,改变链接文件的内容,源文件会都同步改变
-
改变权限:
- 改变软链接文件的权限,软链接的权限并不会改变,源文件的权限会改变
- 改变硬连接和原文件的权限一旦改变,另一个文件随之也改变
-
文件系统:
- 软链接可以跨越文件系统;硬链接不能
inode 代表文件的数据结构
dentry 代表目录的数据结构
inode和dentry一起构成了cache,磁盘上的文件系统
history 所有的;history 10 看最近10个;
history !5 执行 history列表中行号为5的指令
Ext3
Ext4
XFS :large data files
-
date 显示当前时间
-
date "+%Y-%m-%d %H:%M:%S"按占位符规定的格式显示日期
-
date -s [新时间] 设置系统时间
-
cal 显示日历
从当前目录向下递归遍历各个子目录,将查到的显示在终端
-
基本语法:find [搜索范围] [选项]
-
find -name / -user / -size (+n 大于;-n 小于;n等于;单位 k M G )
-
find /目录 -iname xxx.txt (-i 忽略大小写)
-
find /目录 -f -name xxx.txt (加上-f是查找文件)
-
find /目录 -d -name xxx.txt (加上-f是查找目录)
-
不加 -f-d都查找
-
- find有时候会比较慢,whereis会比较快。但是whereis只是去找特定的几个目录
- 利用事先建立的查找数据库,快速定位文件;保证精确度,定时更新索引数据库(大概是系统每天自动更新一次数据库)
- 先 updatedb
- 再 locate xxx.txt
-
是找 PATH环境变量下面目录的指令
-
查看某个指令在哪个目录下:which ls
- 过滤查找,常常与管道符结合使用
- 基本语法:grep [选项] 查找内容 源文件
- 例如:cat /opt/mylog | grep -n "Hello"
- -n:显示行号;-i:忽略大小写
- gzip 压缩文件,只能压缩为.gz;gunzip 解压缩,只能解压.gz
- 压缩完,源文件就没了
- 语法 gzip *
压缩/解压,项目打包发布有用
- zip/unzip [选项] [文件名].zip [文件或者目录名]
- zip -r :递归压缩,压缩整个目录(该文件夹内必须有子文件夹,才能-r递归压缩成功)
- unzip -d [指定目录] [待解压文件]:解压后放到指定目录
-
既能压缩,又能解压;压缩成.tar.gz文件(.tar是打包文件,没压缩;.tar.gz是压缩文件)
-
基本语法:tar [选项] xxx.tar.gz 打包的内容
-
-c 产生.tar打包文件;-v 显示详细信息;-f 指定压缩后的文件名;-z 用gzip格式对文档进行压缩或解压;-x 解包.tar文件
-
文件名后缀有.gz,得加上-z解压缩
# 压缩文件夹 tar -zcvf /opt/my.tar.gz /opt/mytest/ # 压缩俩文件 tar -zcvf /opt/my.tar.gz /opt/my1.txt /opt/my2.txt # 解压到指定目录 -C 后面加上指定目录 tar -zxvf /opt/my.tar.gz -C /opt/tmp
- 每一个用户都必须属于一个组,可以属于多个组
- 每个文件而言,有:所有者、所在组、其他组 三个概念,每种组,都有一定的权限可以设置。每个文件只能由一个组
-
查看所有者
ls -ahl / ls -ll 一样
-
修改所有者 得有root权限
chown 所有者:所有组 /文件、目录
-
创建组,把人放进去
groupadd [组名]
useradd -g [组名] [用户名]
-
文件的创作者就是所有者,所有者所在组就是文件的所在组
-
chgrp 更改文件所在组;usermod -g 新组名 用户名(改变用户所在组);usermod -d 目录名 用户名 该用户登录的初始目录;(该用户得有该目录的进入权限)
-
小技巧:查找有没有某个组
cat /etc/group | grep root
- Linux中,任何一个文件都具有User、Group、Others三种身份的权限;即:所有者、所在组、其他组。
- User信息记录在:/etc/passwd里面;个人密码记录在/etc/shadow里面;群组信息记录在/etc/group里面。
- 命令:
- chgrp:改变群组
- chown:改变所有者
- chmod:改变权限
0-9 总共10位:- rwx rw- r--
-
第0位:文件类型
-
— 普通文件,l 链接,d 目录,c 字符设备文件(鼠标键盘等) ,b 块设备(硬盘),p管道文件,s socket文件
-
查看文件状态 stat
-
-
1-3位:所有者权限 rwx
r 可读 w可写 x可执行 ,某一位是 - 代表无此权限
-
4-6位:所在组权限(与文件所有者同一组的用户权限)
-
7-9位:其他组权限
-
对文件:
r:可以读取、查看(读取一个文件的话,如果知道该文件路径,则需要对目录具有x权限,对文件具有r权限才能读取该文件。不必对目录具有r权限,因为已经提前知道文件路径了,不用列出目录下的文件。)
w:可以修改,不代表可以删除。可删除的前提是,用户对该文件所在目录有w的权限
x:可以执行(Windows下的可执行与Linux下不同,windows是由扩展名来决定;linux是由x权限位来表示)
-
对目录:
r:可以ls查看文件列表
w:可以修改,可创建/删除/重命名目录
x:可以进入该目录。如果要开放目录给别人浏览的时候,至少要给到r和x。
-
可用数字表示
r = 4;w = 2;x = 1;rwx = 7
-
chmod -v 显示权限变更的过程
-
方式1:+ - = / u g o a
u:所有者;g:所有组;o:其他人;a:所有人(对三种角色同时做操作)
chmod u=rwx,g=rx,o=x log.txt chmod o+w log.txt chmod a-x log.txt
-
方式2:r=4 w=2 x=1
# 将log.txt文件的权限更改为rwxr-xr-x chmod 755 log.txt注意这九位数是默认u g o 的顺序
可以用umask查看:例如,0022,第一位是特殊标志位,后3位是权限位。
规则如下:
- 默认规定,新文件要拿掉x权限,即默认最大给到:-rw-rw-rw-;默认规定,新目录不拿掉任何权限,即默认给到:drwxrwxrwx
- umask的0022规定了在以上基础上继续拿掉哪些权限。022表示:user不被拿掉任何权限;group和others拿掉2(w)
- 默认权限基础上减掉被umask拿掉的权限就是新创建文件和目录的默认权限:
- 文件:-rw-r--r--
- 目录:drwxr-xr-x
- SUID
- **只对有x权限的文件有效。**如果一个程序的所有者是root并且具有SUID属性;那么普通用户执行,如同是root在执行。
- -rwsr-xr-x;置于u的x位置,s 表示SUID位被设置。也可以用 4755 表示
- 比如/etc/passwd: ----------(即passwd只有root用户可以读写); 但是修改密码的命令:/usr/bin/passwd: -rwsr-xr-x,那么普通用户在用passwd改自己的密码时可以跟root一样获得权限去写入passwd文件。
- SGID
- 对目录设置后,该目录中【新建的文件】的所在组 都是该目录的所在组
- drwxrwsr-x; 置于g的x位置,也可以用 2775 表示
- sticky
- 针对目录而言,如果设置了粘滞位,在该目录下的文件,只能是root和创建者可以删改,某个普通用户不能删除/改名/移动别人的文件。
- drwxrwxrwt;置于o的x位置 1777
科隆表达式,科隆是古代掌握时间的神
-
定时调用脚本or指令
-
crontab
-
设置任务调度文件:/etc/crontab
-
设置个人任务到调度文件:
先输入 crontab -e
再输入任务:
*/1 * * * * ls -l etc/ > /tmp/to.txt (每小时的每分钟执行)
-
-
可以用工具生成?
-
实例:每隔一分钟,将当前日历和时间追加到mycal.txt中。
-
思路:写一个脚本,里面包含两条指令,然后在crontab中添加定时任务执行脚本
-
写脚本:
vim my.sh
写入:
date >> /opt/mycal.txt cal >> /opt/mycal.txt
-
给my.sh 添加执行权限:
chmod 744 /opt/my.sh
-
添加定时任务:
crontab -e
写入:
*/1 * * * * /opt/my.sh
-
-
-
实例:每天凌晨两点,将数据库testdb备份到文件中
crontab -e 0 2 * * * mysqldump -u -proot testdb > /home/test.bak
-
at是一次性定时计划任务,at的守护进程atd以后台模式运行,检查作业队列来运行。
ps -ef | grep atd (检测atd进程有没有在运行)
atd守护进程每60 s检查一次作业队列,匹配则运行此作业
-
at [选项] [时间] 然后输入指令 然后ctrl+d 两次
-
arq 查看任务
-
atrm [任务序号]: 删除任务
-
扇区sector:最小的物理储存单位。目前有512bytes和4k两种格式。
-
将扇区围成一个圆,叫磁柱。
- 主引导记录,硬盘第一个扇区放着512字节的主要启动记录和分区表。
- 特点:最大支持2T硬盘,最多支持4个主分区;更多分区可以用扩展分区和逻辑分区来实现。
-
与MBR仅使用第一个512byte来记录不同,GPT使用了34个LBA区块来记录分区信息。
-
解决了主要分区的数量限制。
-
并不是所有操作系统都可以读取GPT分区,与开机检测程序有关。
-
分区与文件系统的关系
-
挂载:把某个目录分配磁盘的空间,将文件系统与目录树结合;挂载点一定是目录,该目录是进入该文件系统的入口。
-
Linux分区
- 一般采用SCSI硬盘,标识为 sda1、sda2、sdb1、sdb2等等
-
查看挂载情况:lsblk / lsblk -f
**即基本输入输出系统,是服务器启动后最先运行的软件。它包括基本输入输出控制程序、上电自检程序、系统启动自举程序、系统设置信息。**BIOS是服务器硬件和OS之间的抽象层,用来设置硬件,为OS运行做准备。**BIOS设置程序是储存在BIOS芯片中的。BIOS的进化版本是UEFI(Unified Extensible FirmwareInterface),即统一的可扩展固定接口。**这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上,从而使开机程序化繁为简,节省时间。
写入到主板上的程序,是开机的时候计算机运行的第一个程序。
- 上电后,BIOS会确认硬件是否正常运行,随后去找能够开机的硬盘,并且去读取MBR
- 没问题的话就启动开机引导程序。
- 引导程序的作用是把硬盘中的OS加载到内存中运行。(OS负责启动应用程序,但是OS没有办法自己启动自己,需要引导程序来启动。)
- 开机管理程序除了可以除了可以安装到MBR之外,还可以安装到分区槽的启动扇区(boot loader)中。实现多重引导。
BIOS无法读取GPT格式;UEFI出现,为了代替BIOS。省去了开机自检,开机速度较快。
通常磁盘分区格式会与开机检测程序一起提到:
- legacy方式:MBR+BIOS方式
- UEFI+GPT方式
-
步骤1:虚拟机设置中增加一块磁盘
-
步骤2:分区命令 fdisk /dev/sdb
输入 m 看说明;输入n分区;输入 p (primary);输入分区数量;回车 回车 回车 全部默认
再输入w 保存退出;(不想保存,输入q)
-
步骤3:格式化sdb1(指定文件格式)
mkfs -t ext4 /dev/sdb1 # ext4 mkfs.xfs /dev/sdb1 # xfs
-
步骤4 挂载到指定目录 mount /dev/sdb1 /...
注意:
0.并不是所有目录都可以作为挂载点,挂载操作会使得原有目录隐藏,因此根目录以及系统原有目录不能作为挂载点
1.挂载点一定是已经建立的空目录。(也可以不为空,但是挂载之后,已有的内容将不可用)
2.用命令行挂载,是临时的,重启之后,会失效。
3.MBR分区用fdisk分区;GPT用gdisk分区
-
步骤5:永久挂载
修改/etc/fstab
输入mount -a 即刻生效
-
fstab 文件
每行数据分了六个字段
- 分区设备文件名或者UUID
- 挂载点
- 文件系统的类型
- 挂载参数 defaults等(auto/noauto代表是否会被mount -a主动测试挂载)
- 分区是否被dump备份 (0是不备份 1 代表备份 2 不定期备份)
- 分区是否被fsck检测 (0 不检测 1 高优先级 2 稍低的优先级) (先检测1优先级)
-
fstab的挂载记录是写入到/etc/mtab 和 /proc/mounts中。
-
-
重新挂载remount
mount -o remount,rw,auto /
当进入单人维护模式时,根目录通常被重新挂载为只读,用这个命令重新挂载为rw
-
挂载image等大文件:mount -o loop
-
df -h :查询文件系统占用情况,要是读取superblock信息,会非常快。
-
du:查询某个目录的磁盘占用
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件 (不写-a,列出来的仅仅是子目录;写上-a才是连文件带目录都列出来)
--max-depth = 1 子目录深度
-c 列出明细,增加汇总值
-
实例:
#查询/opt占用情况,深度为1 du -hac --max-depth=1 /opt #按照目录占用空间大小排序本层目录里面的子目录 du -sh * | sort -hr
-
df (disk free)和 du (disk usage)的区别
-
不同点:
-
统计范围不同
df统计磁盘总体使用情况;du既能统计总体使用情况,也能统计某个文件夹和文件大小
-
计算方式不同
df通过文件系统快速获取;du通过逐级进入目录来统计,相对较慢,如果没有文件夹访问权限也无法读取。
-
计算结果差异
df可以获取已删除的文件,由于df是通过文件系统获取空间大小,当删除一个文件之后,他不是立即消失的,而是确认没有进程使用它才完全删除。
而du只能看到当前存在的未删除的文件。
-
-
-
blkid
查看文件系统和和装置的UUID
-
parted
列出磁盘的分区表类型和分区信息
parted /dev/vda1 print
-
partprobe
更新核心分区表
-
统计/opt文件夹下的目录个数
ls -l | grep "^-" | wc -l # 列出了目录内容容,用正则表达式筛选 - 开头的,-开头的就是文件,再用wc -l 列出文件个数
-
统计/opt文件夹下目录的个数
ls -l | grep "^d" | wc -l
-
统计/opt 文件夹下的所有文件个数,包括子文件夹下的
ls -lR | grep "^-" | wc -l
-
统计/opt 文件夹下的所有目录个数,包括子文件夹下的
ls -lR | grep "^d" | wc -l
ls的递归列出文件 -R
-
树形结构展示目录
yum install tree tree /home/
-
What
- Logical Volume Manager 逻辑卷管理,Linux中对磁盘分区进行管理的机制
-
Why
- 直接用fdisk挂载的话,当硬盘空间满了的话,必须挂载新硬盘,做数据迁移,导致业务暂停,不符合企业需求。
- LVM可以自由调整文件系统大小,实现文件系统跨越不同磁盘和分区。封装底层物理硬盘,以逻辑卷的形式表现给上层系统,逻辑卷可以调整
-
About
- 物理卷 physical volume:硬盘分区或者与分区具有相同功能的设备(如RAID)。PV是LVM的基本存储逻辑块,包含LVM的管理参数
- 卷组 volume group:由物理卷组成,可在卷组中创建一个或多个LVM(逻辑卷)分区
- 逻辑卷 logical volume:类似硬盘分区,可以格式化后挂载使用。
- PE physical extent:物理卷划分为PE单元,是可被LVM寻址的最小单元,默认4MB
-
summary
一款硬盘,被格式化为物理卷(PV),其内部分为若干PE,在PV基础上创建了卷组(VG),可以把若干PV加入VG;VG相当于空间池,基于VG创建逻辑卷(LV),将LV格式化,再挂载。扩充LV的过程就是增减PE的数量,不会影响数据
- Redundant Arrays of Independent Disks. 利用许多独立的便宜磁盘,组成容量巨大的磁盘组,利用个别磁盘提供数据所产生的加成效果提升整个磁盘系统的效能
- 最大优点:提高数据传输速率,在多个磁盘上同时存储数据
- RAID0:数据并行写入每个磁盘,并行读取;但是没有冗余,一个盘坏掉,数据全部丢失。不适用于安全性要求高的场景
- 注意:别把空间不同的磁盘RAID,否则性能将会被限制在最小容量的那个盘
-
磁盘没有mount的时候运行fsck
umount /dev/sdc1 fcsk -y /dev/sdc1 # -y可以自动修复错误 xfs_repair /dev/sdc1 # xfs文件系统用这个
- 是系统引导过程中挂载的一个临时根文件系统,用来支持两阶段的引导过程,initrd中包含了各种可执行程序和驱动,可以挂载实际的根文件系统,然后再将initrd磁盘卸载,释放内存。
-
UEFI or BIOS?
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
-
版本?
dmesg | grep -i "EFI" # "BIOS"
-
Check if secure boot?
mokutil -sb-state
inode、block、superblock
- inode:存放文件属性信息,一个文件占用一个inode;同时也记录该文件数据所在的block号码
- block:记录文件的数实际内容。
- superblock:记录此文件系统的整体信息,包括inode的使用量、使用总量等。
举例:假设一个文件的inode记录了文件数据的实际放置点为2 3 5 7,那么操作系统就可以据此排列磁盘的阅读顺序,一口气将多个block的内容都读取出来。这种数据存取的方法称为索引式文件系统。
与之对比的是FAT文件系统,没有inode存在,每个block记录了下一个block位置,像链表一样一个一个顺序来读。【碎片整理】说的就是FAT文件系统里面的bolck太过分散,通过碎片整理来将同一个文件的block汇总到一起。提升读写速度。
- 文件大于block大小,会占用多个block;文件小于单个block大小,还是会占用单个block。
- block过大,存小文件会造成空间浪费;block过小,存大文件会造成block太多,读写缓慢。根据实际情况合理选择。
- 格式化的时候会分为多个block groups,每个组都有super block
- 每个inode大小固定(128 bytes for ext2;256 bytes for ext4 and xfs)。
- 文件系统能够创建的文件数量与inode数量有关。
dumpe2fs /dev/sda1
- 目录也会被分配一个inode,存储目录的权限和属性,以及分配的block的号码;block则记录目录下的文件名以及每个文件的inode号码。
- 文件太多,一个block放不下的话,多个block来放。
- 注意:由于文件名是存储在block里面的,所以涉及到文件名修改的操作,需要目录的w权限。
- bitmap记录了文件系统中可用的inode和block信息
- inode bitmap,block bitmap和superblock称为metadata
如果在写入文件过程中,发生意外系统中断,造成inode、block与bitmap数据不一致。如果要检查就得整个文件系统检查。
在文件系统中规划出了一个区块,记录写入和修订文件的步骤:
- 预备:会在日志记录区中记录准备写入的信息
- 实际写入:开始写入文件的权限和数据,更新metadata的数据
- 完成数据和metadata更新后,记录为完成。
一致性出问题只需根据日志针对性的去找,快速恢复。
CPU只能读取内存中的数据,如果文件比较大,需要频繁写入磁盘、读到内存;会效率低下。
Linux采用异步(async)来处理:
- 系统加载到内存,如果文件被更改过;该内存区段的文件会被标记为dirty;没改过就是clean;磁盘会不定时将dirty的文件写回磁盘,保持内存磁盘的一致性。
- 可以手动采用sync来将dirty数据写回到磁盘;正常关机之后会调用sync;但是非正常关机之后,数据未写入磁盘,再次启动可能会导致文件系统损坏。
更新的速度更快的文件系统,比如xfs、reiserfs等。CentOS7开始,预设的文件系统已经开始默认为xfs了。
# 查看Linux支持的文件系统有哪些。(这个路径下是支持的文件系统的驱动程序)
ls -l /lib/$(uname -r)/kernel/fsext文件系统是预先规划出所有的inode/block/superblock,不再需要进行动态配置;在磁盘容量巨大之后,格式化的时候会特别慢。而xfs文件系统就被用于高容量磁盘和高性能文件系统而用。
-
资料区
存放superblock、inode分配与追踪;inode和block都是系统需要的时候才动态配置产生。
-
文件系统活动登陆区
记录文件系统的变化;异常中断后,系统会拿这个区块进行一致性检验修复,有点像日志区。
-
实时运作区
有文件要建立的时候,xfs会将文件暂时放置在里面,inode分配完毕之后再写到data section中。
xfs_infoxfs_admin 和 tune2fs
-
Windows Azure Agent 控制了资源盘和交换区
-
resource disk
- temporary storage (located in /dev/sdb1)in VM
- 重启不友好,灾难恢复后VM重新分配
-
waagent 日志路径
/var/log/waagent.log
-
交换区
- 作用:当物理内存不够用的时候,释放一部分内存;被释放掉的进程可以先保存在交换区内;等到有空间时再加载回去
- 启用交换区
vim /etc/waagent.conf # waagent means Windows Azure Agent- 修改参数:
ResourceDisk.Format=y
ResourceDisk.EnableSwap=y
ResourceDisk.SwapSizeMB=4096
- 云端部署时,设置默认配置
- waagent是Azure专属;cloud-init是通用;后者可以覆盖前者
- 部署之后的一些扩展功能
- 可通过CLI Powershell Azure Resource Manager启动
- 查看extensions路径:/var/log/azure/*
- windows查看VMnet8网络配置 (ipconfig)
- Linux查看网络配置 ifconfig (interface configuring)
- 自动获取:自己用可以,但服务器不适用
- 指定IP:详见老韩图解
- hostname 查看主机名
- hosts文件是主机名和IP地址的映射
- windows:C:\Windows\System32\drivers\etc\hosts 中指定主机和IP映射即可
- Linux:/etc/hosts 指定主机名和IP的映射,在不适用DNS服务器的情况下
- 路径:/etc/network/network-scripts/ifcfg-eth0(device名)
- dig @8.8.8.8 Microsoft.com
- A 地址记录,用来指定域名的 IPv4 地址,如果需要将域名指向一个 IP 地址,就需要添加 A 记录。
- nslookup microsoft.com
- getent hosts microsoft.com
- 本地DNS解析:/etc/hosts
- DNS优先级定义:/etc/nsswitch.conf
- /etc/nsswitch.conf 这个文件定义了DNS解析的优先级过程,默认下,先从本地寻找(/etc/hosts),如果找不到,再从**/etc/resolv.conf**中定义的DNS服务器中寻找
- nslookup和dig直接从**/etc/resolv.conf中定义的nameserver寻找,并不会查找本地/etc/hosts;然而getent会按照/etc/nsswitch.conf** 定义的顺序来查找(默认时就会先查找/etc/hosts)
netstat -an | grep 80 | grep LISTEN- 使用netcat telnet curl 连接指定端口 (http80 https 443)
- netcat 亦可检查UDP连接;telnet只能检查TCP连接
-
Information on how packets are forwarded
-
Assist customers to add static route
-
check routing table
netstat -r route -n
-
Add route
route add -net 10.0.2.0 netmask 255.255.255.0 dev eth0 route add -net 127.0.0.0 netmask 255.0.0.0 lo # add loopback interface route add default gw 192.168.10.1 # add default gateway
-
a set of rules to decide what to do
-
Rules are organized into groups called chains
INPUT: This chain handles packets that are addressed to your server
OUTPUT: This chain handles packets that are created by your server
FORWARD: Configure your server to route requests to other machines
-
Chians contain 0 or more policies including ACCEPT/DROP/REJECT
-
how to check
iptables -S iptables -L
-
Net connectivity problem - network captures from source to destination to analyze
-
tcpdump : most commonly used tool to capture or filter packets
-
eg
tcpdump -w /tmp/traces.pcap -i eth0 # capture traces in device eth0 and save it ^C ls -l /tmp/traces.pcap
Azure Linux Academy - Foundation P.104
-
Zones utilized for trust for network connections: block, drop, public, external, dmz, internal, trusted, work, home.
-
firewalld
firewalld-cmd --state # check status firewalld-cmd --list-all # list configuration firewalld-cmd --get-zones # list zones firewalld-cmd --get-active-zones # list active zones firewalld-cmd --list-services # list allowed services firewalld-cmd --list-ports # list allowed ports firewall-cmd --add-service=<service name> --zone=<zone name> --pernament # allow a service firewall-cmd --add-port=<port number/protocol> --zone=<zone name> --permanent # allow a port firewall-cmd --remove-service=<service name> --zone=<zone name> --permanent firewall-cmd --remove-port=<portnumber/protocol> --zone=<zone name> --permanent firewall-cmd --reload
- An architecture for Linux that defines access to apps, processes, files by security policies.
- Configuration file: /etc/sysconfig/selinux (symlink to /etc/selinux/config)
- SElinux modes: enforcing (policies are enforced), permissive (logs warnings/violations), disabled
- SElinux policies: Targeted, miminum, MLS
- How it works:
- all files, processes, ports have a label and are logically grouped
- Access Vector Cache (avc) caches permissions and is checked shen a request is made.
- If permission is denied, an "avc:denied" massage appears in /var/log/messages and /var/log/audit/audit.log
sestatus
getenforce # check status of selinux
setenforce 0 # temporarily enable permissive
setenforce 1 # temporarily enable enforcing
-
Trouble shooting
grep -i denied | /var/log/audit/* # 找到日志里面带denied的信息
- 执行中的程序都是一个进程,每一个进程分配一个PID。程序是静态的,程序run起来,加载到内存中,就是一个进程。
- 每个进程可能以两种方式存在,前台 or 后台 , 一般而言,系统服务以后台形式常驻
-
ps
-
字段 PID、TTY(终端机号)、TIME(消耗CPU时间)、CMD(进程名)
-
-a 显示所有进程;-u 以用户格式显示进程;-x 显示运行参数
-
常用:
ps -aux | more ps -aux | grep ... ps -ef # 与-aux一样,只是显示的格式不同
VSZ:进程占用虚拟内存大小
RSS:进程占用的物理内存大小
TT:终端名称
STAT:进程状态
-
-
查看父进程,可以用ps -ef | more
ps -ef 能显示出父进程号(PPID)
-
pgrep -l 进程名 (查找指定名称的进程)
-
kill [选项] 进程号
-
killall 进程名 (子进程同时被杀掉)
-
常用选项 -9 强迫终止
-
案例:
1、踢掉非法登录用户
ps -ef | grep sshd # sshd 远程连接服务 先查看sshd的进程号 kill 114212、暂停远程登录功能
ps -ef | grep sshd # 找到名称为/usr/sbin/sshd -D的进程号 kill xxxxx # 恢复远程登录 /bin/systemctl start sshd.service
3、终止多个gedit
killall gedit # 这是一种编辑器可以用于系统负载过大变卡
4、强制杀掉终端
kill -9 11405
- pstree -p (带进程号)
- pstree -u (带用户名)
-
服务是运行在后台的进程,例如 mysqld,SSHD (d:deamon 守护进程)
mysqld、sshd守护进程 分别通过3306 or 22 端口进行监听。network停止之后,监控端口就关闭了
-
service [status | start | stop | reload] service在CentOS7.0之后被弱化,更多的是systemctl
-
setup 可以看到所有服务
[*]的是自动启动的服务,按空格可以取消
-
0 - 6 与前面的级别一样 (常用的是3 和 5)
-
开机流程
开机 -> BIOS -> /boot -> systemd 进程1 -> 运行级别 -> 运行级别对应的服务
-
设置运行级别的自启动 chkconfig
让某些服务,在某个运行级别下自启动或者不启动,重启机器生效
-
SystemV和systemd都是Linux系统中的初始化系统(init system),负责在系统启动时启动和管理系统服务。 -
SystemV是一个传统的初始化系统,它使用脚本来启动和停止服务。这些脚本通常位于/etc/init.d/目录下,服务的启动顺序由这些脚本的名字决定。 -
systemd是一个新的初始化系统,它使用单元(units)来管理服务。这些单元的配置文件通常位于/etc/systemd/system/目录下,服务的启动顺序由这些配置文件中的依赖关系决定。
他们的主要区别如下:
- 启动速度:
systemd使用并行处理来加快启动速度,而SystemV则是按顺序启动服务。 - 配置方式:
systemd使用单元配置文件,而SystemV使用脚本。 - 日志管理:
systemd内置了日志管理系统journald,而SystemV没有内置的日志管理系统。 - 依赖管理:
systemd可以自动处理服务之间的依赖关系,而SystemV需要手动管理。
-
systemctl 管理指令
systemctl [start | stop | restart | status] (start和stop重启失效;enable是永久性)
systemctl指令管理的服务在 /usr/lib/systemd/system 可在里面查找服务名
-
systemctl 设置服务的开机启动状态
systemctl list-unit-files [| grep 服务名] 查看服务的自启动状态
systemctl enable | disable 服务名 (设置服务开机启动,3和5的运行级别同时生效)
systemctl is-enabled 查询是否是自启动的
-
讲了firewalld 防火墙守护进程
firewalld中关闭的端口无法被外部程序访问到;关闭防火墙之后,相当于裸奔
防火墙相当于家里防盗门;端口相当于家里的成员
-
firewall 指令 可以管理端口
-
打开防火墙,外部请求数据包,无法与内部端口进行通讯,所以需要手动开启某些端口
-
打开端口:firewall-cmd --permanent --add-port=端口号/协议
关闭端口:firewall-cmd --permanent --remove-port=端口号/协议
-
操作完后,得重新载入才能生效:firewall-cmd --reload
-
查询端口是否开放:firewall-cmd --query-port=端口号/协议
-
举例:查看111端口
firewall-cmd --query-port=111/tcp
-
-
高位端口?
-
Init and systemd
- init is a process trees
-
Service
- process that run in background, mainly for resource management, interface to access resources
-
traditional init systems: SysV and BSD
other init schema: SMF, launchd, PoenRC, Upstart
-
systemctl and journalctl
- systemctl: control services; journalctl: read and filter systemd journal
-
other important commands and services
- commands: timetablectl (synchronizayion), hostnamectl(hostname, location, ...), systemmd-resolve
- services:
-
Tools in systemd commands:
-
systemctl
systemctl status service journalctl -u service systemctl cat service systemctl list-dependencies service
-
top
-
与ps相似,不过可以更新
-
top -d 秒数 (每隔5秒,默认是3 s)
top -i (不显示闲置进程)
top -p PID (指定监视某个进程)
load average:三个值平均值大于7%的话说明负载过大,需要优化
zombie 僵尸进程,进程已经死掉,但是仍然占用着内存
%CPU 的各项指标含义 :
us:用户空间占用CPU的百分比。sy:内核空间占用CPU的百分比。ni:用户空间内改变过优先级的进程占用CPU的百分比。id:空闲CPU百分比。wa:等待I/O的CPU时间百分比。hi:处理硬中断的CPU时间百分比。si:处理软中断的CPU时间百分比。st:在虚拟环境中等待实际CPU的百分比。
-
top 交互操作
在动态显示界面 输入:
P (按照%CPU排序)
M (按照内存排序)
N (按照PID排序)
输入k 再输入进程号,就直接杀掉了;强制结束可以继续输入 9 (9是信号量)
剔除用户:就是kill掉该用户的bash进程。
-
netstat -anp [-an 按照一定顺序排列输出 -p 显示哪个进程在监听端口]
-
0.0.0.0:22 本地程序在监听22端口
-
192.168.13.128:22 这是本地Linux的IP地址和端口
-
192.168.13.1:8226 这是windows中xshell的IP与端口
-
-
netstat -tulpn | grep -i ssh
- rpm:RedHat Package Manager 软件包管理工具,.RPM扩展名的文件。虽然是基于RedHat 但是被广泛采用,算是行业标准。
-
rpm -qa | grep firefox
-
返回结果:firefox-60.2.2-1.el7.centos.x86_64
-
名称:firefox
-
版本号:60.2.2-1
-
适用操作系统:el7.centos.x86_64 (如果是i686、i386表示32位系统,noarch表示通用)
-
- rpm -qa 查询所有已安装的rpm软件包
- rpm -qa | more、grep
- rpm | q 软件包名 查询软件包是否安装
- rpm -qi 查询软件包信息
- rpm -ql 查询软件安装到哪里了,包里包含着什么文件
- rpm -qf [文件] 查询这个文件隶属于哪个rpm包
- rpm -e 包名(比如只写firefox即可) //erase的意思
- 注意:如果其他软件包依赖你要删除的软件包,可能会报错
- rpm -ivh RPM包全路径名称 (install 安装;verbose 提示;hash 进度条)
- shell前端包管理器,基于RPM管理,可以自动下载安装,处理依赖性关系。
- yum list | grep xxx 查询服务器是否有需要安装的软件;yum list installed | grep xxx 查询已安装的
- yum install xxx 下载安装
- yum -y install xxx 安装过程中的选项都默认自动选择
Extra Packages for Enterprise Linux
Fedora推出的免费软件包的源
-
Stop
systemctl stop waagent
-
Move current /var/lib/waagent
mv /var/lib/waagent /var/lib/waagent.old
-
Unintsall
yum remove WALinuxAgent -y
-
Reinstall
yum install WALinuxAgent -y
-
Restart the Azure waagent
systemctl start waagent
-
Validate current status
systemctl status waagent
-
check contents
ls -l /var/lib/waagent cat /var/log/waagent.conf
-
Check extensions
cd /var/log/azure ls -l
-
Package:一个压缩文件,包含一个特定应用的所有文件。可以是.rpm .deb .tgz 类型
-
Packages stored in respositories which is a collection of packages. (资源库)
-
Linux respositories: a storage location from which system retrives and installs OS updates and applications
-
查看仓库:
yum repolist all
Common UNIX Printer System (CUPS)
-
Package name
cups
可以用 stress功能
# 首先安装EPEL源
yum -y install epel-release
# 再安装stress
yum --enbaleerepo=epel install stress -y
# 复制一个Terminal,查看CPU
stress -c 4
# CPU
cat /proc/cpuinfo
# memory
cat /proc/meminfo
# 内存 缓存 交换区
free -mSystem Activity Report
yum install sysstat -y
systemctl enable sysstat
systemctl start sysstat
sar把系统配置、诊断信息等打包起来,可以发给Technical Support
-
查看OS版本
cat /etc/*release -
查看kernel信息
uname -a
-
查看安装的版本
lsmod
-
查看CPU信息
cat /proc/cpuinfo
-
查看存储信息
cat /proc/meminfo
-
查看kernel参数
sysctl -a
-
启动时,如果有多个kernel存在,可以选择用哪个。通过GRUB(grand unified bootloader),GRUB配置文件:/boot/grub/grub.conf或者/boot/grub2/grub.cfg
-
在一些case中,客户升级了kernel后,VM不能重新启动,所以我们要更改grub配置
查看所有kernel版本
awk -F \' '$1==menuentry " {print $2}' /boot/grub2/grub.cfg
查看默认启动kernel版本
grep -i default /etc/default/grub
改变kernel默认启动版本
vi /etc/default/grub # GRUB_DEFAULT = saved (saved意思是使用GRUB_SAVEDEFAULT变量所保存的,或者grub-set-default命令设置的选项作为默认) grub2-set-default 1 # 这里的序号是系统中存在的kernel列表从0开始的编号
将配置写入cfg文件,以永久保存
grub2-mkconfig -o /boot/grub2/grub.cfg
重启
reboot uname -r
-
系统信息文件,记录系统事件
常用日志的位置:
-
日志管理服务
-
CentOS6:syslogd;CentOS7.6:rsyslogd
-
查询日志管理服务是否启动:
ps aux | grep "rsyslog" systemctl status rsyslog.service systemctl list-all-units | grep rsyslog
-
-
日志配置文件
/etc/rsyslog.conf
记录了什么日志往哪放;还有日志级别:
-
日志轮替
-
配置文件:/etc/logrotate.conf
-
被轮替下来的日志会被命名为 xxx1.log,再被轮替下来就会有 xxx1.log和 xxx2.log,可以设置最大保存的副本数量。
-
也可以设置日志大小必须超过多少MB才会被轮替,不到这个大小,即使到了规定的轮替时间也不会被轮替。
-
日志轮替是通过系统定时任务来实现的。rsyslogd负责往哪里写什么,logrotate后台定时任务负责什么时候写和删除
-
-
查看内存日志
- 有一部分日志是先写到内存里,还没写到文件里;内存日志重启就清空了
- journalctl -o verbose
-
dump - [cu c是个具体数字:0123456789] [-f 备份后文件名] -[T 日期] [目录或者文件系统]
- -0123456789 :备份层级,0为最完整备份,>0是增量备份,指定最多备份几次。
-
注意:xfs文件系统要用xfsdump;ext4才能用dump命令
-
shell是命令行解释器,负责向Linux内核发送请求
-
脚本格式要求
- 脚本以 #!/bin/bash 开头
-
脚本执行方式
-
方式1 赋予x权限,再执行
chmod u+x /opt/shcode/hello.sh ./hello.sh
方式2 sh +脚本 不用赋予权限也能执行
sh hello.sh
-
-
系统变量:$HOME $USER $PATH $PWD $SHELL 等;用户自定义变量
-
显示系统中的所有变量 set
-
变量定义:
- 定义:名字=值 (注意:中间不能有空格)
- 撤销变量:unset A (变量名)
- 声明静态变量:readonly 变量 无法被unset
- 注:vim中显示行号:命令行模式 :set nu
- 规则
- 变量定义中等号两侧不能有空格
- 变量名习惯为大写字母,不能以数字开头
- 将某条命令的返回值赋值给变量:
- A=`date` (`是反引号) 或者 A=$(date)
-
环境变量
-
基本语法
-
在/etc/profile中加入 export 变量名=变量值 (将shell变量输出为环境变量/全局变量,可以被多个文件共用)
-
source /etc/profile (写入新的环境变量之后,应该用source刷新一下)
-
echo $变量名
-
-
注:多行注释
:<<! xxxx !
-
-
位置参数变量
- 运行脚本时,希望获取到命令行手动输入的一些参数,就要用到位置参数变量。例如 sh myshell.sh 100 200,100 200这两个参数就能被传进去
- 基本语法:
- $n n=代表命令本身;n=$1代表命令行传入的第一个参数;n=$2-9;n=${10} 10以上要用{}
- $* 代表所有参数;**$@**也代表所有参数,把各个参数区分对待? $#代表参数的个数
-
预定义变量
-
基本语法
-
**$$当前进程号PID;$!后台运行的最后一个进程号PID;$?**最后一次执行命令的返回状态,0代表成功,非0代表失败
-
在shell脚本中运行另一个脚本
/opt/shellcode/myshell.sh &
-
-
-
$((运算式)) 或者 $ [运算式] 或者 expr m + n (这种写法 运算符之间有空格);想把结果赋给某个变量,要用 `` - expr 乘 \* 除/ 取余% (用了expr才要用转义)
-
if [ 23 -ge 22 ] # [xxx]非空返回true true就是0;[ ]空的就返回false,false是>1;判断符与数字之间有空格,[ 后面 与 ] 前面都有空格 then echo "greater" fi
-
判断条件
-
= 字符串比较
-
整数比较
- -lt 小于;-le 小于等于;-eq 等于;-gt 大于;-ne 不等于
-
文件权限判断
-r -w -x
-
文件类型判断
-f 文件存在并且是常规文件
-e 文件存在
-d 文件存在并且是个目录
if [ -f aaa.txt ] then echo "Yes" fi
-
- if
if [ condition ]
then
代码
fi
if [condition]
then
代码
elif
代码
fi
if [ condition ]
then
代码
else
代码
fi- case
case $1 in
"1" )
echo "one"
;;
"2")
echo "two"
;;
*)
echo "other"
;;
esac-
for
# 方式1 for i in "$*" # $*把命令行参数看作一个整体;$@分开看命令行参数 do echo "num is $i" # i在in的里面就不停的输出;但是因为$*看作整体,所以一次就一口气全输出了;$@有几个参数,for就输出几次 done #方式2 SUM=0 for((i=1; i<=100; i++)) # 这里;后面要有空格 小括号旁边没有空格 do SUM=$[$SUM+$i] done
-
while
while [ condition ] # 只要是中括号后面就一律加上空格 do 代码 done SUM=0 i=0 while [ $i -le $1] # 中括号里面的条件判断不能用<= 还得用 -le那一套 do SUM=$[$SUM+$i] i=$[$i+1] #自增操作 done
读取输入read
read(选项)(参数)
-p 指定读取时的屏幕输出提示符
-t 指定读取时的指定时间,超过时间没输入就不等待了
read -p "Input NUM1=" NUM1
echo "num1=$NUM1"
read -t 10 -p "Input NUM2=" NUM2
echo "num2=$NUM2" 系统函数和自定义函数
-
系统函数
- 例如:basename 返回完整路径 / 最后的部分,用于获取文件名
- basename [pathname] [suffix]
- dirname 返回完整路径 / 前面的部分
-
自定义函数
function funname()
{
action;
[return int;]
}
-
需求:
- 每天凌晨2:30备份
- 备份开始结束,给出提示信息
- 备份文件以时间为文件名
- 检查是否有10天前的备份文件,有的话就删除
-
思路分析:
编写脚本实现2 3 4项功能,用crond定时执行即可
#!/bin/bash
# Backup to which location
BACKUP=/opt/shcode/backup
#get current time
DATETIME=$(date +%Y-%m-%d_%H%M%S)
#judge if backup location exists
# 这是一个短路与 表达式 []里面的表达式为真 则执行&&后面的;这里是如果文件夹不存在的话,就创建一个 mkdir -p 代表创建多级文件夹
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
#create tar.gz for fun.sh
tar -zcvf /opt/shcode/fun.sh ${BACKUP}/${DATETIME}/${DATETIME}.tar.gz
# create tar.gz for the directory then remove the tar.gz file
cd ${BACKUP}
tar -zcvf ${DATETIME}.tar.gz ${DATETIME}
rm -rf ${BACKUP}/${DATETIME}
# remove the backupc files which is created before 10 days;
#find -atime 表示寻找到多少天之前的文件;-exec 表示对前面生成的文件进行操作;{}表示对前面所有文件;/;表示结束符
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm {} \;
echo "Backup completed"-
一开始root没有密码,用su命令会失败;要先设置密码:
sudo passwd
设置好密码再用su,输入密码即可切换为root用户
-
$ 代表普通用户;# 代表root用户
-
Advanced Package Tools
-
国内的镜像网站:会定时去国外服务器同步资源,访问速度会快一些。可以在sourcelist里面设置成从镜像网站安装,例如,在清华大学镜像站中,找到使用帮助,在对应系统版本中找到sources.list的配置
-
常用命令 (新版Ubuntu用apt代替apt-get)
sudo apt-get update
sudo apt-get install xxx
sudo apt-get remove xxx
sudo apt-cache show xxx(获取包的相关信息)
sudo apt-get source xxx (下载该包的源代码)
-
SSH:Secure Shell:是建立在应用层和传输层的安全协议;如果A机器想要被B机器远程操作,A要安装SSH服务器,B要安装SSH客户端
-
Ubuntu 默认没有安装ssh服务
apt install openssh-server
-
打开sshd服务
systemctl restart sshd-
从一个Linux登录到另一个Linux (服务器集群中有用)
ssh username@ip # 输入目标服务器的登陆用户名和密码
- stored in /etc/locale.conf
- system locale and keyboard can be configured by localectl
-
RTC (real time clock): hardware clock. Independent, run even shut down
-
UTC (Coordinated Unviersal Time); DST (daylight saving time): local time
-
timedatectl date hwclock : configure the system clock
-
after changes made, use systemctl restart systemd-timedated.service to restart
-
Changing current time\date : timedatectl set-time HH:MM:SS / YYYY-MM-DD HH:MM:SS
-
Changing time zone: timedatectl list-timezones / timedatectl set-timezone xxx
-
sync with remote server timedatectl set-ntp yee/no
-
hwclock /etc/adjtime
-
if NTP is used, hardware clock automatically synchronized every 11 mins.
-
Recommand to keep the hardware clock in UTC.
- The settings defines what permissions are applied to a newly created file or directory is umask, which is configured in /etc/bashrc. Default is 022, which only allows creators to modify, even creator's group are not allowed.
- a list of groups: /etc/group
-
/etc/passwd move to-> /etc/shadow which is only read by root user. Passwd aging Policy is also contained
-
Users setting tool (Graphical): Super -> Users
-
Connamd line tools:
-
useradd usermod userdel
-
groupadd groupmod groupdel
-
gpasswd: for administering /etc/group
-
pwck, grpck
-
pwconv, pwunconv; grpconv, grpunconv
-
-
Default UID range:
-
Previously 1 - 499 : system users; 500 + normal user
now: 1 - 999 : system users; 1000 + normal user
Default ranges of UID and GID can be changed in /etc/login.defs
-
-
Dafault GID range:
- below 1000 are for system and could not be used by users
-
useradd user1
then /etc/passwd is changed as follow:
user1:x:1001:1001::/home/user1:bin/bash # user name;x: systyem using shadow passwd; UID; GID; GECOS left blank;home directory;default shellMeanwhile, /etc/shadow /etc/group /etc/gshadow is also changed accordingly
/home/user1 is added. but this new user is activitated after the root user set a passwd
Situation: By default, in a directory, when sb. creates a file, it belongs to the primary group he belongs.
Setgid bit:对一个目录设置,目录中的文件 便自动会分配上 [与目录的组相同] 的组。让文件执行者以 目录组 的权限去执行。
Eg:
Several users are working on files in /myproject; some are trusted to modify files.
mkdir /myproject
groupadd myproject
chown root:myproject /myproject
chmod 2775 /myproject # setgid bit设置为2了
ls -ld /myproject
usermod -aG myproject username # add user into myproject group -
A special administrative group called wheel
useradd -aG username
you can configure who has the privilege to use su and sudo command
-
edit PAM configuration file for su: /etc/pam.d/su
uncomment it:
# auth required pam_wheel.so use_uidwhich means that only members in wheel can use su command.
-
/etc/sudoers in default: gives every user in wheel group with unlimited root access.
-
only users listed in /etc/sudoers are allowed to use sudo command
-
each successful authentication using sudo is logged into /var/log/messages,
-
issuer's name is logged into /var/log/secure
-
which one to be logged can be controlled in /etc/pam.d/system-auth:
add line: session required pam_tty_audit.so disabled=user1,user2 enabled=user1,user2
-
-
To give sb. full privilege to use sudo:
type visudo (visudo is a tool to manage /etc/sudoers)
find sth like root ALL=(ALL) ALL
add username ALL=(ALL) ALL
which means username can use sudo from any host and execute any command
-
sudoers' passwd intervals can also be managed.
-
-
-
subscription-manager register (register your system with the same username and passwd as Redhat Customer portal)
-
subscription-manager list --available (lsit all subscriptions)
-
subscription-manager attach --pool=pool_id (attach a subscription to the system)
- after system subscribed, a repository file is created in /etc/yum.repos.d/
- use yum repolist to check
-
remove subscription
-
check sub lists: subscription-manager list --consumed
-
find serial number
-
subscription-manager remove --serial= serial_number
-
- install -> register
- Open and update
- viewing cases
- client-server architecture, encoded session, more secure than telnet
- openssh package required
- version1 and version2
-
files 记录着服务端、客户端的一些身份验证信息等
- system-wide files: /etc/ssh
- user-specific files: ~/.ssh/
- 如果重装了系统,可以备份相应的文件夹,以恢复之前的设置
-
generate key-pair then send the public key
-
configure ssh-agent
-
using ssh-client
-
scp: file transfer between machines, encrypted
-
sftp: open an FTP session
Previously insecure port connections between systems can be mapped to specific SSH channels
- yum group install X windows system
- X11 forwarding
- Client - server architecture
- server -> recipient's server -> recipient's client
- SMTP
- no authentication, making junk email, use relay restriction to limit it
used by clients to retrive email from servers,规定了怎样将个人计算机连接到网络上的邮件服务器的协议
-
Post office Protocol (POP)
-
用户将邮件从服务器上下载到本地主机,同时删除服务器上的邮件
-
Redhat use Dovecot provided by dovecot package to use POP server
-
email are downloaded by email client apps
-
compatible for Internet standards, such as Multipurpose Internet Mail Extensions (MIME), which allows Mail Attachments
-
most current version: POP3; POP3s service provided SSL encryprion
-
-
Internet Message Access Protocol (IMAP)
- 从客户端收取的邮件都保留在服务器上,同时在客户端的操作在服务器上都有标记
- emails remain on the server which can be checked
- dovecot is also used;SSL is also supported by using syunnel program
-
Mail Transport Agent
- use SMTP (Simple Mail Transfer Protocol), 一组用于从源地址到目的地址传输邮件的规范,控制邮件的中转方式,属于TCP/IP协议簇
- Postfix and Sendmail
- fetchmail: retrieves email from remote servers and delivers it to the local MTA
-
Mail Delivery Program
- Procmail: deliver email to be read by client apps
-
Mail User Agent






