文件与目录

Linux目录结构

Centos7

目录名称说明
/binBinaries(二进制文件)这个目录存放着最经常使用的命令
/sbinSuperBin系统管理员使用的命令
/etc Etcetera(等等),存放所有的系统管理所需要的配置文件和子目录
/varVariable(变量),存放经常被修改的文件,缓存/日志
/usrUnixSharedResources(系统资源),系统默认软件命令目录
/usr/bin等同于/bin
/usr/sbin等同于/sbin
/usr/lib等同于/lib
/usr/etc安装软件时使用的配置文件
/usr/share软件包/软件源安装的软件目录
/usr/src系统级源码目录
/usr/local自定义安装软件目录(常用)
/usr/local/src用户级源码安装文件常用目录
/boot(引导)启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件
/devDevice(设备),存放 Linux 的外部设备,接入后以文件形式出现(未挂载)
/home(家目录)用户的主目录,内部存放用户目录
/libLibrary(库),存放着系统最基本的动态连接共享库
/media(媒体),系统自动识别并自动挂载的设备
/mnt临时挂载文件系统的目录
/optoptional(可选),安装第三方大型软件目录
/proc系统内存映射目录
/root系统用户主目录
/selinuxRedHut/CentOS系防火墙目录
/srv网络服务启动后需要访问的数据目录
/syssysfs(文件系统)目录
/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包管理

RPMRedHat 及分支本地软件包管理器

# rpm软件包管理
rpm -指令 软件包名
    -q : 查询
    -a : 所有软件包
    -i : 软件包常用信息
    -l : 查询软件包中的软件
    -f : 查询文件所属包
    -e 包名称 : 卸载包
    --nodeps : 不删除依赖,强制删除
    -i : 安装
    -v : 安装提示
    -h : 安装过程

YUM包管理

YUMRedHat 及分支前端软件包管理器, 基于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 复制应用程序到指定目录
  • 依赖环境

# 编译安装依赖环境
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命令类似, 参考菜鸟教程open in new window

# 显示网络接口信息
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命令用于显示网络状态, 参考菜鸟教程open in new window

# 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 身份验证密钥的生成、管理和转换
    • 支持 RSADSA 两种认证密钥
# 指定创建的密钥类型
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.logyum相关的直接查看
/var/log/lastog所有用户最后一次登录日志lastlog
/var/log/messag记录系统重要消息日志直接查看
/var/log/secure记录验证授权信息(用户登录验证信息)直接查看
/var/tun/ulmp记录当前登录用户的信息(随着用户登录不断变化)w 格式化
who 详细
users 用户名

注: 部分日志需要命令查看

  • 系统日志结构

    • 事件产生的时间
    • 发生事件的服务器的主机名
    • 产生事件的服务名或程序名
    • 事件的具体信息

配置文件

配置文件路径为 /etc/rsyslog.conf

  • 配置文件格式

# 格式 *代表连接符号
服务*级别       日志记录位置
服务
服务名称说明
authpam 产生的日志,认证日志
authprivssh , ftp等登录信息的验证信息,认证授权认证
cron时间任务相关
kern内核
lpr打印
mail邮件
mark / rsyslogrsyslog服务内部的信息,时间标识
news新闻组
user用户程序产生的相关信息
uucpnix 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 : 挂起命令