admin 管理员组文章数量: 887007
Linux 启动运行五步曲
1、开机自检
linux 开机加电后,系统进行开机自检,主要对各种硬件设备进行检测,如CPU、内存、主板、硬盘、CMOS芯片等,
如果出现致命故障则停机,由于初始化过程还没完成,所以不会出现任何提示信号;
如果出现一般故障则会发出声音等提示信号,等待故障清除;
若未出现故障,自检完成。
2、开机自检完成,加载BIOS、主引导目录(MBR)
开机自检完成后,CPU首先读取位于CMOS中的BIOS程序,按照BIOS中设定的启动次序(Boot Sequence)逐一查找可启动设备,加载主引导记录
3、加载内核,初始化initrd
initrd文件其实是一个虚拟的根文件系统,里面有bin、lib、lib64、sys、var、etc、sysroot、 dev、proc、tmp等根目录,它的功能就是让内核与真正的根建立联系,加载根文件的驱动程序,然后以读写方式挂载根文件系统,至此, 内核加载完成。
4、运行/sbin/init,进行系统初始化
内核挂载完根文件系统后,执行第一个用户进程init,init首先运行/etc/init/rcS.conf 脚本,调用了/etc/rc.d/rc.sysinit,对系统做初始化设置,比如
获得网络环境、是否启用SELinux、初始化硬件 、挂载设备、检验磁盘文件系统、加载自定义模块、设置主机名、同步存储器、清除开机过程当中的临时文件等。
5、打印登录提示符
系统初始化完成后,init 给出用户登 录提示符(login)或图形化登录界面,用户输入用户和密码登陆后,系统会为用户分配一个uid 、gid,用于检测用户运行程序时的身份验证。登录成功后,整个系统启动流程运行完毕
字体变大:ctrl shift +
字体变小:ctrl -
永久定义字体:编辑-配置文件选项-自定义字体
关机 poweroff
重启 reboot
系统版本 cat /etc/redhat-release
系统信息 uname -a
内存信息 /proc/meminfo
cpu信息 lscpu
Ctrl + c 结束正在运行的命令
Ctrl + l 清屏
Ctrl + u 光标处清空至行首
Esc+. 或 Alt+. 粘贴上一个命令的参数
vim /etc/sysctl.conf:修改内核参数 修改配置文件,重启程序才生效
sysctl -p 可以使这些设置立即生效
hostnamectl set-hostname 主机名 #设置永久主机名,重开终端后生效
修改配置文件( /etc/hostname ) ,重启服务器
curl -i 网址 显示信息不保存
curl -o 目录 网址 下载文件到哪个目录
wget 网址 下载到当前路径
通配符
* 任意多个任意字符 ? 单个字符
> #覆盖文件内容
>> #追加文件内容 echo a >> /tmp/test.txt
cat >> /tmp/test.txt 输入追加内容 ctrl+d 结束 、
命令(都是单词缩写)+参数(可加可不加) +要操作的文件
whereis 查找文件,包括配置文件,程序文件
cat --help
cat -n /etc/shells 显示行号
wc -l /etc/shells 汇总行数
head、tail #查看文本文件部分信息(前几行、后几行) ,默认10行
head -数字(表示前几行) 文件名
tail -数字 (表示后几行) 文件名
ls -l
-t : 按修改时间排序
-d:目录本身属性
-h:提供容量单位(K、M等)
-A:显示包含隐藏数据的所有内容
-R:递归显示所有内容(包含所有目录及文件)
lsattr: 用于显示文件属性。 lsattr /etc/passwd
用 chattr 执行改变文件或目录的属性,可执行 lsattr 指令查询其属性
- -a 显示所有文件和目录,包括以"."为名称开头字符的额外内建,现行目录"."与上层目录".."。
- -d 显示,目录名称,而非其内容。
- -l 此参数目前没有任何作用。
- -R 递归处理,将指定目录下的所有文件及子目录一并处理。
- -v 显示文件或目录版本。
- -V 显示版本信息。
chattr:用于改变文件属性。 chattr +a /etc/passwd chattr -a /etc/passwd
这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:
a:让文件或目录仅附加用途。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:将文件或目录排除在倾倒操作之外
i:不得任意更动文件或目录。
s:保密性删除文件或目录。
S:即时更新文件或目录。
u:预防意外删除。
find [目录] [条件] -exec 处理命令 {} \;
#高级查找并处理 (find / -user student -type f -exec cp {} /root/findfiles \;)
-type 类型(d(目录) 、f(文件) 、l(快捷方式))
-name "文档名称"
-size +/-文件大小(k、M、G)
-user 用户名
-mtime 修改时间
grep [选项] 字符串 文本文件 #过滤查找
-v 取反
-i 忽略大小写
^word 以字符串word开头
word$ 以字符串word结尾
^$ 表示空行
-E 扩展正则
-P 正则
sed 选项 条件 指令 被处理文档
选项 : -n 屏蔽默认输出(不输出源文件,只出结果) -r 支持扩展正则 -i 修改源文件
条件 : 行号 /字符串/
指令 : p 输出 d 删除 s 替换
sed -i '2,$d' test.txt #删除2到最后一行
awk 选项 条件 指令 被处理文档
选项: -F 定义分隔符(当没有空格作为分列时,使用定义分隔符定义其他的)
指令: print(输出)
条件 : 行号 /字符串/
内置变量: $1第一列 $2第二列 $3第三列 ... $0 所有列 NR行号 NF 列号(最后一列)
awk '/^bin/{print NR,$0}' user 找以bin开头的行,显示该行的行号,所有列
处理时机,可以执行额外任务
begin任务 执行1次,读取文档之前执行
逐行任务 执行n次,读取文档时执行
end任务 执行1次,读取文档之后执行
who 当前登录信息
last 查看最近登录信息
lastb 最近登录失败的信息
which hostname #查询命令对应的程序
lsof -i:80 查找对应的端口占用
df -h 查看文件系统空间大小
cd .. #返回上一级目录
pwd #显示当前所在位置
alias 查看已设置的别名
alias 别名名称= '实际执行的命令行' 定义新的别名
unalias [别名名称] 取消已设置的别名
vim /root/.bashrc #修改别名文件后执行生效
source /root/.bashrc
history #管理/调用曾经执行过的命令,默认记录1000条
history -c #清空历史命令
!n #执行命令历史中的第n条命令
!str #执行最近一次以str开头的历史命令
top #查看运行的内存、cpu,查看哪个进程占用系统内存和cpu最多。
htop #查看更详细的运行的内存、cpu,
> /dev/null 从定向到空设备,即扔垃圾桶
ss -nutlp (Socket Statistics)显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快
netstat -nutlp 显示网络状态
ps -ef :显示系统内运行的所有进程
pstree 查看进程
-a:显示完整的命令行
-p:列出对应进程的PID编号
pgrep — 搜索进程
-l:输出进程名
-U:指定用户
-x:精确匹配
kill 终止进程
kill -9 PID #慢慢死
killall -9 进程名 #立刻死
pkill -9 查找条件 #沾边就死
vim
gg首行,G行尾,3yy 复制3行 、p 粘贴(put放置)、3dd 删除3行、u 撤销最近一次操作
/user 搜索含 user 的字母
:1,10s/root/new/g 替换第1-10行所有的root (g 表示一行)
:%s/root/new/g 替换文件内所有的root
:r /etc/filesystems #读入其他文件内容
:w /etc/filesystems #另存为其他文件
:wq 保存文件 :q 不保存文件 q! 强制不保存文件
:nohl 取消高亮显示
vim /root/.vimrc
set nu 设置永久性开启行号( . 开头的都是隐藏文件)
set hlsearch 设置高亮搜索(搜索都会显示高亮)
修改文件时报错325:非法关闭导致linux生成了以.swp结尾的缓存文件,删除提示中出现swp文件即可。
vim: error while loading shared libraries: /lib64/libgpm.so.2: file too short
解决步骤:
1、yum reinstall -y gpm-libs
2、yum reinstall -y perl-libs
3、yum clean all
4、yum makecache
5、yum remove -y vim
6、yum install -y vim
向前或向后缩进4个空格
- 按
shift + v
组合键进入Visual Line
模式,可使用方向键选择多行; - 按
shift +<
或shift +>
,进行向前或向后缩进。注:有些设置为缩进一个Tab单位。
1. 插入注释
(1)首先按键盘上的ESC进入命令行模式
(2)再按Ctrl+V进入VISUAL BLOCK模式
(3)利用上下左右键调整需要注释多少行以及行的宽度
(4)再按Shift+i或s进入插入模式
(5)输入代表注释的符号,比如#
(6)再次按ESC键,这时就可完成多行注释(可能需要等上一会,不要着急)
2. 去注释
前三步与加注释相同。
(1)首先按键盘上的ESC进入命令行模式
(2)再按Ctrl+V进入VISUAL BLOCK模式
(3)利用上下左右键调整需要去注释多少行以及行的宽度
(4)再按d即可完成去注释
echo -e "\033[?25l" 隐藏光标
echo -e "\033[?25h" 显示光标
touch 创建文件,可以同时创建多个
mkdir -p 创建目录(递归创建),可以同时创建多个
rm -rf 删除目录(递归删除、强制删除不提示)
mv 原文件 目标路径 #移动
\cp 选项 原文件.... 目标路径 #复制
-r(递归复制) -p(保留权限) \(强制覆盖不提示)
复制可以支持两个以上的参数,永远把最后一个参数作为目标,其他的所有的参数都作为源数据
rsync:远程同步数据,只传输变化过的数据
rsync -av --delete
rsync [选项...] 源目录 目标目录
-n:测试不修改
-a:归档模式
-v:详细操作信息
--delete:删除目标文件夹内多余的文档
-z:传输过程中启用压缩/解压
下载:rsync [...] user@host:远程目录 本地目录
上传:rsync [...] 本地目录 user@host:远程目录
scp -r 远程传输
lrzsz :Linux/Unix同Windows进行文件传输的命令行工具
yum -y install lrzsz
rz 命令:上传文件 (receive 接收) 从Windows传到Linux
sz 命令 :下载文件 (send 发送) sz 文件名 从Linux发送到Windows
crontab 计划任务 ( crontab -r 清除计划任务)
编辑:crontab -e -u 用户名
格式:分* 时 * 日 * 月 * 周 * 任务命令(绝对路径)
每个星期一的上午8点到11点的第3和第15分钟执行命令: 3,15 8-11 * * 1 command
当新机器没有yum包的时候,需要安装包 Centos下安装yum (简单亲测版)_centos 安装yum-CSDN博客
删除旧的源 rm -rf /etc/yum.repos.d/* && cd /etc/yum.repos.d
阿里 wget https://mirrors.aliyun/repo/Centos-7.repo
华为 wget https://repo.huaweicloud/repository/conf/CentOS-7-reg.repo
yum clean all && yum makecache && yum repolist
yum remove 软件名
当镜像源更新报错时::[Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。
CentOs7 解决yum更新源报错:[Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。_centos7更新后提示找不到尝试其它源-CSDN博客
配置内容:
[源名称] 自定义名称,具有唯一性
name= 仓库的描述信息
baseurl=file:///mnt (/mnt为挂载点) 指定YUM服务端的位置
enabled=1 是否启用 (1为启用)
gpgcheck=0 是否验证红帽签名( 0不验证,1验证) gpgkey= 用于RPM软件包验证的密钥文件( 0不查,1查)
rpm -qa 软件名 #查询已安装的rpm包
rpm -qf 文件位置 #查询文件属于哪个rpm包
rpm -ivh 完整包名 #安装rpm包 (rpm不会解决依赖问题,yum为主)
rpm -e --nodeps #卸载包,--nodeps表示不含依赖
源码编译——支持开启第三方额外的功能,指定安装路径
安装开发工具gcc与make,释放源代码至指定目录
./configure 配置菜单,指定安装目录/功能模块等选项
make && make install 编译安装,
管理服务
systemctl restart / start / stop / status /enable 服务名 #重起服务 / 开启 / 停止 / 开机自启状态
查看某个服务是否启动三种方法
方法一:查看redis服务进程情况,这里拿redis服务举例,
ps -ef | grep redis
方法二:查看6379(为redis的端口号)端口号是否被占用
lsof -i :6379
方法三:显示tcp的端口和进程等相关情况
netstat -nutlp | grep
进程信息:一个应用程序跑起来了,就有一个进程记录,任务管理器,去干掉,杀掉某个程序
端口:提供服务的一个窗口,应用程序需要暴露的一个窗口
ln -s /路径/源数据 /路径/快捷方式的名称 #软链接,源数据消失,快捷方式失效,支持跨分区
ln /路径/源数据 /路径/快捷方式的名称 #硬链接,源数据消失,快捷方式仍然有效,不支持跨分区
tar压缩
tar 选项 /路径/压缩包名字 /源数据... #可以压缩多个目录
压缩格式 gz: gzip , bz2 : bzip2 ,xz :xz,对应选项: -z 、-j 、-J
-c:创建归档
-v:显示操作过程
-f:指定归档文件名称,必须在所有选项最后
-t:显示归档中的文件清单
tar 解压
tar 选项 /路径/压缩包名字 选项 /释放的位置
-x:释放归档
-f:指定归档文件名称,必须在所有选项最后
-C:指定释放路径
zip 压缩与解压
zip -r (打包目录) /路径/压缩包名字 /源数据 (类似tar格式)
unzip /路径/压缩包名字 -d /释放的位置(类似tar格式)
权限是针对用户的,创建用户得 root 去创建,服务器支持同时多人登录
useradd 选项 用户名 #创建用户
-u:指定 UID 标记号
-d:指定宿主目录(家目录),默认在 /home/用户名
-G:指定所属附加组
-s:指定登录解释器 /sbin/nologin 禁止用户登录操作系统
usermod 选项 用户名 #修改用户
-i:修改用户名(新用户名称,原用户名称) 其他选项同上边一致
userdel -r 用户名 #删除用户 宿主目录/用户邮件也一并删除
Id qq #查看qq用户是否存在
passwd 用户 #给用户添加密码
echo 123 | passwd --stdin nsd01 #给用户添加密码
groupadd 组名 #新建组
groupdel 组名 #删除组的时候,不可以删除基本组,只能删除附加组
gpasswd 选项 用户 组名 #修改组
-a:添加组成员,每次一个
-A:设置组管理员
-d: 删除组成员,每次一个
-M:覆盖组成员用户列表,可设置多个 m ’组成员,组成员‘
chmod [u/g/o/a] [+/-/=] [r/w/x] 文件 ( -R:递归修改权限)——用户加权限
chmod 数字 文件 r、w、x分别对应4、2、1 ——文件加权限
chown -R 属主 文件 ( -R:递归修改归属关系)——修改文件所属主、所属组
chown : 属组 文件
chown 属主:属组 文件
附加权限( g+s 新建的文档会自动继承此目录的属组身份 、o+t 用来限制用户写入权,不能删改)
ACL访问策略-– 能够对个别用户、个别组设置独立的权限
setfacl [选项] u:用户名:权限 文件
setfacl [选项] g:组名:权限 文件
getfacl 文件名 #查看ACL策略
-m:修改ACL策略
-x:清除指定的ACL策略
-b:清除所有指定的ACL策略
-R:清除递归设置指定的ACL策略,连用-Rm
新建目录默认权限为755 , 新建文件默认权限为644(所有者:所属组:其他人)
分区——格式化——挂载
lsblk #查看当前系统硬盘
fdisk /dev/sdb #开始开区 (MBR模式下分区指令)
操作指令:n 新建、p 查看分区表、w 保存退出、q 不保存退出
parted(GPT模式下分区指令)
partprobe #刷新分区表
mkfs.ext4 /dev/sdb1 #格式化ext4文件系统
blkid /dev/sdb2 #查看文件系统类型
mount 设备路径 挂载点目录 ( 设备路径都在 /dev/cdrom ) #临时挂载
vim /etc/fstab 、 mount -a 永久挂载 (要挂载的设备/UUID、挂载点、文件格式、defaults 0 0 )
umount 挂载点目录 卸载
df -h # 查看磁盘空间
df -Th # 查看挂载情况
free -m #查看内存空间
swapon -s #查看交换空间
交换分区(虚拟内存) swapon 利用硬盘的空间,充当内存的空间 (交换空间是内存的两倍,把磁盘空间弄成内存)
mkswap /dev/sdd2 #格式化交换空间文件系统
swapon /dev/sdd2 #启用交换分区
swapon -a #激活交换分区
vgcreate 卷组名 设备路径..... #建立卷组
lvcreate -L 大小G -n 逻辑卷名字 卷组名 #建立逻辑卷 (先有卷组才有逻辑卷)
mkfs.xfs /dev/systemvg/vo #格式化逻辑卷xfs文件系统
xfs_growfs /dev/systemvg/vo #刷新xfs文件系统 resize2fs /dev/systemvg/vo #刷新ext4文件系统
myip.ipip #查看本地 ip 地址
ip a s #查看IP地址
ifconfig #查看IP地址
route -n #查看网关地址信息
Tcping 命令使用传输层协议,可以检测IP端口状态
tcping 192.168.11.23 53
网络四种方法:一临时三永久
ip eth0 192.168.4.110/24 —临时配置IP
nmcli connection modify eth0 ipv4.method manual ipv4.address 192.168.4.7/24 ipv4.gateway 192.168.4.254 connection.autoconnect yes
nmcli connection up eth0 #激活
网卡配置文件:/etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes #是否启用此网卡
IPADDR=192.168.4.7 #ip地址
PREFIX=24 #子网掩码
GATEWAY=192.168.4.254 #网关地址
ifdown eth0 #禁用eth0网卡
ifup eth0 #激活eth0网卡
NTP 时间服务器
yum -y install chrony
systemctl restart chronyd
chronyc source -v 查看同步
UNIX诞生,1970-1-1
Linux平台:虚拟软件为 KVM 软件 ,占用资源少,内嵌服务少
windows:虚拟化软件 VMware,占用内存资源多,内嵌的服务多
内核指的是一个进行进程管理、网络通信等功能的系统软件,是操作系统的核心。
Linux 的各个发行版本使用的是同一个内核,因此在内核层不存在什么兼容性问题。每个版本有不一样的感觉;
一个完整的系统= Linux内核(硬件交互)+ 发行版(软件功能)
Linux 的发行版本可以大体分为两类:商业公司维护的发行版,著名的 Red Hat 为代表;
社区组织维护的发行版,以 Debian 为代表。
Red Hat、CentOS、Ubuntu、Debian、SuSE、Gentoo、Fedora Core等都是发行版
/:整个Linux文件系统的根目录
/root:管理员家目录
/home:普通用户家目录
/usr:存放安装程序(软件默认目录)
/opt:存放大型软件目录(非强制)
/bin、/sbin:存放系统命令、可执行的程序
/etc: 存放各种系统配置、系统服务配置文件
/dev:存放各种设备文件
/mnt:挂载点
/tmp: 临时文件
/var:经常变化的文件
/boot:内核与启动文件
/lib:系统库文件
. 当前目录
.. 上一级目录
光驱设备
/dev/cdrom (cdrom是快捷方式,真正的点sr0)
/dev/sr0
内核参数
net.ipv4.tcp_syncookies 开启SYN Cookies
net.ipv4.tcp_max_syn_backlog 增加TCP SYN队列长度
net.ipv4.tcp_tw_recycle 减少time_wait的时间
net.ipv4.ip_forward 是否打开IP转发
net.ipv4.conf.default.accept_source_route 是否允许源地址经过路由
fs.nr_open 端口号范围
kernel.pid_max 用户打开最大进程数
Linux默认解释器:/bin/bash
为了加载用户首选项,bash 在每次启动时都会自动载入 bashrc 配置文件中的内容,这个 .bashrc 隐藏配置文件可以在每个用户的主目录中找到,它用于保存和加载不同用户的终端首选项和环境变量。
归属关系:
所有者(属主):拥有此文件/目录的用户-user
所属组(属组):拥有此文件/目录的组-group
其他用户:除所有者、所属组以外的用户-other
命令行提示符
[当前登录的用户@主机名 当前所在的目录]
以#结尾表示当前登录的身份为root
以$结尾表示当前登录的身份为普通用户
[root@localhost ~]#
用户账户 唯一标识:UID (编号从0开始,默认最大60000)
管理员root:永远为0
系统用户(为程序运行与服务运行提供身份)为 1~999
普通用户:默认从1000开始
组账户 唯一标识:GID(编号从0开始,默认最大60000)
Linux一个用户必须至少属于一个组
基本组:系统创建,与用户同名
附加组:管理员创建,管理员进行加入
/etc/passwd :用户基本信息
/etc/shadow: 用户密码信息
/etc/group :组基本信息
/etc/gshadow:组管理信息
用户名 : 密码占位符 : UID : 基本组GID : 用户描述信息 : 家目录 : 解释器
分割为9个字段(主要记忆前四个) 用户名:密码占位符:上次修改密码时间(从1970-1-1到上次日期):密码最短有效天数
组名 : 密码占位符 : GID : 组成员列表
组名 : 密码占位符 : 管理员列表 : 组成员列表
配置文件:/etc/sudoers
(alice web1=(root) NOPASSWS : ALL)授权哪个用户,在哪个机器,以什么身份,进行免密登录
切换用户:su - 用户
普通用户使用root权限: sudo 命令
主机与主机之间通信的三个要素
–IP地址:用来标识一个节点(连网设备)的网络地址,IP地址的组成:网络位与主机位
–子网掩码:标识IP地址的网络位与主机位,利用二进制的1标识网络位,利用二进制的0标识主机位,
分为A类 255.0.0.0 B类 255.255.0.0 C类 255.255.255.0
–网关:一个网络到另一个网络的关口地址,通常路由器充当。
IP地址(IP address) (0是代表网段,不能用;255为保留地址,也不能用,掐头去尾的原则)
配置方式:手动配置、DHCP自动获取
地址的分类:判断的依据只需要查看IP地址的第一个十进制数
一共32个二进制位(01),表示为4个十进制数(通过换算),以 . 隔开(点分十进制)
–A类:1 ~ 127 网+主+主+主
–B类:128 ~ 191 网+网+主+主
–C类:192 ~ 223 网+网+网+主
–D类:224 ~ 239 组播
–E类:240 ~ 254 科研
ipv6 128位 接近无穷的地址空间 冒分十六进制
ifconfig 查看ip配置
ens33:本机默认网卡,linux系统的随机名字
lo: 本机回环接口 IP永远为127.0.0.1
命令的执行依赖于解释器(默认解释器/bin/bash,多个解释器存在),用户--->解释器--->内核--->硬件。
echo 1 > /proc/sys/vm/drop_caches 清除系统缓存cache
测试网络通信的命令 ping
格式:ping 对方的IP地址 #默认进行4次通信 ,一次ping有去有回
ping -c 3 -i 0.2 -W 1 192.168.1.1 (丢失率为0%即为正常通信)
-c 定义ping的次数
-i 定义ping的间隔时间(秒)
-W ping失败时多久反馈结果
永久禁止 ping 主机就是把这个配置写入文件 /etc/sysctl.conf (配置系统信息)永久保存
(1)在该文件尾部追加 net.ipv4.icmp_echo_ignore_all = 1
(2)保存退出,输入重启生效命令 sysctl -p
按生产厂家分类:希捷、西部数据、三星、闪迪、金士顿
按硬盘材质分类:HDD(Hard Disk Driver):传统硬盘,即机械硬盘、 SSD(Solid State Disk):固态硬盘
按接口类型分类:IDE、SCSI 、SATA、SAS
/dev/sda:SCSI接口的硬盘,第一块
/dev/sdb:SCSI接口的硬盘,第二块
/dev/sdc:SCSI接口的硬盘,第三块
分区—格式化——挂载
UUID 是Linux系统为磁盘分区提供的唯一的标识字符串
分区方案(分区模式): MBR与GPT
(1)MBR分区模式
分区类型:主分区、扩展分区(占用所有剩余空间)、逻辑分区,
最多只能有4个主分区,可以没有扩展分区,至多有一个扩展分区,n个逻辑分区
最大支持容量为 2.2TB 的磁盘
扩展分区不能格式化,空间不能直接存储数据 ; 可以用于存储数据的分区:主分区与逻辑分区
fdisk /dev/sdb p(查看) n(新建) last(+5G) w(保存) q(离开)
(2) GPT分区模式
全局唯一标识分区表,突破固定大小64字节的分区表限制
最多可支持128个主分区,最大支持18EB, 1 EB = 1024 PB = 1024^2 TB
Windows常见的文件系统 :NTFS FAT(兼容性强)
Linux常见的文件系统: ext4 、 xfs 、 swap
mkfs.ext4 /dev/sdb1 #格式化文件系统ext4
blkid /dev/sdb1 #查看文件系统类型
IOPS:云硬盘每秒能进行多少次读写
IO读写时延:云硬盘每处理一个读写IO需要的时间
吞吐量:云硬盘每秒成功进行读写的数据量。
逻辑卷制作过程:将硬盘分区转化的众多的物理卷PV组建成卷组VG,再从卷组中划分出逻辑卷LV。
查看 创建 删除 扩展
逻辑卷管理 lvs lvcreate lvremove lvextend
卷组管理 vgs vgcreate vgremove vgextend
物理卷管理 pvs pvcreate pvremove
逻辑卷的扩展—前提是卷组有足够的剩余空间
(当卷组没有足够的剩余空间—向物理卷要扩展卷组的空间
扩展逻辑卷的文件系统(当空间扩展了时,也要扩展文件系统。即刷新文件系统)
逻辑卷缩减: xfs文件系统:不支持缩减 ext4文件系统:支持缩减
卷组划分空间的单位 PE ,1PE=4M vgdisplay 卷组名 //查看PE大小 ; vgchange -s 1M 卷组名 #修改PE大小
RAID 磁盘阵列 (把多块独立的物理硬盘组合起来形成一个硬盘组(逻辑硬盘),提供更高的存储性能和备份技术)
主板—>阵列卡—>磁盘—>操作系统—>数据
0(条带化存储):并行写入,分散存储(很高的传输率,没有冗余,一个磁盘失效将影响到所有数据),100%,2块磁盘
1(镜像存储): 镜像写入,复制存储(磁盘阵列中单位成本最高的,提供了很高的数据安全性和可用性)50%,2块磁盘
5:同时读写,可靠性高,允许坏1块盘,不影响所有数据,1块校验数据,n-1/n,3块磁盘
6:两块磁盘同时失效也不会影响数据的使用,2块校验数据,n-2/n,4块磁盘
0+1:先做镜像存储,再做条带存储,性能高,可靠性高,50%,4块磁盘
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节=0.5kb。
操作系统读取硬盘的时候,一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB。
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做 inode,中文译名为"索引节点"
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。(UID、GID、权限、字节、位置)
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据
每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)
这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。
inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。删除一个文件名,就会使得inode节点中的"链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。
inode的特殊作用
由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。
有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
移动文件或重命名文件,只是改变文件名,不影响inode号码。
Linux内核定义的事件紧急程度
分为 0~7 共8种优先级别,其数值越小,表示对应事件越紧急/重要
SELinux的运行模式:enforcing(强制)、permissive(宽松)、disabled(彻底禁用)
永久配置文件:/etc/selinux/config 任何模式变成disabled模式,都要经历重启系统
临时切换 :setenforce 1(强制)或 0(宽松),任何模式变成disabled模式,都要经历重启系统
getenforce #查看当前运行模式
破解root密码
第一步:reboot —e—在linux16该行找到 ro 将其修改为 rw ,该行最后空格输入 rd.break —ctrl + x 启动,会看到switch_root#
第二步: chroot /sysroot #切换到根分区环境
第三步:如果SELinux不是强制模式, echo 123 | passwd --stdin root #重置密码
SELinux是强制模式,需要重设SELinux策略, touch /.autorelabel #让SELinux失忆
第四步: Exit #退出根分区文件系统——reboot -f
公钥登录_openssh软件包 、 配置文件 /etc/ssh/sshd_config 、 公私钥 ~/.ssh
ssh-keygen ,可以一路回车。
ssh-copy-id 用户名@ip 将公钥传送到远程主机 host 上面
~/.ssh 目录下,会新生成两个文件:id_rsa.pub 和 id_rsa。前者是你的公钥,后者是你的私钥。
id_rsa(私钥):服务器上经过 rsa 算法生成的私钥。与公钥是一对的密钥对,用于连接其他服务器用。
id_rsa.pub(公钥):服务器上经过 rsa 算法生成的公钥。与私钥是一对的密钥对,用于连接其他服务器用。
将主机 A 的 id_rsa.pub 内容 copy 到 B 主机的 authorized_keys 文件中,这样A主机就能不通过密码连接到B主机。
authorized_keys(授权文件):实现真正无密码连接,即为授权文件,
known_hosts ——记录曾经链接过的机器
方案一:rm -rf ~/.ssh/known_hosts #删除以前远程过的已知主机
方案二:ssh-keygen - R 连接地址 #重置连接地址
服务名: systemctl restart sshd
连接不上:ip地址的改变—— /etc/sysconfig/network-scripts/ifcfg-eth0
服务和端口—— ss -nutlp | grep 22 listen状态则正常,不正常则重启服务service sshd restart
防火墙关闭——service firewalld status,永久关闭
selinux关闭——getenforce
多次尝试密码被系统屏蔽Ip——systemctl stop denyhosts
上帝进程:systemd,内核引导之后加载的第一个初始化进程(PID=1),开机服务并行启动,各系统服务间的精确依赖
systemctl restart sshd
NFS服务基础:Network File System,网络文件系统
用途:为客户机提供共享使用的文件夹
所需软件包:nfs-utils
系统服务:nfs-server
安装软件—创建共享目录—更改权限—重启服务—挂载
DNS
cat /etc/hosts 文件直接解析域名,只为本机解析DNS服务器的功能
cat /etc/resolv.conf 修改内网默认的DNS。
http-80-httpd
nginx-80
tomcat-8080
https-443-附带安全加密的超文本传输协议
ftp-21-vsftpd-上传下载的文件传输协议(TCP协议,安全性更高)
tftp-69-简单文件传输协议(UDP协议,安全性低)
ssh-22
telent-23
smtp-25(邮件传输协议)
dns-53-bind、bind-chroot
nfs-2049-nfs-utils
rsync-873
mysql-3306
redis-6379
zabbix:10050
php-fpm 9000
Nmap 扫描
系统扫描,扫描可以检测潜在的风险、寻找攻击目标、收集信息、找到漏洞。通常扫描是攻击的前奏。
分为TCP扫描(半开、全开扫描)、UDP扫描、ICMP扫描,
选项:-sF (FIN扫描)、-p (扫描指定端口)、-sT(TCP扫描)
FIN 为 TCP会话结束标志,在FIN扫描中一个设置了FIN位的数据包被发送后,若响应RST数据包,则表示端口关闭,没有响应则表示开放。此类扫描同样不能准确判断windows系统上端口开发情况,适合探测Linux系统上的端口开放情况
在端口显示被filtered(过滤)的情况下,要想确定一个端口是否是开放的,通常可结合-sT和-sS、-sF等联合判断,如上图445端口在sT扫描的情况下,显示被过滤,在sF的扫描中显示open|filtered,则表明端口是开放的。
优化系统:
(1)修改主机名、禁止主机被ping、添加普通用户用sudo授权、配置yum源、安装一些常用软件、清除不用的系统用户和组、关闭selinux和防火墙、添加支持中文显示的字符
(2)修改密码策略及复杂度 vim /etc/shadow 最大最小天数、密码长度、到期前天数
在配置文件/etc/pam.d/system-auth(身份认证)中添加口令复杂度参数,password requisitepam_cracklib.so minlen=9 ucredit=-1(大写字母) lcredit=-1(小写字母) dcredit=-1(数字) ocredit=-1(特殊符号),修改后立即生效
登录失败及超时处理: 建议增加 /etc/pam.d/sshd 文件参数(在#%PAM-1.0的下一行进行配置否则不生效):auth required pam_tally2.so deny=3 unlock_time=300 root_unlock_time=300(登录失败3次锁定300秒,参数可据实际情况设置)
且在配置文件 etc/profile 文件中添加 export TMOUT=600 (600秒不做操作后断开连接,参数可根据实际情况而定)
(3)更改默认的远程连接SSH服务端口 vim /etc/ssh/sshd_config,找到#Port 22一段,修改后重启服务
(4)禁止root用户远程连接 vim /etc/sudoers,设立新账户拥有root一样的权限
vim /etc/passwd,root那一行启动脚本/bin/bash改成/usr/sbin/nologin 关闭root启动
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config 关闭远程root连接
(5)优化内核参数,开启队列溢出用cookie处理、连接等待用于新的TCP连接、回收等待连接、修改系統默认的等待时间
系统中毒排查方法
(1)iftop 查看是否有外网连接的服务器流量剧增情况
(2)ss -nutlp 查看连接外网的 ip 和端口是否有问题
(3)last 查看最后一次登录的信息 who 谁登陆过
(4)top 找到CPU使用率高的进程,一般病毒文件命名会比较乱
(5)ps 查看是否有不明进程,找出病毒文件的位置
(6)rm -rf 删除病毒文件
netstat 是一个命令行工具,可以提供有关网络连接的信息。
此命令中使用的选项具有以下含义:
- -t-显示TCP端口。
- -u -显示UDP端口。
- -n -显示数字地址而不是解析主机。
- -l -仅显示监听端口。
- -p -显示侦听器进程的PID和名称。仅当你以root用户或 sudo 用户身份运行命令时,才会显示此信息
ss是新的netstat,它缺少netstat的某些功能,速度稍快
opsnstack
OpenStack是一个提供计算、网络、存储的云平台管理工具,通过身份认证给予用户权限,提供web端的可视化界面。
一套laas(基础设施服务)软件,管理“基础设施资源”,便于用户调用和使用,是OpenStack的首要任务。
通过众多的组件,实现资源的灵活运用,弹性增删资源。
核心组件:Nova(虚拟机管理)、Glance (镜像管理)、Cinder(块设备管理)
Neutron(网络管理)、Swift(存储NoSQL 数据库)、Keystone(身份验证)、Horizon组件(Web控制面)
云计算:是一个laas、paas、saas服务模式,整合资源(存储、计算、网络等,通过虚拟化手段实现)租给有需要的用户。
Iaas:基础设施服务,付费按需使用计算资源——服务器、网络、存储
paas:平台即服务,提供硬件和软件,开发人员可以便捷创建web应用——中间件
saas:软件即服务,基于云的应用,通过网络访问使用——百度网盘,钉钉
以盖房子为例,laas:挖地基搭框架;paas:毛胚房,墙壁窗户都有了;saas:精装修,拎包入住
虚拟化:将不可拆分的实体资源拆分成可以自由划分的逻辑资源,实现资源整合、再分配。云计算就是利用了虚拟化的特点。
公有云:大厂平台——干洗店
私有云:企业自己搭建——自家洗衣机
混合云:敏感数据——私有云——安全性高,应用程序——公有云——成本低
Cache:为了提高数据的读取速度,用于将频繁读取的内容放入缓存。(过期时间、命中率)
比如我们把经常用的数据从远处读取到一个离自己最近最快的缓存区后,这样再次使用这个数据,就可以直接从离自己最近最快的这个缓存区读取,提高性能。
CPU读取文件是要从内存来读取的,而且CPU的速度是远远高于内存的,那么如果每次CPU都从内存来读取显然是比较慢的。
于是CPU现在增加了缓存,一般服务器的CPU都支持三级缓存:
L1 Cache
L2 Cache
L3 Cache
Buffer:将数据写入到比自己相对慢的不是很多的中间区域就返回,然后最终再写入到目标地址,提高写入性能
内存的速度要比硬盘的速度快非常多,我们持久化的数据最终要保存到硬盘上。
但是硬盘又那么的慢,CPU要是等待数据完全写到硬盘上,那显然是不现实的。
所以会在内存设置一个缓冲区叫做“磁盘缓冲区”,更准确点称之为“内存的磁盘缓冲区”。
CPU把数据写入到“内存的磁盘缓冲区”之后就认为自己写完,然后转去做别的事情,而不用等数据最终写到硬盘。
然后linux有一个内核线程叫做pdflush,用来把缓存区的“相关”数据写入到磁盘。这显然提升了CPU处理的速度。
IDC(Internet Data Center)互联网数据中心
SDK,即Software Development Kit的缩写,译作软件开发工具包,辅助开发某一类软件的相关文档、范例和工具的集合都可以叫SDK。
API是前端调用后端数据的一个通道,就是我们俗说的接口,通过这个通道可以无需调用源代码直接访问到后端的数据。实现和其他软件组件的交互
而SDK相当于是一个开发者集成的环境,实现产品软件某项功能的工具包,SDK不仅提供开发环境,还提供很多API
API则是基于SDK之下的数据接口,要在SDK的环境之下调用API数据。
可以把SDK想象成一个虚拟的程序包,在这个程序包中有一份做好的软件功能,这份程序包几乎是全封闭的,只有一个小小接口可以联通外界,这个接口就是API
Windows系统自带PowerShell,收集日志、下载文件(类似linux种的wget)
Windows PowerShell 是一种命令行外壳程序和脚本环境,cmd是windows端的命令行窗口,powerShell就是cmd的增强版。
powershell curl -o "输出的文件名" "下载的url"
(linux 默认root,windows默认用户名Administrator,默认端口3389,修改了的话,远程要加上新的端口,win+r—mstsc)
"信创"理解就像它的字面意思,信息技术应用创新产业,旨在实现信息技术领域的自主可控,保障国家。
主打的是国产化软件替代,包括基础硬件,基础软件,应用软件,网络安全,云设施等。
一、腾讯云
- 不同地域之间的云产品默认不能通过内网通信。可以通过公网 IP 访问。
- 可用区是在同一地域内互相独立的数据中心。其目标是能够保证可用区间故障相互隔离不传染。
云服务器链接不上:端口、账号密码是否正确、root账户登录限制、安全组规则、登录次数限制
自定义镜像创建机器报错:自定义镜像里面含有其他的磁盘启动项,需要注销。
SSL证书:验证服务器身份、数据传输加密功能。
VPC 云上自定义的逻辑隔离网络空间, 子网是VPC内的一个IP地址范围
在VPC内可以创建多个子网,每个子网用于放置不同类型的实例,实例会从子网的IP地址范围内获取IP地址。
VPC就像是你在家里建立的一个独立的网络系统。比如一个办公室,你可以控制谁可以访问这个系统,谁不能。
子网 是在这个独立网络系统中进一步细分的小区域,比如办公室里有的是办公桌区,有的是会议室。每个区域都有自己的用途和规则
网络变慢了。第一件事情就是,netstat -a | grep TIME_WAIT | wc -l 一下,哎呀妈呀,几千个TIME_WAIT。
如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,
vim /etc/sysctl.conf
编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然后执行 /sbin/sysctl -p 让参数生效。
rp_filter参数用于控制系统是否开启对数据包源地址的校验
即rp_filter参数有三个值,0、1、2,具体含义:
0:不开启源地址校验。
1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。
2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包。
假设机器有两个网口,数据包发到了eth1网卡,如果这时候开启了rp_filter参数,并配置为1,则系统会严格校验数据包的反向路径。从路由表中可以看出,返回响应时数据包要从eth0网卡出,即请求数据包进的网卡和响应数据包出的网卡不是同一个网卡,这时候系统会判断该反向路径不是最佳路径,而直接丢弃该请求数据包。(业务进程也收不到该请求数据包)
修改/etc/sysctl.conf 配置文件可以达到永久生效的目的。然后执行 /sbin/sysctl -p 让参数生效。
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.eth1.rp_filter = 0
Shell
.bat #windows批处理脚本
.sh #linux的脚本文件
在Linux内核与用户之间的解释器程序,通常指 /bin/bash (bash优点:tab键、快捷键、历史命令、支持别名、管道、重定向),
#! /bin/bash 用bash解释器执行,负责向内核翻译及传达用户/程序指令。
编写规范:解释器、注释、指令
执行方式:(1)为脚本添加x权限后使用相对或者绝对路径执行 chmod u+x test01.sh ./test01.sh
(2)使用解释器执行,无需x权限 bash test01.sh
(3)使用source命令执行脚本,无需x权限 source test01.sh ( 在当前bash环境下读取并执行test01.sh中的命令)
重定向输出
> 重定向标准输出
2> 重定向错误输出
&> 重定向所有输出
&> /dev/null //将不需要的信息扔黑洞
变量: 自定义变量 , echo $a 调用变量时使用$符号、echo ${a}RMB 变量名与后续字符发生混淆时,使用大括号隔开;
定义:name="xxx" ,双引号""能识别特殊符号。单引号''不识别特殊语法。反引号``为命令执行结果
echo $name 区分大小写,可用数字、字母、下划线,不能用标点符号。
环境变量:由系统提前定义好,使用时直接调用 :echo $HOSTNAME,每个用户都有自己的环境变量配置文件,~/.bash_profile ~/.bashrc,且以个人配置文件优先加载变量,读取以个人的优先生效。
当需要给所有用户都使用某个变量,写入全局即可。/etc/profile
$0 脚本本身的名字
$1 执行脚本时后面第1个位置参数
$# 执行脚本时后面位置参数个数
$* 执行脚本时后面所有位置参数、
$$ 当前进程号
$? 判断上一条指令是否执行成功,0成功,非0失败
echo默认是换行输出,参数 -n(不换行输出) 举例 echo -n hello;echo hi
-e (解析特殊符号) + \n(换行) 举例 echo -e "echo \n hi"
" " 双引号, 界定范围
' ' 单引号,界定范围且屏蔽特殊符号,即便 $ 也视为普通字符
\ 是转义符号,可以屏蔽身后一个特殊符号的功能
反撇号 ,获取命令的执行结果,还可以使用$( )实现相同效果
$[ ] 运算,此运算本身就是一个结果 使用$(( )) 可以实现相同运算效果 echo $[22]
let命令:不输出结果,创建变量或者增减变量
let a=1+1 //创建变量 echo $a 输出
变量的自增减:
常规写法 主流写法
let a=a+1 let a++ 变量a加1
let a=a-1 let a-- 变量a减1
let a=a+10 let a+=10 变量a加10
let a=a-10 let a-=10 变量a减10
let a=a2 let a*=2 变量a乘以2
let a=a/2 let a/=2 变量a除以2
let a=a%3 let a%=3 变量a除以3取余数
符号:
[ "$a" == $b ] #如果变量为空,有可能报错,加双引号可以避免
-z 为空 、 == 两边相等 、 != 两边不等
当多个逻辑符号组合使用时,A && B #A、B任务都成功算成功 ; A || B #A、B 任务有一个成功算成功
-eq 是否相等、 -ne 是否不等 、-gt 是否大于 (e等于,g大于,l小于)、 -ge 是否大于等 于、 -lt 是否小于、 -le 是否小于等于
read指令:自定义提示信息
read -p "请输入用户名" u #-p 是可以定义提示信息,u 相当于自定义变量名称
stty -echo 屏蔽回显 、stty echo 恢复回显
if 分支:单、双、多分支;
case 分支:功能类似if,编写时语句比if精简
for 循环:可以定义循环次数
while 循环:可以根据条件决定循环次数,也可以实现无限循环
函数(避免代码重复,分割功能模块,可读性强)
循环:
exit 终止循环,脚本终止
break 终止循环,继续循环后的任务
continue 终止当前循环,继续下一次循环
字符串的处理
(1)字符串截取 ${变量名:截取位置:截取长度}
a=abcd 计算机从0位开始识别,a是0位 echo ${a:1:2} //从第二位截取两位
n=$[RANDOM%62] random是取随机数,后面的%62是指随机数的范围,得到0~61随机数存在变量n中
(2)字符串替换 ${变量名/旧/新} 特殊用法: echo ${a//2/6} 2个//表示将所有字符2换成6
(3)字符串删除 ${变量名#要删除的内容} 掐头: echo ${a#i} 精简写法,包括i本身也删除
${变量名%要删除的内容} 去尾: echo ${a%d*} 精简写法,包括d本身也删除
定义变量初值(备用值):当变量为空时,调用备用值 ${变量名:-初值}
seq 选项 起始值 结束值 结束值为小于1的负数、零、正小数,不会报错,但输出为空;结束值等于1,则输出为1
seq 1 2 10 #从1输出到10,中间间隔2,输出结果为1-3-5-7-9
创建100个用户并设置密码
#!/bin/bash
for i in {1..100}
do
useradd node $i
echo "123456" | passwd --stdin node$i
done
#!/bin/bash
read -p "请输入用户名" u
useradd $u
stty -echo
read -p "请输入密码" n
stty echo
echo "$n" | passwd --stdin $u
for i in 值1 值2 值3 # 此处变量名可以自定义,通常习惯用i,值的多少决定了下面do与done之间的任务执行多少次,每个值之间有空格,这里是有3个值,所以就循环执行指令3次
do
指令(指令可以嵌套 if 循环)
done
if 条件测试;then #满足条件的话就执行下面A指令
指令A
elif 条件测试;then #满足条件的话就执行下面B指令
指令B
elif 条件测试;then #满足条件的话就执行下面C指令
指令C
else #不满足条件的话就执行下面指令
指令
fi
#!/bin/bash
n=10
while [ $n -ge 5 ] #可以根据条件决定是否要循环
do
echo abc
sleep 0.1 #休息0.1秒(注意,要加sleep,否则耗尽cpu
let n-- #每次循环将n-1
Done
版权声明:本文标题:Linux:启动过程、基础命令、shell 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1733543072h1604901.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论