linux 学习1-常用命令/ssh登录/源包管理/常见问题

387 阅读20分钟

1.系统概念

已发行的版本

  • RedHat Enterprise Linux
  • Fedora
  • CentOS
  • Debian
  • Ubuntu

版本号

www.kernel.org/

  • 内核版本分为三个部分
  • 主版本号、次版本号、末版本号
  • 次版本号是奇数为开发版,偶数为稳定版

2.操作

2.1帮助命令

## man 帮助 是 manual 的缩写
man 
man ls
man # 也是一条命令,分为 9 章,可以使用 man 命令获得 man 的帮助
man 7 man # 指定第7页数
man 1 passwd # 指定第7页数

## help 帮助
# shell(命令解释器)自带的命令称为内部命令,其他的是外部命令
# 内部命令使用 help 帮助
help cd
# 外部命令使用help帮助
ls --help

# 通过type 可以查看是内部还是外部
type cd
type ls


## info 帮助
info 帮助比 help 更详细,作为 help 的补充
info ls

2.2文件管理


### 显示当前的目录名称
pwd # 显示当前的目录名称

### 文件查看 
ls # 查看当前目录下的文件
ls [选项,选项… ] 参数 … 
# 常用参数:
-l # 长格式显示文件
-a # 显示隐藏文件
-r # 逆序显示
-t # 按照时间顺序显示
-R # 递归显示
-d # 详情 包括权限

ls -lh # 显示文件大小m单位
ls -a # 显示隐藏文件
ls -l -t #按时间排序 列表显示
ls -ld /test #详情 查询单个文件的权限

ll --full-time #详情 完整的年月日

mkdir # 创建文件夹
mkdir a b c d e f # 创建多个文件夹
mkdir -p a/b/c/d # 没有则一直嵌套全部创建,如果子文件夹已经存储也不报错提示 

rmdir # 删除空目录 
rmdir a b c d e f # 删除多个文件夹
rm -r # 删除非空目录 但是会连续提示
rm -r -f # 删除非空目录 并且不提示

touch # 创建文件 
touch file1 file2 file3 file4#同时创建多个文件
rm -rf file* # 删除 匹配file开头的文件

### 复制文件
cp 复制文件和目录
cp [选项] 文件路径
cp [选项] 文件… 路径
常用参数
-r # 复制目录,包括里面文件
-p # 保留用户、权限、时间等文件属性
-d # 如果是软连接也复制
-a # 等同于 -dpr


### 移动文件
mv 移动文件
mv [选项] 源文件 目标文件 
mv [选项] 源文件 目录

### 删除文件
rm # 删除文件
-r # 删除目录(包括目录下的所有文件)
-f # 删除文件不进行提示
# 注意: rm 命令可以删除多个目录,需谨慎使用


## 通配符
- 定义:shell 内建的符号
- 用途:操作多个相似(有简单规律)的文件
## 常用通配符
* # 匹配任何字符串 # 匹配1个字符串 
[xyz] # 匹配xyz任意一个字符 
[a-z] # 匹配一个范围 
[!xyz] 或[^xyz] # 不匹配 

# 文本查看命令
# cat
cat # 文本内容显示到终端 concatenate 连接,从头开始
cat -n file # 添加行号显示 
cat -b file # 添加行号显示,忽略空白行


# 常用参数 
-f # 文件内容更新后,显示信息同步更新

# wc  统计文件内容信息
wc -l file # 统计又多少行
wc  file # 统计所有信息  行数 单词数  字节数

# head # 查看文件开头 
head -v # 显示文件名 
head -n 5 file # n=number  只看前5行 
head -5 file # 等价


# tail # 查看文件结尾
tail -v # 显示文件名 
tail -n 5 file # n=number 查看最后5行
tail -5 file # 等价
tail -5 -f file #  最后5行实时监控

# more 分页查询 只能从第1行+指定行
more -n 10 file # 一次显示多少条
more +3 file  # 从第三行开始  
space # 下一页
B #  上一页
q # 退出


# less  # 基于某一行开始,比more更灵活
less -n -m +50p access.log # 按50%的位置打开文件 并显示百分比

less -n file # 不计算行号 速度比较快
less -N  file # 行显示
less -m file # 显示百分比
less -i file # 搜索忽略大小写

