文件与目录
Linux目录结构
Centos7
目录名称 | 说明 |
---|---|
/bin | Binaries(二进制文件)这个目录存放着最经常使用的命令 |
/sbin | SuperBin系统管理员使用的命令 |
/etc | Etcetera(等等),存放所有的系统管理所需要的配置文件和子目录 |
/var | Variable(变量),存放经常被修改的文件,缓存/日志 |
/usr | UnixSharedResources(系统资源),系统默认软件命令目录 |
/usr/bin | 等同于/bin |
/usr/sbin | 等同于/sbin |
/usr/lib | 等同于/lib |
/usr/etc | 安装软件时使用的配置文件 |
/usr/share | 软件包/软件源安装的软件目录 |
/usr/src | 系统级源码目录 |
/usr/local | 自定义安装软件目录(常用) |
/usr/local/src | 用户级源码安装文件常用目录 |
/boot | (引导)启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件 |
/dev | Device(设备),存放 Linux 的外部设备,接入后以文件形式出现(未挂载) |
/home | (家目录)用户的主目录,内部存放用户目录 |
/lib | Library(库),存放着系统最基本的动态连接共享库 |
/media | (媒体),系统自动识别并自动挂载的设备 |
/mnt | 临时挂载文件系统的目录 |
/opt | optional(可选),安装第三方大型软件目录 |
/proc | 系统内存映射目录 |
/root | 系统用户主目录 |
/selinux | RedHut/CentOS系防火墙目录 |
/srv | 网络服务启动后需要访问的数据目录 |
/sys | sysfs(文件系统)目录 |
/tmp | 存放临时文件目录 |
/run | 临时文件系统,存储系统启动以来的信息 |
基本操作
路径分类
- 绝对路径: 由根目录
/
写起, 例如/usr/share/doc
- 相对路径: 不是以
/
写起, 例如当前目录下local/src
- 绝对路径: 由根目录
文件/文件夹基本操作
# 列出目录文件名
ls 相对路径/绝对路径(默认为当前路径)
-a : 列出全部文件
-d /目录名 : 列出目录本身
-l : 列出文件目录属性
-h : 列出文件目录属性并人性化显示
# 切换工作目录
cd 相对路径/绝对路径
# 显示树状目录结构
tree
# 显示当前所在目录
pwd -指令
-P : 显示当前目录(非软链接目录)
# 创建空目录
mkdir -指令 目录名
-m 777 目录名 : 配置文件的权限
-p /路径 : 递归创建目录
# 创建空文件
touch 文件名
# 删除空目录
rmdir -指令 目录名
-p : 递归删除空目录
# 复制文件或目录
cp -指令 文件/目录
-a : 相当于 -pdr
-d : 复制软链接
-f : 强制复制/覆盖不提醒
-i : 目标文件存在/复制时询问
-l : 复制成为硬链接
-p : 同时复制文件属性
-r : 递归复制
# 删除文件或目录
rm -指令 文件/目录
-f : 强行删除
-i : 删除前询问
-r : 递归删除
# 移动文件/目录,修改文件/目录名称
mv -指令 目录/文件
-f : 强行覆盖
-i : 询问是否覆盖
# 创建链接
ln -指令 源文件/目录 链接名
-s : 软链接
-f : 强制执行
-i : 交互模式,文件存在则提示
# 显示当前时间
date
-s : 设置日期
# 查看已经执行过的历史命令
history
文件操作
文件查看
# 从第一行显示文件内容
cat -指令 文件名
-b : 列出行号
-n : 列出行号(包括空格)
-v : 列出特殊字符
# 从第一行显示文件内容(选项同上)
tac : 反向显示文件内容
# 全屏幕显示文件内容
more 文件名
space : 向下翻一页
Enter : 向下翻一行
q : 离开
Ctrl+F : 向下滚动一屏
Ctrl+B : 向上滚动一屏
= : 输出当前行的行号
:f : 输出文件名和行号
# 动态加载文件(较大的文件)
less 文件名
# 显示文件开头10行
head -指令 文件名
-n : 自定义显示行数
# 显示文件末尾10行
tail -指令 文件名
-n : 自定义显示行数
-f : 动态显示
文本处理
# 重定向写入(没有会创建)
内容 > 文件名
# 重定向追加(没有会创建)
内容 >> 文件名
# 管道符
cat abc.txt | grep 'abc'
# 上一条命令执行失败, 执行下一条
cat abc.txt || echo 'not file'
# 后台执行
.install.sh &
# 上一条命令执行成功, 执行下一条
make && make install
# 文本切分
cut -指令 文件路径
-d : 自定义分割符
-f : 分割后显示范围[索引]
# 文本排序 默认为字母排序
sort -指令 -t ':' 文件路径
-t : 分割字符
-k数字 : 排序范围[索引]
-n : 数字排序
-h : ls -h时使用
-r : 倒序
# 文本统计命令
wc -指令 文件路径
-l : 行数
-w : 单词数
# 文本搜索
grep -指令 '文本' 文件路径
-n : 显示行号
-i : 忽略大小写
-v : 不包含的行
-d : 查找目录
-E正则 : 正则表达式
搜索查找
文件/文本搜索
# 文件搜索
find 搜索范围 -指令
-name : 按照文件名查找
-user : 按照归属用户查找
-size +200M/-100M/40M : 按照指定文件大小查找
# 文件索引搜索
# 建立数据库查询
updatedb
# 通过索引搜索文件
locate 要搜索的文件
# 过滤查找(一般与管道符|配合)
grep -指令 查找内容 源文件
-n : 显示行号
-i : 忽略字母大小写
压缩解压
文件/文件夹的压缩和解压
# gz压缩(只能压缩文件 *.gz)
gzip 文件名
# gz解压
gunzip 文件.gz
# zip压缩(文件和目录 *.zip)
zip -指令 压缩名 被压缩内容
-r : 递归压缩(包含)
# zip解压
unzip -指令 文件.zip
-d 目录名 : 指定解压后存放目录
# tar压缩解压
tar -指令 压缩文件名 被压缩文件 解压目录
-c : 打包tar文件
-v : 显示详细信息
-f : 指定压缩后的文件名
-z : 打包同时压缩
-x : 解包tar文件
用户和用户组
用户管理
用户相关配置文件
# 用户信息
/etc/passwd
# 用户口令信息(root权限)
/etc/shadow
用户操作
# 新建用户
useradd -指令 用户名
-c : 注释
-d : 指定用户主目录
-g : 指定用户所属组
-s : 指定用户登录shell
# 删除用户
userdel -指令 用户名
-r : 将用户目录同时删除
# 修改用户
usermod -指令 用户名
-c : 注释
-d : 指定用户主目录
-g : 指定用户所属组
-s : 指定用户登录shell
# 指定用户口令
passwd -指令 用户名
-d : 使账号无口令
-f : 用户下次登录修改-指令
-l : 禁用账号
用户组管理
用户组相关配置文件
# 用户组信息
/etc/group
用户组管理
# 新增用户组
groupadd -指令 用户组
-g : 指定GID
# 删除用户组
groupdel 用户组
# 修改用户组
groupmod -指令 用户组
-n : 修改用户组名
进程/服务管理
服务管理
基本命令
Centos 7
默认服务管理进程为 systemctl
# 管理服务
systemctl -指令 服务名
start : 开启服务
stop : 停止服务
restart : 重启服务
status : 查看服务状态
list-unit-files : 查看服务启动状态
enable : 设置开机启动
disable : 关闭服务开机启动
is-enabled : 查询是否自动启动
服务配置
- 步骤一 创建服务
/lib/systemd/system/name.service
- 步骤二 编辑
name.service
服务文件 - 步骤三
systemctl reload prometheus
刷新配置
- 步骤一 创建服务
配置文件示例
# 控制单元 :服务描述, 启动顺序, 依赖关系
[Unit]
# 描述服务
Description=nginx
# 说明启动顺序(在哪个服务后启动)
After=network.target
# 说明启动顺序(在哪个服务前启动)
Before=network.target
# 服务的操作命令
[Service]
# 后台运行形式
Type=forking
# 设置服务运行的用户
User=root
# 设置服务运行的组
Group=root
# 指定PID文件路径
PIDFile=/路径
# 启动命令
ExecStart=/usr/local/nginx/sbin/nginx
# 重启命令
ExecReload=/usr/local/nginx/sbin/nginx -s reload
# 停止命令
ExecStop=/usr/local/nginx/sbin/nginx -s quit
# 指定环境变量
Environment=/路径
# 给服务分配独立临时空间
PrivateTmp=true
# 安装部分
[Install]
# 默认
WantedBy=multi-user.target
端口管理
Centos 7
默认防火墙进程为 firewall
# 端口管理
firewall-cmd
--permanent --add-port=端口号/协议 : 开启端口
--permanent --remove-port=端口号/协议 : 关闭端口
--reload : 重新载入
--list-ports : 查询开放端口列表
--query-port=端口/协议 : 查询端口是否开放
进程管理
进程(process) 分为 交互进程
批处理进程
守护进程
进程关键字
USER
进程是由哪个用户产生的PID
进程的 ID 号%CPU
进程CPU占用率%MEM
进程物理内存占用率VSZ
进程占用虚拟内存的大小,单位 KB;RSS
进程占用实际物理内存的大小,单位 KB;TTY
进程的运行终端tty1
图形化终端tty2
-tty6
本地终端pts
/0
-255
虚拟终端
STAT
: 进程状态。R
: 运行状态S
: 睡眠状态T
: 暂停状态Z
: 僵尸状态s
: 包含子进程l
: 多线程+
: 前台显示
START
: 进程的启动时间TIME
: 进程占用 CPU 的运算时间COMMAND
: 产生此进程的命令名
指令操作
# 显示进程
ps 指令
-a : 显示当前终端所有进程信息
-u : 以用户格式显示进程信息
-x : 显示后台进程运行的参数
-e : 显示所有进程
-f : 全部格式显示(有父进程)
# 查看进程树
pstree 指令
-p : 显示进程ID
-u : 显示进程所属用户
# 终止进程
kill -指令 进程号
-9 : 强制终止
# 通过进程名终止进程
killall 进程名称
动态监控
# 动态显示正在运行的进程
top 指令
-d 秒数 : 指定每隔几秒更新(默认为3)
-i : 不显示任何闲置或者僵死进程
-p 进程ID : 通过指定的进程ID查询进程状态
-c : 显示产生进程的完整命令
-b : 非交互式
-n : 指定刷新次数
-u 用户名 : 查找特定用户启动的进程
# 进程内操作
Pc : 以CPU使用率排序
M : 内存使用率排序
N : PID排序
u 然后输入用户名 : 查询特定用户的进程
k 然后输入进程号 : 结束特定进程号
q : 退出top
系统相关
# 把内存的数据同步到磁盘
sync
# 重启计算机
reboot
# 关机
halt
# 立刻关机
shutdown -h now
# 1分钟后关机
shutdown -h 1
# 立刻重启计算机
shutdown -r now
# 取消关机
shutdown -c
磁盘管理
磁盘操作
# 查询文件系统的磁盘占用情况
df -h
# 查询指定目录磁盘占用情况
du -指令 目录名
-s : 指定目录占用大小汇总
-h : 人性化查看
-a : 含文件
--max-depth=1 : 字目录深度
-c : 列出明细的同时,增加汇总值
# 查看cpu磁盘的相关信息
iostat -指令 数字1 数字2
-x : 显示更多信息
数字1 : 刷新间隔
数字2 : 刷新次数
# 硬盘分区
fdisk -指令 /dev/sdb/c/d
-m : 显示命令列表
-p : 显示磁盘分区
-n : 新增分区
-d : 删除分区
-w : 写入并退出
# 格式化分区并指定分区类型
mkfs -t ext4 /dev/sd[b1/b2]
设备挂载
# 查看磁盘分区状态(包括未挂载设备)
lsblk -f
# 挂载设备至目录(重启失效)
mount 设备 目录
# 卸载设备
umount 设备/目录
# 永久挂载 添加完成后执行mount -a
修改文件/etc/fstab挂载
软件包管理
RPM包管理
RPM
是 RedHat
及分支本地软件包管理器
# rpm软件包管理
rpm -指令 软件包名
-q : 查询
-a : 所有软件包
-i : 软件包常用信息
-l : 查询软件包中的软件
-f : 查询文件所属包
-e 包名称 : 卸载包
--nodeps : 不删除依赖,强制删除
-i : 安装
-v : 安装提示
-h : 安装过程
YUM包管理
YUM
是 RedHat
及分支前端软件包管理器, 基于RPM包管理器
# 显示软件包列表
yum list
# 下载安装软件
yum install 包名
# 更新软件包
yum update
# 检查是否有可用的更新
yum check-update
# 删除指定的软件包
yum remove 包名
# 清理过期缓存
yum clean
# 显示yum软件包所有依赖关系
yum deplist
MAKE编译安装
编译安装一般使用 gcc
编译器
编译安装过程
- 步骤1
./configure
参数传递配置文件, 生成Makefile.in
文件 - 步骤2
make
根据Makefile.in
文件, 构建应用程序 - 步骤3
make install
复制应用程序到指定目录
- 步骤1
依赖环境
# 编译安装依赖环境
yum -y install gcc gcc-c++ make autoconf libtool-ltdl-devel gd-devel freetype-devel libxml2-devel libjpeg-devel libpng-devel openssl-devel curl-devel bison patch unzip libmcrypt-devel libmhash-devel ncurses-devel sudo bzip2 flex libaio-devel
# 安装构建软件所需RPM包
yum install yum-utils
yum-builddep python
# 配置脚本, 生成Makefile.in
./configure \
# 配置安装目录
--prefix=/目录
# 构建并安装
make && make install
网络管理
配置文件
# 网卡配置文件
/etc/sysconfig/network-scripts/ifcfg-ens33
# host配置文件
/etc/hostname
网络命令
Centos
默认网卡名为 ens33
网络请求命令
# 下载文件
wget -选项 /目录/ URL -O /目录/文件名
-b : 后台下载
-p : 指定下载目录
-O : 指定下载目录及文件名
# 发送请求(下载文件,获取信息)
curl URL
-O : 下载文件,不写则为请求
# 检查网络服务器是否联通
ping IP地址
-c : 检查次数,不使用则为无限
Nmtui命令
图形化模式设置网络
# 启动命令
nmtui
IP命令
ip
命令与ifconfig
命令类似, 参考菜鸟教程
# 显示网络接口信息
ip link
# 开启网卡
ip link set 网卡名 up
# 关闭网卡
ip link set 网卡名 down
# 显示网卡ip信息
ip addr
# 设置网卡ip地址
ip addr add 192.168.0.1:24 dev 网卡名
# 删除网卡ip地址
ip addr del 192.168.0.1:24 dev 网卡名
# 显示系统路由信息
ip route
Netstat命令
netstat
命令用于显示网络状态, 参考菜鸟教程
# netstat命令参数
netstat -指令
-a: --all,显示所有监听和未监听的socker
-l: --listening,显示所有监听的端口
-t: 所有的 tcp 协议的端口
-u: 所有的 udp 协议的端口
-p: --programs,与链接相关程序名和进程的PID
-n: 进制使用域名解析功能。链接以数字形式展示(IP地址),而不是通过主机名或域名形式展示
-r: --route,显示路由表信息
# 常用操作
# 查看路由信息
netstat -r
# 统计系统中tcp连接监听地址、端口、进程
netstat -tlnp
# 查看该进程网络信息
netstat -anp | grep 进程号
# 查看网络端口号占用情况
netstat –nlp | grep 端口号
SSH管理
SSH-KEYGEN命令
SSH-Keygen
用于OpenSSH
身份验证密钥的生成、管理和转换- 支持
RSA
和DSA
两种认证密钥
# 指定创建的密钥类型
ssh-keygen -t rsa
# 生成密钥匙描述信息追加到公钥末尾(常用于git)
ssh-keygen -t rsa -C "t@oa.email"
# 读取OpenSSH私钥或者公钥
ssh-keygen -e
# 指定保存密钥的文件名
ssh-keygen -f ~/.ssh/id_rsa
# 查看是否已经添加对应主机密钥
ssh-keygen -F 192.168.1.1
# 删除对应主机密钥
ssh-keygen -R 192.168.1.1
# 指定密码 ''为空
ssh-keygen -N ''
# 静默模式
ssh-keygen -q
SSH-COPY-ID命令
# 把本地公钥文件安装到指定远程主机下
ssh-copy-id root@192.168.1.1
# 指定文件
ssh-copy-id -i ~/.ssh/id_rea.pub root@192.168.0.75
# 批量复制
for i in node01 node02 node03
do
ssh-copy-id ¥i
done
日志管理
CentOS
使用 Rsyslog
服务实现日志功能
系统日志
系统日志目录
日志文件 | 说明 | 查看方式 |
---|---|---|
/var/log/boot.log | 系统启动日志 | 直接查看 |
/var/log/cron | 系统定时任务相关日志 | 直接查看 |
/var/log/yum.log | yum相关的 | 直接查看 |
/var/log/lastog | 所有用户最后一次登录日志 | lastlog |
/var/log/messag | 记录系统重要消息日志 | 直接查看 |
/var/log/secure | 记录验证授权信息(用户登录验证信息) | 直接查看 |
/var/tun/ulmp | 记录当前登录用户的信息(随着用户登录不断变化) | w 格式化who 详细 users 用户名 |
注: 部分日志需要命令查看
系统日志结构
- 事件产生的时间
- 发生事件的服务器的主机名
- 产生事件的服务名或程序名
- 事件的具体信息
配置文件
配置文件路径为 /etc/rsyslog.conf
配置文件格式
# 格式 *代表连接符号
服务*级别 日志记录位置
服务
服务名称 | 说明 |
---|---|
auth | pam 产生的日志,认证日志 |
authpriv | ssh , ftp 等登录信息的验证信息,认证授权认证 |
cron | 时间任务相关 |
kern | 内核 |
lpr | 打印 |
mail | 邮件 |
mark / rsyslog | rsyslog 服务内部的信息,时间标识 |
news | 新闻组 |
user | 用户程序产生的相关信息 |
uucp | nix to unix copy, unix主机之间相关的通讯 |
local 1~7 | 自定义的日志设备 |
连接符
符号 | 说明 |
---|---|
服务 . 级别 | 表示大于某个级别的信息 |
服务 .= 级别 | 表示等于某个级别的信息 |
服务 .! 级别 | 表示某个级别之外的信息 |
级别
符号 | 说明 |
---|---|
debug | 有调式信息的, 日志信息最多 |
info | 一般信息的日志, 最常用 |
notice | 普通信息, 有一定重要性 |
warning / warn | 警告级别, 不会影响到服务或系统的运行 |
err / error | 错误级别, 阻止某个功能或者模块不能正常工作的信息 |
crit | 临界级别, 阻止整个系统或者整个软件不能正常工作的信息 |
alert | 警告级别, 需要立即处理 |
emerg | 无法使用等严重信息 |
日志记录位置
符号 | 说明 |
---|---|
/path/file | 存储为文件 |
@@192.168.1.1 | 发送到 TCP 服务 |
@192.168.1.1 | 发送到 UDP 服务 |
root | 发送到用户 |
~ | 丢弃日志 |
^/path/script.sh | 执行脚本,日志内容作为脚本参数 |
实例
# 记录mail日志等级为error及以上日志
mail.err /var/log/mail_err.log
# 记录mail所有等级为warn级别的日志(仅记录warn级别)
mail.=warn /var/log/mail_err.log
# 记录kern所有日志
kern.* /var/log/kern.log
# 将mail的所有信息,除了info以外,其他的都写入/var/adm/mail
mail.*;mail.!=info /var/adm/mail
# 将日志等级为crit或更高的内核消息定向到远程主机finlandia
# 如果主机崩溃,磁盘出现不可修复的错误,可能无法读取存储的消息。如果有日志在远程主机上,可以尝试找出崩溃的原因。
kern.crit @finlandia
# 记录所有类型的warning等级及以上日志
*.warning /var/log/syslog_warn.log
# 记录mail的warning日志和kern的error日志,其他所有的info日志
*.info;mail.warning;kern.error /var/log/messages
# 记录kernel的info到warning日志
kern.info;kern.!err /var/adm/kernel-info
# 将mail和news的info级别日志写入/var/adminfo
mail,news.=info /var/adm/info
# 紧急消息(emerg级别)将使用wall显示给当前所有登录的用户
*.=emerg *
# 该规则将所有alert以及更高级别的消息定向到操作员的终端,即登录的用户“root”和“joey”的终端。
*.alert root,joey
Bash快捷键
编辑命令
Ctrl + a
: 移到命令行首Ctrl + e
: 移到命令行尾Alt + f
: 按单词前移(右向)Alt + b
: 按单词后移(左向)Ctrl + xx
: 在命令行首和光标之间移动Ctrl + u
: 从光标处删除至命令行首Ctrl + w
: 从光标处删除至字首Alt + d
: 从光标处删除至字尾
控制命令
Ctrl + l
: 清屏Ctrl + c
: 终止命令Ctrl + z
: 挂起命令