Linux背景介绍
linux
有两种含义:
- 一种是
linus
编写的开源操作系统的内核 - 另一种是广义的操作系统
执行环境:
- 云主机
- 无数据的
pc
(不推荐多系统混跑) - 虚拟机(推荐方式)
linux
版本(分别与两种含义相对应):
- 内核版本
- https://www.kernel.org/
- 内核版本分为三个部分
- 版本号、次版本号、末版本号
- 次版本号是奇数为开发版,偶数为稳定版(
stable
)
- 发型版本
- 比如:
Red Hat
- 比如:
Ubantu
(图形化操作界面)
- 比如:
系统操作
推荐使用虚拟机virtualBox
进行安装
终端:
- 图形终端
- 命令行终端
- 远程终端(
SSH
、VNC
)
常见目录结构:
/
根目录/root
root
用户的根目录/etc
配置文件目录/bin
命令目录/sbin
管理命令目录/usr/bin /usr/sbin
系统预装的其他命令
ls
命令
作用:查看指定目录下的所有文件
语法:ls
[具体的目录]
终端切换及关机
init 3
: 切换为命令行终端init 0
: 关机命令
万能的帮助命令:
- 为什么要学习帮助命令
man
帮助man
是manual
的缩写man
帮助用法演示man
ls
man
也是一条命令,分为9
章,可以使用man
命令获取man
的帮助man 7 man
Commands
用户可从shell
运行的命令System calls
必须由内核完成的功能library calls
大多数libc
函数,例如qsort(3)
Special files
/dev
目录中的文件File formats and conventions
/etc/passwd
等人类可读的文件的格式说明Games
Macro packages and conventions
文件系统标准描述,网络协议,ASCII
和其他字符集,还有你眼前这份文档以及其他东西
help
帮助shell
(命令解释器)自带的命令称为内部命令,其他的是外部命令- 内部命令使用
help
帮助help cd
- 外部命令使用
help
帮助ls --help
info
帮助info
帮助比help
更详细,作为help
的补充info ls
- 使用网络资源(搜索引擎和官方文档)
man ls # 列出目录内容
q # 按 q 键退出命令行终端
man man # 格式化并显示在线帮助手册页(General Commands Manual)
# 如果想查看passwd命令的帮助,就查看章节1
man passwd
# 如果想查看passwd配置文件的帮助,就查看章节5
man 5 passwd
# 如果只是想查看‘passwd’关键字,但是不知道是命令还是配置文件的帮助时
man -a passwd
# 使用type命令可以查看指定的命令是属于什么类型的命令
type cd
-> cd 是 shell 内嵌
# 获取命令的帮助信息(想要查看shell内置命令时用help)
help [命令]
一切皆文件
- 文件查看
pwd
: 显示当前的目录名称cd
: 更改当前的操作目录(相对或解决路径)ls
: 查看当前目录下的文件-l
长格式显示文件(更详细的文件内容)-a
显示隐藏文件-r
以文件名逆序显示-t
按照时间顺序显示-R
递归显示-h
以人类能看懂的单位进行显示
- 目录文件的创建与删除
mkdir
: 建立一个空的目录- 将多个目录用空格隔开:一次性创建多个文件夹
-p
: 创建多级目录(如果目标目录下已经有同样名字的文件夹,会直接忽略)mkdir -p /a/b/c/d
rmdir
: 删除目录(只能删除空白目录)rm
: 删除文件-r
: 删除多个目录(即使目录是非空的)-f
: 删除目录但是不进行提示
- 文件的创建、复制
cp
:cp [要复制的文件] [目标地址]
-r
: 如果要复制文件夹则要加此参数-v
: 显示复制的过程,因为在linux
中复制是没有进度条的-p
: 保留文件的修改时间-a
: 既想保留文件的权限,又想保留文件的属主,还想保留文件的修改时间
touch
: 创建文件mv
(移动或重命名文件):- 格式:
mv (参数) [原文件] [目标文件]
- 格式:
- 通配符
- 文件操作
- 文本内容查看
cat
: 文本内容显示到终端- cat命令是将所有信息都一次性显示出来,如果文件内容过长的话,查看的体验就会很不好
head
: 查看文件开头head [文件]
: 查看文件开头的10行(默认10行)head -5 [文件]
: 查看文件开头的5行
tail
: 查看文件结尾tail [文件]
: 查看文件结尾的10行(默认10行)tail -3 [文件]
: 查看文件结尾的3行- 常用参数 :
-f
文件内容更新后,显示信息同步更新
wc
: 统计文件内容信息less
more
文件打包与解压缩
tar
:tar [参数] [目标文件] [要打包的目录或文件]
c
: 打包f
: 产出是文件z
: 通过gzip
指令处理备份文件j
: 通过bzip2
指令处理备份文件x
: 解包-C
: 目标目录
gzip
- 速度更快
bzip2
- 压缩率更高
- 提示:
tar
命令已经将gzip
和bzip2
集成,可以直接使用tar
命令进行压缩与解压缩
linux
的备份压缩:
- 最早的
linux
备份介质是磁带,使用的命令是tar - 可以打包后的磁带文件进行压缩存储,压缩的命令是
gzip
和bzip2
- 经常使用的扩展名是
.tar.gz
,.tar.bz2
,.tgz
文本操作
多模式文本操作
- 多模式产生的原因
- 四种模式
- 正常模式(
Normal-mode
) - 插入模式(
Insert-mode
) - 命令模式(
Command-mode
) - 可视模式(
Visual-mode
)
- 正常模式(
正常模式与插入模式
x
删除当前字符r
字符替换。先按r
键,然后再敲想要替换后的字符i
当前位置进入编辑模式I
当前位置所在行的开头进入编辑模式a
当前位置的下一个字符的位置进入编辑模式A
当前位置所在行的结尾进入编辑模式o
当前位置所在行与下一行中间插入一行,并在插入行进入编辑模式O
当前位置所在行与上一行中间插入一行,并在插入行进入编辑模式esc
退出编辑模式,返回到命令模式h
向左移动j
k
l
向右移动yy
复制文本- 只输入
yy
,复制当前整行,没有任何提示 - [数字]
yy
,从当前行开始计算,复制[数字]行。左下角会有提示
- 只输入
y$
从当前位置开始复制到当前行的结尾dd
剪切命令,命令格式与yy
一样p
粘贴文本u
撤销ctrl + r
恢复一次撤销的指令:set nu
显示文本行标- 移动至指定行: 先敲行数,然后按
G
- 移动至当前行开头:
shift + 6
- 移动至当前行结尾:
shift + 4
命令模式
:w
[文件] ->保存至指定的文件:q
-> 退出当前正在操作的文件- 以上两个命令可以联合一起使用
:!
-> 在操作文件的同时,可以执行其他命令做其他操作,做完再回到文件中继续操作- /[关键字] -> 查找关键字(会高亮显示)
:s
替换单个字符(只能在光标所在行进行查找并替换)%s
替换单个字符(可以在全文进行搜索查找并替换)- 语法 ->
:%s/old/new
- 如果想要对文件中的所有的指定字符进行统一替换,可以使用
g
(global
)进行全局操作 - 语法 ->
:%s/old/new/g
:set nohlsearch
-> 取消高亮显示set
只能对单次生效,退出文件操作再次进入操作时就不生效了
可视模式
三种进入可视模式的方式
v
字符可视模式V
行可视模式ctrl+v
块可视模式- 配合
d
和I
(大写i)命令可以进行块的便利操作
- 配合
用户与权限管理
用户管理常用命令
useradd
新建用户userdel
删除用户-r
: 彻底删除用户
passwd
修改用户密码usermod
修改用户属性- 语法:
usermod -d [目标目录] [用户]
- 参数:
-a
: 将用户添加到附加组,只能和-G
选项一起使用-c
: 密码文件中注释字段的新值,通常使用chfn(1)
对其进行修改-d
: 用户的新登录目录-e
: 用户账户将被禁用的日期-g
: 将用户添加到用户组usermod -g [组] [用户]
- 语法:
chage
更改用户密码过期信息
用户切换
su
切换用户su - USERNAME
使用login shell
方式切换用户
sudo
以其他用户身份执行命令visudo
设置需要使用sudo
的用户(组)
shutdown
-h
[时间/m] -> 指定时间之后自动关机-c
-> 强制取消自动关机
重要的配置文件:
/etc/passwd
(字段解释,对应配置文件中7个位置,每个字段以英文状态下的冒号隔开)- 用户昵称
- 该用户是否需要使用密码进行验证
- 用户的
uid
用户的id
信息(不能随意进行更改) - 用户的
gid
用户是属于哪个组的 - 注释
- 该用户的家目录是在哪个位置
- 用户登录的命令解释器
/etc/shadow
保存用户与用户密码相关信息的- 用户昵称
- 用户加密过的密码
/etc/group
用户组相关的信息- 组的名称
- 该组是否需要密码验证
- 组的
gid
- 其他组设置
组管理命令
groupadd
: 新建用户组groupdel
: 删除用户组
查看文件权限的方法
- 查看文件权限
-rw------- 1 root root 1523 sep 28 12:05 test.txt
- 类型 权限 所属用户和组 文件名
- (权限的前三位表示文件所属用户可以操作的权限,中间三位党代表文件所属用户组,后三位表示除了当前用户和用户组之外其他人可以操作的权限)
文件类型:
-
: 普通类型d
: 目录文件b
: 块特殊文件c
: 字符特殊文件l
: 符号文件f
: 命名管道s
: 套接字文件
文件权限的表示方法
- 字符权限表示方法
r
: 读w
: 写x
: 执行
- 数字权限的表示方法
r = 4
w = 2
x = 1
-rw-==r-x==r-- 1 username groupname mtime filename
rw-
文件属主的权限r-x
文件属组的权限r--
其他用户的权限
- 创建新文件有默认权限,根据
umask
值计算,属主和属组根据当前进程的用户来设定(创建的文件默认的权限是644)
目录权限的表示方法
x
进入目录rx
显示目录内的文件名wx
修改目录内的文件名
修改权限命令
chmod
修改文件、目录权限chmod u+x /tmp/testfile
chmod 755 /tmp/testfile
chown
更改属主、属组chgrp
可以单独更改属组,不常用
特殊权限
SUID
用于二进制可执行文件,执行命令时取得文件属主权限- 如
/usr/bin/passwd
- 如
SGID
用于目录,在该目录下创建新的文件和目录,权限自动更改为该目录的属组SBIT
用于目录,该目录下新建的文件和目录,仅root
和自己可以删除- 如
/tmp
- 如
网络管理
- 网络状态查看
- 网络配置
- 路由命令
- 网络故障排除
- 网络服务管理
- 常用网络配置文件
网络状态查看工具
net-tools
VS iproute
net-tools
ifconfig
eth0
第一块网卡(网络接口)- 你的第一个网络接口可能叫做下面的名字
eno1
板载网卡ens33
PCI-E
网卡enp0s3
无法获取物理信息的PCI-E
网卡CentOS 7
使用了一致性网络设备命名,以上都不匹配则使用eth0
route
netstat
iproute2
ip
ss
网络接口命名修改
- 网卡命名规则受
biosdevname
和net.ifnames
两个参数影响 - 编辑
/etc/default/grub
文件,增加biosdevname=0 net.ifnames=0
- 更新
grub
# grub2-mkconfig -o /boot/grub2/grub.cfg
- 重启
# reboot
查看网络情况
- 查看网卡物理连接情况
mii-tool eth0
查看网关
- 查看网关
route -n
- 使用
-n
参数不解析主机名
网络配置命令
ifconfig <接口> <IP地址> [netmask 子网掩码]
ifup <接口>
ifdown <接口>
- 添加网关
route add default gw <网关ip>
route add -host <指定ip> gw <网关ip>
route add -net <指定网段> netmask <子网掩码> gw <网关ip>
网关命令集合
ip addr ls
ifconfig
(修改网卡的ip
地址)
ip link set dev eth0 up
ifup eth0
(启动网卡eth0
)
ip addr add 10.0.0.1/24 dev eth1
ifconfig eth1 10.0.0.1 netmask 255.255.255.0
ip route add 10.0.0/24 via 192.168.0.1
route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.0.1
网络故障排除命令
ping
ping
[ip地址]: 监测与ip地址是否能够通信成功
traceroute
mtr
nslookup
telnet
tcpdump
netstat
ss
软件安装
- 软件包管理器
- 包管理器是方便软件安装、卸载,解决软件依赖关系的重要工具
CentOS
、RedHat
使用yum
包管理器,软件安装包格式为rpm
Debian
、Ubuntu
使用apt
包管理器,软件安装包格式为deb
- 包管理器是方便软件安装、卸载,解决软件依赖关系的重要工具
rpm
包和rpm
命令rpm
包格式- vim-common-7.4.10-5.el7.x86_64.rpm
- 软件名称 软件版本 系统版本 平台
rpm
命令常用参数-q
查询软件包-i
安装软件包-e
卸载软件包
yum
仓库rpm
包的问题- 需要自己解决依赖关系
- 软件包来源不可靠
CentOS
yum源http://mirror.centos.com/centos/7/
- 国内源
https://opsx.alibaba.com/mirror
yum
配置文件/etc/yum.repo.d/CentOS-Base.repo
wget -O /etc/yum.repo.d/CentOS-Base.repo
yum
命令常用选项install
安装软件包remove
卸载软件包list | grouplist
查看软件包update
升级软件包
- 源代码编译安装(步骤)
wget https://openresty.org/download/openresty.tar.gz
tar -zxf openresty.tar.gz
cd openresty
./configure --prefix=/usr/local/openresty
make -j2
make install
- 内核升级
rpm
格式内核- 查看内核版本
uname -r
- 升级内核版本
yum install kernel-3.10.0
- 升级已安装的其他软件和补丁
yum update
- 查看内核版本
- 源代码编译安装内核
- 安装依赖包
- 下载并解压缩内核
- 配置内核编译参数
- 使用当前系统内核配置
- 查看CPU
- 编译
- 安装内核
grub
安装- 二进制安装
进程管理
- 进程的概念与进程查看
- 进程——运行中的程序,从程序开始运行到终止的整个生命周期是可管理的
- C程序的启动时从main函数开始的
- 终止的方式并不唯一,分为正常终止和异常终止
- C程序的启动时从main函数开始的
- 查看命令
ps
->ps -ef | more
pstree
top
- 结论
- 进程也是树形结构
- 进程和权限有着密不可分的关系
- 进程——运行中的程序,从程序开始运行到终止的整个生命周期是可管理的
- 进程的控制命令
- 进程的优先级调整
- 调整优先级
nice
范围从-20到19,值越小优先级越高,抢占资源就越多renice
重新设置优先级
- 进行的作业控制
jobs
&
符号
- 调整优先级
- 进程的优先级调整
- 进程的通信方式——信号
- 信号是进程间通信方式之一,典型用法是:终端用户输入中断命令,通过信号机制停止一个程序的运行
- 使用信号的常用快捷键和命令
kill -l
SIGNT
通知前台进程组终止进程ctrl+c
SIGKILL
立即结束程序,不能被阻塞和处理kill -9 pid
- 守护进程和系统日志
- 使用
nohup
与&
符号配合运行一个命令nohup
命令使进程忽略hangup
(挂起)信号
- 守护进程(
daemon
)和一般进程有什么区别 - 使用
screen
命令screen
进入screen
环境ctrl+a d
退出(detached
)screen
环境screen -ls
查看screen
的会话screen -r sessionid
恢复会话
- 使用
- 服务管理工具
systemctl
- 服务(提供常见功能的守护进程)集中管理工具
service
systemctl
- 常见操作
systemctl start | stop | restart | reload | enable | disable 服务名称
- 软件包安装的服务单元
/usr/lib/systemd/system/
- 服务(提供常见功能的守护进程)集中管理工具
SELinux
简介- MAC(强制访问控制)与DAC(自主访问控制)
- 查看
SELinux
命令getenforce
/usr/sbin/sestatus
ps -Z and ls -Z and id -Z
- 关闭
SELinux
setenforce 0
/etc/selinux/sysconfig
内存与磁盘管理
- 内存和磁盘使用率查看
ext4
文件系统- 磁盘配额的使用
- 磁盘的分区与挂载
- 交换分区(虚拟内存)的查看与创建
- 软件
RAID
的使用 - 逻辑卷管理
- 系统综合状态查看