less  +100 file # 显示百分比 显示
less  +50p -n file # 打开直接到50%的位置


space # 下一页
Ctrl+ B #  上一页
q # 退出
g # 滚动到顶部
G # 滚动到底部
v # 可以进入vi 编辑模式

# 跳转 +数字
less  +1000 -N  file # 从第1000行开始


# less搜索 
less -p mykey file  # 直接根据关键 mykey查询
less -m file  # 显示带百分比
less -n 100 file  # 一页显示多少数据

/ # 往下搜索
/abc # /反斜杠直接跟内容
/\[03/Mar/2023:14:27 # 当有特殊符号需要转义

? # 往前面搜索
n # 跳到下一个匹配的结果为准,如果用?查询,就是往上跳 
 

# 支持同时预览多个文件
less log2013.log log2014.log
n # 切换到 log2014.log
p # ,切换到log2013.log


# sed
# 直接取某一行
sed -n '10'p file 
# 指定范围
sed -n '10,20'p file 
# 指定开始到结束 
sed -n '10,$'p file 


# split 切割文件
split [选项]... [要切割的文件] [输出文件前缀]  // 输出文件前缀为可选项
# 按文件大小切割
split -b 200m access.log # 把access.log分成多个文件
split -b 200m access.log  access.log.sp # 指定切割后的文件名
split -b 200m -d access.log  access.log.sp # 指定切割后的文件名 并且 按数字显示
# 按行数切割
split -1000 log.txt # 按1000行来分割


# 1.查询nginx access.log大文件 
# 现在业务系统请求日志 查看 指定用户多条操作具体时间+方法
# 如: 最好选择一个时间点 只有一次操作
# nginx 默认格式
10.10.4.51 - - [06/Mar/2023:20:34:29 +0800] "POST /gst-project/bigStyleRecord/updateAll HTTP/1.1" 200 1056 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"

# 提取两个日志信息 
2023/3/6 20:34:29 updateAll
2023/3/7 09:29:57 getAll
# 由于日期是 06/Mar/2023:20:34:29 包含英语首字母,直接按 年/时/分/秒 + 方法过滤
grep -n '2023:20:34:29' access.log | grep 'updateAll'  
grep -n '2023:09:29:57' access.log | grep 'getAll' 
# 头部显示的 为 行号 : ip地址 
3721012:10.10.4.51 

# 2. 用less分页查询
less +3721012 -n access.log 
# 搜索ip这段时间的操作
/10.10.4.51  #  按 空格往下 ,b 往上, n 继续搜索下一个

# 提升速度可以先切割再grep + less 
split -b 200m -d access.log  access.log.sp
grep -n '2023:20:34:29' access.log | grep 'updateAll'  
less +xxxxx -n access.log 


# 其他方案
# 分割+百分比
split -b 200m -d access.log  access.log.sp 
# 再按百分比查询
less -m +57p  -n access.log.sp02  # 跳到57%的位置
 
# head + 组合
head -500000000 access.log | tail  -100
# sed
sed -n '500000000q;499999900,500000000p'  access.log
# awk
awk 'NR>=49999991 && NR<=50000000{print} NR==50000001{exit}' access.log
# 生成大文件测试
seq 1 1000000000 > access.log

2.3打包与压缩

Linux 的备份压缩

  • 最早的 Linux 备份介质是磁带,使用的命令是 tar
  • 可以打包后的磁带文件进行压缩储存,压缩的命令是 gzip(最快) 和 bzip2(适合大文件)
  • 经常使用的扩展名是 .tar.gz .tar.bz2 .tgz

打包与压缩命令

tar # 打包命令
# 常用参数
c # 打包 create
x # 解包 extract
f # 指定打包后的文件路径
v # 显示执行详细过程 verbose

tar -cvf jpg.tar *.jpg    #将目录里所有jpg文件打包成tar.jpg
 

### 压缩和解压缩
# 可以使用 gzip 和 bzip2 命令单独操作
# 通常和 tar 命令配合操作
# 常用参数
-z gzip # 格式压缩和解压缩
-j bzip2 # 格式压缩和解压缩
 
tar -czvf jpg.tar.gz *.jpg   #将目录里所有jpg文件打包成jpg.tar后,再用gzip压缩,生成jpg.tar.gz
tar -xzvf jpg.tar.gz   #解包+解压

# 切割压缩包
split -b 10m -d file.tar.gz  file.tar.gz 
# 生成
file.tar.gz0
file.tar.gz1
file.tar.gz2
# 合并文件
cat file.tar.gz* > file.tar.gz
# 解压文件
tar  -xzvf file.tar.gz

2.4文本编辑器vim

## 多模式文本编辑器
### 正常模式 (Normal-mode)   


# 光标移动:
 h,j,k,l 或上下左右  # 可通过进行光标的移动
gg # 光标移动到首行:
G # 移动到末行:
行号 G # 如 150 G # 移动到固定行
^ # 定位到行首
$ # 定位到行尾

# 复制粘贴:
yy # 复制当前行
n yy 如:3 yy # 复制多行
p # 粘贴:
dd # 剪切当前行
n dd,如:5 dd,剪切 5 行 # 剪切多行

u # 撤销
ctrl + r # 重做

x # 删除单个字符
r # 替换单个字符  



### 插入模式 (Insert-mode) 
i # 当前位置
I # 开头
a #当前下一个
A #末尾开始
o # 当前下一行
O # 当前上一行



### 命令模式 (Command-mode) # 进入命令模式 
esc # 从其他模式回到正常模式
:w # 写入
:q # 退出
:!q # 强行退出,修改过的内容不要了
:s # 替换
:s/old/new # 替换单个
:%s/old/new/g # 全局 替换
:行1,行2 s/old/new/g # 指定行替换
/ # 查找 /查找的目标字符,向下移动 n 
:set # 设置命令
:set nu # 显示行号 :set number
:set nu! # 取消显示行号  :set nonumber
:set hlsearch # 高亮
:set nohlsearch # 不高亮


:! # 执行 Shell 命令
:!ifconfig # 查看当前ip信息
:!ls /root/ # 查看某些文件夹内容


### 可视模式 (Visual-mode) 块操作 vim才好支持
# 三种进入可视模式的方式 
v # 字符可视模式
V # 行可视模式
ctrl+v # 块可视模式
esc # 从其他模式回到正常模式
配合 d 和 I(大写 i ) # 命令可以进行块的便利操作 大写I 是 shift+i

2.5用户与权限管理

多用户操作系统

  • 多用户操作系统的目的是隔离
  • 用户权限隔离
  • 系统资源隔离
  • root 用户与普通用户的区别

### 用户管理常用命令
useradd 
useradd jason # 新建用户
id jason  # 查看用户
ls -a /home/jason # 自动在home下创建jason文件夹 
# .bash_logout  .bash_profile  .bashrc 自动创建这3个文件
tail -10 /etc/passwd # 新建用户会加入到末尾
#jason:x:1002:1002::/home/jason:/bin/bash
tail -10 /etc/shadow # 新建用户会加入到末尾
# jason:!!:19418:0:99999:7:::
 
passwd jason # 修改用户密码


userdel jason # 删除用户 上面对应创建的内容也会删除

usermod # 修改用户属性
useradd user1 # 新建用户
groupadd group1 # 新建用户组
usermod -g group1 user1
su user1
cd /root # 提示没有权限

chage # 修改用户属性 
groupdel # 删除用户组 
### 用户切换
### 用户配置文件
/root root # 用户的家目录
/home/USERNAME # 普通用户默认家目录位置
/etc/passwd # 用户配置文件
/etc/shadow # 用户密码相关配置文件
/etc/group # 用户组配置文件


# sudo 权限配置
vi /etc/sudoers # 等价于 visudo


# 例子
# 终端1 root 
shutdown -h 30 # 30分钟后自动关机 
# 通过设置 visudo 给用户user1 权限 取消关机
visudo # 进去配置
user1 ALL=/sbin/shutdown -c 

# 终端2  登录user1 
sudo /sbin/shutdown -c # 输入自己的密码 成功取消关机



# 查找命令的路径
which shutdown

文件权限的表示方法


# 权限组成
- r w - - - - - - - 1 root root 1523 sep 28 12:05 anaconda-ks.cfg
类型 权限             所属⽤用户和组                 文件名

# 文件类型
- 普通⽂文件
d ⽬目录⽂文件
b 块特殊⽂文件
c 字符特殊⽂文件
l 符号链接
f 命名管道
s 套接字⽂文件

# 用户类型
u:User,# 即文件或目录的拥有者
g:Group,# 即文件或目录的所属群组
o:Other,# 除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围
a:All,# 即全部的用户,包含拥有者,所属群组以及其他用户

# 字符权限表示方法
r # 读
w # 写
x # 执行

# 数字权限的表示方法
r = 4 
w = 2
x = 1
rw- r-x r- - 1 userame groupname mtime filename
rw- # 文件属主的权限
r-x # 文件属组的权限 
r- - # 其他用户的权限


mkdir /test1 # 创建默认跟当前用户
ls -ld /test1 # 查看权限
chown user1 /test1 # 设置用户权限
chown :group1 /test1 # 设置用户组权限

ctrl + r  # 可以搜索之前的输入的命令内容

# 创建文件有默认权限,根据 umask 值计算

### 目录权限的表示方法
x # 进入目录
rx # 显示目录内的文件名
wx # 修改目录内的文件名

### 修改权限命令
chmod # 修改文件、目录权限
chown # 更改属主、属组
chgrp # 可以单独更改属组,不常用

# 例子
touch afile
ls -l afile
chmod u+x afile # 给用户权限
chmod u+x afile # 给用户组权限
ls -l afile
chmod o=w afile # 其他权限
ls -l afile
chmod a+r afile
chmod 446 afile


# 所有用户设置 下面两者是等价的
chmod ugo+r file1.txt 
chmod a+r file1.txt

# 验证权限
echo 'xx' > aa # root
su user1
echo 'yy' > aa # 写入失败
su root # 切换管理员
chmod a+w aa # 设置写入权限
su user1
echo 'yy' > aa # 写入成功
cat aa # 读取失败
su root # 切换管理员
chmod a+w aa # 设置读取权限
su user1
cat aa # 读取成功


### 特殊权限
SUID # 用于二进制可执行文件,执行命令时取得文件属主权限
SGID # 用于目录,在该目录下创建新的文件和目录,权限自动更改为该目录的属组
SBIT # 用于目录,该目录下新建的文件和目录,仅 root 和自己可以删除

ls -l /etc/shadow
#---------- 1 root root 864 Mar  2 14:41 /etc/shadow
ls -l /etc/passwd
#-rw-r--r-- 1 root root 1223 Mar  2 14:42 /etc/passwd
ls -l /tmp
#drwx------ 2 root root 25 Mar  2 15:41 ssh-6PP3opCHhi





### 第一次登录
- 多用户
- 普通用户
- root 用户

### 终端的使用
- 终端
- 图形终端
- 命令行终端
- 远程终端(SSH 、VNC)

### 常见目录介绍
/ # 根目录
/root root # 用户的家目录
/home/username # 普通用户的家目录
/etc # 配置文件目录
/bin # 命令目录
/sbin # 管理命令目录
/usr/bin /usr/sbin # 系统预装的其他命令 

3.服务管理

3.1软件安装

系统分类

1. debian系

  • Debian
  • Ubuntu
  • Mint 使用 :apt-get/dpkg 安装

2. redhat系

  • RedHat:提供服务收费
  • Fedora
  • CentOs :稳定的服务器 使用 yum 安装,也支持默认的apt-get/dpkg

软件包管理器

  • 包管理器是⽅便软件安装、卸载,解决软件依赖关系的重要⼯具
  • CentOS、RedHat 使⽤ yum 包管理器,软件安装包格式为 rpm
  • Debian、Ubuntu 使⽤ apt 包管理器,软件安装包格式为 deb

修改源

1.debain/ubuntu

系统都使用apt-get管理

主要修改 /etc/apt/sources.list

方法1
备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

sudo vim /etc/apt/sources.list

#从下面 第三方源中 复制到当前sources.list 里面 
# 这里以ubuntu 20.04(focal)  为例 适用于 laradock 对应的workspace 镜像
deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

# deb https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

# 更新源
sudo apt-get update # 或者sudo apt-get upgrade
方法2
备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
 
# 一般变化的只是 archive.ubuntu.com  这个内容 用正则替换即可 
sudo sed -i 's@//.*archive.ubuntu.com@//mirrors.aliyun.com@g' /etc/apt/sources.list

# 更新源
sudo apt-get update # 或者sudo apt-get upgrade

2.centOS

使用yum 管理软件包,需要调整 yum源和epel源(部分软件才需要用到epel源)

1. 修改 yum源

修改 /etc/yum.repos.d/CentOS-Base.repo

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
2.修改epel (centOS 7)

修改 /etc/yum.repos.d/epel.repo

# 备份
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup 
# 下载
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo 

3.yum-config-manager 统一管理

#安装
yum search yum-config-manager
yum install yum-utils -y
# 显示所有资源库
yum repolist all 
# 显示所有已启动的资源库
yum repolist enabled
# 显示所有被禁用的资源库
yum repolist disabled
# 添加repository: 
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 

4.好用的第三方源

阿里

debian

developer.aliyun.com/mirror/debi…

ubuntu 20.04(focal)

developer.aliyun.com/mirror/ubun…

centos7:

developer.aliyun.com/mirror/cent…

网易

debian

mirrors.163.com/.help/debia…

ubuntu 20.04(focal)

mirrors.163.com/.help/ubunt…

centos7:

mirrors.163.com/.help/cento…

中科大

debian

mirrors.ustc.edu.cn/help/debian…

ubuntu 20.04(focal)

mirrors.163.com/.help/ubunt…

centos

mirrors.ustc.edu.cn/help/centos…

5.修改centOS 完整命令

# 备份源
mv ./CentOS-Base.repo ./CentOS-Base.repo.bak  
# 下载阿里的源文件并重命名
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 下载对应的epel.repo
wget  -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 运行yum makecache生成缓存
# 清缓存
yum clean all
# 生成缓存
yum makecache
# 更新系统
yum -y update

install # 安装软件包
remove # 卸载软件包
list| grouplist # 查看软件包
update # 升级软件包

6.rpm 包

  • rpm 包格式
  • vim-common-7.4.10-5.el7.x86_64.rpm
  • 软件名称 软件版本 系统版本 平台
## rpm 命令
rpm # 命令常⽤参数
-q # 查询软件包
-i # 安装软件包
-e # 卸载软件包

rpm -qa # 查询已安装
rpm -qa | more # 分页
rpm -q vim-common # 查看指定版本
# 进入指定的文件夹,并执行 rpm -i 安装
rpm -i vim-enhanced-7.4.160-5.el7.x86_64.rpm # 查看是否已安装的
# 删除包
rpm -e vim-enhanced

7.⼆进制安装

# ⼆进制安装
wget https://openresty.org/download/openresty-1.15.8.1.tar.gz
tar -zxf openresty-VERSION.tar.gz
cd openresty-VERSION/
./configure --prefix=/usr/local/openresty
make -j2
make install

3.2.升级内核

## 升级内核
rpm 格式内核
# 查看内核版本
uname –r
# 
yum install epel-release-y
# 升级内核版本
yum install kernel-3.10.0
# 升级已安装的其他软件包和补丁
yum update

## 源代码编译安装内核
# 安装依赖包
yum install gcc gcc-c++ make ncurses-devel openssl-devel elfutils-libelf-devel
# 下载并解压缩内核
https://www.kernel.org
tar xvf linux-5.1.10.tar.xz -C /usr/src/kernels
## 源代码编译安装内核
# 配置内核编译参数
cd /usr/src/kernels/linux-5.1.10/
make menuconfig | allyesconfig | allnoconfig
# 使⽤当前系统内核配置
cp /boot/config-kernelversion.platform /usr/src/kernels/linux-5.1.10/.config

# 源代码编译安装内核
# 查看 CPU
lscpu
# 编译
make -j2 all
# 安装内核
make modules_install
make install

3.3启动引导

# grub2 centOS7
# 操作系统启动程序 
# 先配置临时文件
vi /etc/default/grub  

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved # 默认引导的内核 saved对应的  grub2-editenv list 命令值
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet" # quiet 静默启动只打印必要信息,如果出现异常可以去会打印更详细信息,rhgb 图形界面 ,去掉也会打印更详细信息
GRUB_DISABLE_RECOVERY="true"

#  查看 引导的内核信息
grub2-editenv list

# 查看所有支持引导的 内核信息
grep ^menu /boot/grub2/grub.cfg
# menuentry 'CentOS Linux (3.10.0-1160.83.1.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-957.el7.x86_64-advanced-32f2b4da-5a45-45f3-a69f-b4083341f8a4' {
# menuentry 'CentOS Linux (3.10.0-1160.80.1.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-957.el7.x86_64-advanced-32f2b4da-5a45-45f3-a69f-b4083341f8a4' {

# 设置引导版本 
grub2-set-default 0

menuentry 'CentOS Linux (3.10.0-1160.83.1.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-957.el7.x86_64-advanced-32f2b4da-5a45-45f3-a69f-b4083341f8a4' {
menuentry 'CentOS Linux (3.10.0-1160.80.1.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-957.el7.x86_64-advanced-32f2b4da-5a45-45f3-a69f-b4083341f8a4' {
menuentry 'CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-957.el7.x86_64-advanced-32f2b4da-5a45-45f3-a69f-b4083341f8a4' {
menuentry 'CentOS Linux (0-rescue-edd5dde9612f4c6e9371965107ffc154) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-edd5dde9612f4c6e9371965107ffc154-advanced-32f2b4da-5a45-45f3-a69f-b4083341f8a4' {


/etc/grub.d/ # 更详细的grub文件
# 最终写入的文件
/boot/grub2/grub.cfg 
 # 最终通过命令把临时文件写入实际配置
grub2-mkconfig -o /boot/grub2/grub.cfg

# 默认加载配置
ls /etc/grub.d/
#  查看 引导的内核信息
grub2-editenv list

3.4 系统管理⼯具 systemctl

  • 服务(提供常⻅功能的守护进程)集中管理⼯具

# service
/etc/init.d/ # 所有的service 服务都写在这里

chkconfig--list
# jexec           0:off   1:on    2:on    3:on    4:on    5:on    6:off
# netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
# network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
init 0 #关机
init 3 #字符终端多用户模式
init 5 #图形化界面模式
init 6 #重启

# systemctl
/usr/lib/systemd/system/ # 所有的systemctl 服务都写在这里
systemctl start | stop | restart | status | reload | enable | disable 服务名称

enable # 开机自动启动
disable  # 开机不自动启动
systemctl start sshd.service # .service可以省略 

# # systemctl书写格式
[Unit]
Requires = 新的依赖服务
After = 新的依赖服务  # 如: After=network.target sshd-keygen.service my.service
[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D SOPTIONS # 对应 start 命令
ExecReload=/bin/kill -HUP SMAINPID   # 对应 reload 命令
KillMode=process
Restart=on-failure  # 对应 Restart 命令
RestartSec=42s
[Install]

# 默认启动级别
cd /lib/systemd/system/
xx.target # 描述的启动级别
# 一般格式为 7位级别
[Unit]
Description=Sockets
Documentation=man:systemd.special(7)

# 查看运行的系统默认运行的 taget
ls -l runlevel*target
# lrwxrwxrwx 1 root root 15 Dec 19 14:37 runlevel0.target -> poweroff.target
# lrwxrwxrwx 1 root root 13 Dec 19 14:37 runlevel1.target -> rescue.target
# lrwxrwxrwx 1 root root 17 Dec 19 14:37 runlevel2.target -> multi-user.target
# lrwxrwxrwx 1 root root 17 Dec 19 14:37 runlevel3.target -> multi-user.target
# lrwxrwxrwx 1 root root 17 Dec 19 14:37 runlevel4.target -> multi-user.target
# lrwxrwxrwx 1 root root 16 Dec 19 14:37 runlevel5.target -> graphical.target
# lrwxrwxrwx 1 root root 13 Dec 19 14:37 runlevel6.target -> reboot.target

# 获取当前运行的级别
systemctl get-default 
# multi-user.target 当前为 多用户级别
systemctl set-default graphical.target # 设置图形级别
reboot # 重启查看效果

3.5 SELinux

SELinux 是linux安全增强功能

  • DAC(⾃主访问控制) :用户自己用账号密码管理
  • MAC(强制访问控制) 进程,用户 文件 打上标签,三者必须一致一个类型才允许访问,SELinux属于这种
# 查看 SELinux 的命令
getenforce
/usr/sbin/sestatus

ps -Z  # 会多一个label标签 提示SELinux信息
ls -Z 
id -Z
# 关闭 SELinux
setenforce 0

vi /etc/selinux/config
SELINUX=disabled

3.5使⽤单⽤户进⼊系统(忘记 root 密码)

# 不支持云主机
1. 启动时候 选择系统版本时,按e键进入,选择linux16 xxx
2. 在末尾添加 (centOS6)用 single ,  (centOS7)用 rd.break
3. ctrl+x 启动
4. ls /sysroot #  系统挂载的根,真正的根
   ls / # 目前内存的虚拟的临时根,不会保存
5. mount -o remount,rw /sysroot # 重新挂载真的根
6. chroot /sysroot 
7. echo 123456 | passwd --stdin root # 等价于 执行了 passwd root ,然后输入了 123456的密码
8. 关闭 SELinux 
vi /etc/selinux/config
SELINUX=disabled
9. exit # 这时不能使用reboot重启,需要退出回到虚拟root
10. 退出后再重启reboot


# 其他重置SELinux的关键点
genhomedircon # 重新生成SELinux 序号
touch /.autorelabel # 重新创建 引导信息

3.6 SSH 服务

## SSH 服务配置文件
# sshd_config
vim /etc/ssh/sshd_config

HostKey /etc/ssh/ssh_host_rsa_key # 默认读取的私钥路径
#Port 22 # 默认端口22 
#PermitTTY yes
#PermitUserEnvironment no
#PermitTTY no
PermitRootLogin yes # 是否允许 root 登陆

# 免密存放路径
AuthorizedKeysFile .ssh/authorized_keys

# 查看当前 22 端口的开放情况
netstat -ntpl | grep 22
# 远程登录 指定端口
ssh -p 2222 root@xx.xx.xx.xx  


## SSH 命令
systemctl status | start | stop | restart | enable | disable sshd.service
 
SecureCRT
Xshell
putty

#例子1
# 安装远程工具
 yum install telnet telnet-server xinetd tcpdump wireshark wireshark-gnome -y
systemctl start xinetd 
systemctl start telnet.socket
rpm -ql telnet-server
ifconfig eth0
grep telnet /etc/services

useradd user1 # 创建用户 
passwd user1  # 设置密码 12345678

# 测试本地登录 
telnet localhost 
telnet 171.35.40.74 # 默认是23端口,不用输入
# 输入 user1 用户
# 输入 user1 密码 12345678
# 常用命令
ctrl + ] # 退出
quit # telnet 命令中 退出
exit # 直接退出


# 添加端口
iptables -I INPUT -p tcp --dport 23 -j ACCEPT
iptables -vnL
firewall-cmd --permanent --add-port=23/tcp
firewall-cmd --list-all
# 验证端口
iptables -vnL | grep 23
# 写入记录
tcpdump -i any port 23 -s 1500 -w /root/a.dump 

# 另外开一个终端 登录telnet
# 安装 wireshark图形抓包分析包日志
yum install wireshark-gnome
#  查看生成的tcp配置 /root/a.dump 发现用户名和密码是明文保存


## SSH 公钥认证
# 密钥认证原理
ssh-keygen -t rsa # 本地生成公钥和私钥

# 生成路径
cd ~/.ssh/ 
ls ~/.ssh/ 
authorized_keys  # 记录别人的公钥 (别人连我)
id_rsa  # 本地私钥
id_rsa.pub # 本地公钥
known_hosts # 用于记录公钥,防止被篡改

ssh-copy-id  root@xx.xx.xx.xx # 输入密码后。会把本地的公钥上传到 指定服务器上
## scp 和 sftp 远程拷贝
# scp
scp /tmp/a.txt  root@xx.xx.xx.xx:/tmp/  # 把本地的   /tmp/a.txt 上传到 xx.xx.xx.xx的 /tmp/文件夹下

# sftp
系统自带 internal-sftp 服务

# winscp
window用户可以使用winscp 连接linux电脑

修改centOS 系统连接超时

#修改 sshd_config 和 /etc/profile 两个配置文件
vim /etc/ssh/sshd_config
#打开下面两个开关
ClientAliveInterval 30
ClientAliveCountMax 3
systemctl restart sshd


vi /etc/profile
export TMOUT=86400 #设置一个大值
source /etc/profile

mac远程密钥登陆

#1.生成私钥和公钥
ssh-keygen
# 一直回车
#生成的文件夹地址
/Users/jason_pro/.ssh

#私钥
/Users/jason_pro/.ssh/id_rsa
#公钥 用于上传的要登陆的服务器
/Users/jason_pro/.ssh/id_rsa.pub

#把公钥上传的服务器上,需要输入密码 ,不能直接在scp上直接输入密码,建议使用ssh提前授权登陆。
# :/root 为远程的服务器地址
scp ~/.ssh/id_rsa.pub root@xx.xx.xx.xxx:/root
#先密码远程登陆,然把上传的密钥添加到 服务器的信任列表authorized_keys里面
cat id_rsa.pub >> ~/.ssh/authorized_keys

#centOS ssh配置
#创建authorized_keys存储公钥   # 注意 一般都是在 root 文件夹下的.ssh
touch /root/.ssh/authorized_keys      

#把本地电脑的公钥写入authorized_key
cat id_rsa.pub > authorized_keys

#修改权限
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

#修改/etc/ssh/sshd_config
RSAAuthentication yes # 开启密钥登入的认证方式
PubkeyAuthentication yes # 开启密钥登入的认证方式
PasswordAuthentication no #禁用密码登陆

#重启ssh服务
systemctl restart sshd.service

最快的方式

# A服务器
# 生成公钥和私钥 ,提示一直回车即可
ssh-keygen -t rsa 
# 得到下面两个内容, 如果~/.ssh目录一下已经有就不用再生成
id_rsa  id_rsa.pub

# 发送id_rsa.pub 到node节点服务器上
ssh-copy-id root@xx.xx.xx.xx
# 输入密码即可实现免密
# 在B服务器上,~/.ssh就会在  authorized_keys 文件追加id_rsa.pub 信息

4.查看电脑硬件配置

#系统

uname -a               # 查看内核/操作系统/CPU信息
head -n 1 /etc/issue   # 查看操作系统版本
cat /proc/cpuinfo      # 查看CPU信息
hostname               # 查看计算机名
lspci -tv              # 列出所有PCI设备
lsusb -tv              # 列出所有USB设备
lsmod                  # 列出加载的内核模块
env                    # 查看环境变量

# 查看物理CPU个数
cat /proc/cpuinfo | grep "physical id" | sort | uniq
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo | grep "cpu cores" | uniq

#资源
free -m                # 查看内存使用量和交换区使用量
df -h                  # 查看各分区使用情况
du -sh <目录名>        # 查看指定目录的大小
grep MemTotal /proc/meminfo   # 查看内存总量
grep MemFree /proc/meminfo    # 查看空闲内存量
uptime                 # 查看系统运行时间、用户数、负载
cat /proc/loadavg      # 查看系统负载

#磁盘和分区
mount | column -t      # 查看挂接的分区状态
fdisk -l               # 查看所有分区
swapon -s              # 查看所有交换分区
hdparm -i /dev/hda     # 查看磁盘参数(仅适用于IDE设备)
dmesg | grep IDE       # 查看启动时IDE设备检测状况

网络

ifconfig               # 查看所有网络接口的属性
iptables -L            # 查看防火墙设置
route -n               # 查看路由表
netstat -lntp          # 查看所有监听端口
netstat -antp          # 查看所有已经建立的连接
netstat -s             # 查看网络统计信息

##进程
ps -ef                 # 查看所有进程
top                    # 实时显示进程状态

#用户
w                      # 查看活动用户
id <用户名>            # 查看指定用户信息
last                   # 查看用户登录日志
cut -d: -f1 /etc/passwd   # 查看系统所有用户
cut -d: -f1 /etc/group    # 查看系统所有组
crontab -l             # 查看当前用户的计划任务

#服务
chkconfig --list       # 列出所有系统服务
chkconfig --list | grep on    # 列出所有启动的系统服务

#程序
rpm -qa                # 查看所有安装的软件包 

5. 常见问题

1.每次执行命令都多一行mail提示

You have mail in /var/spool/mail/root

echo "unset MAILCHECK" >> /etc/profile # 设置不打开
source /etc/profile

参考

time.geekbang.org/course/intr…