美文网首页
Linux 命令

Linux 命令

作者: __f0e6 | 来源:发表于2021-02-06 16:58 被阅读0次

    套路

    1) 更新镜像源
    2) 配置防火墙
    3) 安装 OpenSSH 服务器
    

    Debian 软件包

    
    # 查询所有已安装的软件包
    dpkg-query -l
    
    # 查询指定已安装软件包的详细信息
    dpkg-query -l "软件包名称"
    
    # 安装软件包
    dpkg -i <软件包>
    
    # 显示软件包的版本
    dpkg -l <软件包名称>
    
    # 查看软件包的详细信息
    dpkg -s <软件包名称>
    
    # 卸载软件包(保留配置)
    dpkg -r <软件包名称>
    
    # 卸载软件包(不保留配置)
    dpkg -P <软件包名称>
    
    

    APT安装包管理器

    
    # 更新镜像源地址
    apt-get update
    # 安装软件
    apt-get install <软件名>
    # 卸载软件
    apt-get remove <软件名>
    # 查看软件的缓存信息
    apt-cache show <软件名>
    
    

    修改镜像源地址

    # 备份
    cp /etc/apt/sources.list /etc/apt/sources.list.backup
    # 清空
    echo "" > /etc/apt/sources.list
    # 编辑
    vim /etc/apt/sources.list
    
    # Ubuntu 20.04 LTS
    # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
    deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse
    
    # 预发布软件源,不建议启用
    # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
    
    # 更新镜像源地址
    apt-get update
    

    Linux远程登录

    
    # 安装 SSH 服务
    apt-get install openssh-server
    service ssh restart
    
    # Linux 登录到 Linux
    ssh 用户名@主机名
    
    

    文本编辑器

    vim [文件名]
    
    
    # 复制一行
    [yy]
    # 复制多行
    数值yy
    # 粘贴
    [p]
    
    
    # 删除一行
    [dd]
    # 删除多行
    数值dd
    
    
    # 撤销
    [u]
    
    
    # 显示行号
    :set nu
    # 不显示行号
    :set nonu
    
    
    # 查找字符(输入完成后按回车键)
    /字符
    # 查找下一个
    [n]
    
    
    # 移动到第一行
    [gg]
    # 移动到最后一行
    [G]
    # 移动到指定行(输入完成后按 Shift + g )
    行号
    
    
    

    执行命令

    
    # 以后台的方式执行命令
    命令 &
    
    # 当命令1执行成功后,再来执行命令2
    命令1 && 命令2
    
    

    关机

    
    # 同步内存的数据到硬盘
    sync
    # 关机
    shutdown -h now
    
    # 同步内存的数据到硬盘
    sync
    # 重启
    reboot
    
    

    用户管理

    
    # 添加用户
    # -m 自动创建用户目录
    # -g 指定用户组
    # -s 指定用户登录时所使用的shell名称
    useradd -m -g [用户组] -s /bin/bash [用户名]
    
    # 修改用户密码
    passwd [用户名]
    # 修改 root 用户密码
    sudo passwd
    
    # 删除用户
    userdel [用户名]
    # 删除用户并删除用户目录(不推荐使用)
    userdel -r [用户名]
    
    # 修改用户所在的组
    usermod -g [用户组] [用户名]
    
    # 添加用户组
    groupadd [名称]
    
    # 删除用户组
    groupdel [名称]
    
    # 查看当前登录的用户
    whoami
    
    # 查询用户消息
    id [用户名]
    
    # 切换用户
    su - [用户名]
    
    # 退出当前用户
    exit
    
    
    

    指定运行级别

    # 1 安全模式(命令行界面)
    # 2 离线模式(命令行界面)
    # 3 联网模式(命令行界面)
    # 5 联网模式(图形化界面)
    init [数值]
    

    获取帮助信息

    # 命令可以是任意命令,例如 ls 、vim 等(按 q 退出)
    man [命令]
    

    获取 shell 内置命令的帮助信息

    # 命令必须是shell的内置命令
    help [命令]
    

    目录路径

    # 根目录
    /
    # 当前目录
    ./
    # 上一级目录
    ..
    ../
    # 当前用户的 home 目录
    ~
    /home/用户名
    

    显示当前工作目录的绝对路径

    pwd
    

    查看当前目录的内容信息

    # 简短信息
    ls [目录]
    # 显示隐藏的文件和目录
    ls -a [目录]
    # 显示详细内容
    ls -l [目录]
    # 显示详细内容,并将文件大小以更友好的方式显示
    ls -lh [目录]
    # 显示简短信息,并递归显示该目录下所有子目录中的内容
    ls -R [目录]
    

    切换目录

    # 目录可以是绝对路径或相对路径
    cd [目录]
    # 返回上一级目录
    cd ..
    # 回到自己的家目录
    cd ~
    

    创建文件夹

    # 创建多级目录,目录可以是绝对路径或相对路径
    mkdir -p [文件夹]
    

    删除空文件夹

    rmdir [空文件夹]
    

    删除文件与非空目录

    # 删除非空目录
    # -r 递归删除文件
    # -f 强制删除
    rm -rf [目录]
    # 删除文件
    rm -f [文件]
    

    创建空文件

    touch [文件名]
    

    拷贝

    # 从源拷贝到目标
    cp [源] [目标]
    # 拷贝目录
    # -r 递归复制文件夹
    # -t 指定目标文件夹
    cp -r [源] [目标] -t [目标文件夹]
    # 强制覆盖文件或目录
    \cp [源] [目标]
    

    移动与重命名

    # 重命名(源与目标必须在同一文件夹下)
    mv oldFile newFile
    # 移动
    mv /temp/oldFile newFile
    

    查看文件内容

    # 显示文件内容
    cat [文件]
    # 显示文件内容,并显示行号
    cat -n [文件]
    # 分页显示
    cat [文件] | more
    

    分页显示文件内容

    more [文件]
    
    ######### 快捷键 #########
    
    # 向下翻页
    [Space]
    # 向下翻一行
    [Enter]
    # 退出
    [q]
    # 返回上一屏
    [Ctrl + B]
    # 返回下一屏
    [Ctrl + F]
    # 输出当前行的行号
    [=]
    # 输出当前行的行号和文件名
    :f
    
    

    分页查看文件内容(以按需加载的方式查看,文件大时效率高)

    less 文件
    
    ######### 快捷键 #########
    
    # 向上翻页
    [Ctrl + B]
    [PageUp]
    # 向下翻页
    [Ctrl + F]
    [PageDown]
    [Space]
    # 向下翻一行
    [Enter]
    # 向下搜寻字符串(n:向下查找、N:向上查找)
    /字符
    # 向上搜寻字符串(n:向下查找、N:向上查找)
    ?字符
    # 退出
    [q]
    
    

    覆盖与追加文本内容

    # > 覆盖
    # >> 追加
    
    # 例子:
    
    # 将列表内容覆盖到文件中
    ls -lh > [文件]
    # 将列表内容追加到文件中
    ls -alh >> [文件]
    # 将文件1的内容覆盖到文件2中
    cat [文件1] > [文件2]
    # 将内容追加到文件中
    echo "内容" >> [文件]
    
    

    输出内容到控制台

    # 输出内容到控制台
    echo "内容"
    

    输出文件部分内容到控制台

    # 显示文件开头内容(默认显示10行)
    head [文件]
    # 显示文件开头指定行数的内容
    head -n [数值] [文件]
    
    # 显示文件结尾内容(默认显示10行)
    tail [文件]
    # 显示文件结尾指定行数的内容
    tail -n [数值] [文件]
    # 实时追踪文件的所有更新
    tail -f [文件]
    
    

    软连接(类似于快捷方式)

    # -s 使用符号链接代替硬链接
    ln -s [文件或目录] [软连接名称]
    

    查看已经执行过的历史命令

    # 查看所有执行过的命令
    history
    # 查看最近执行过的命令(指定数量)
    history [数值]
    # 执行指定历史编号的命令
    !行号
    

    日期时间

    # 显示当前时间
    date
    # 显示指定格式的日期时间
    date "+%Y-%m-%d %H:%M:%S"
    # 设置系统时间
    date -s "2021-01-23 13:23:53"
    
    # 查看日历
    cal
    # 查看指定年份的日历
    cal 2021
    

    查找文件与目录

    
    ######### find #########
    
    # 查找指定目录中指定名称的文件或目录(可以使用 * 通配符)
    find [目录] -name [名称]
    
    # 查找指定目录中所有者为 root 用户的文件或目录
    find [目录] -user root
    
    # 查找指定目录中大于 20MB 的文件
    find [目录] -size +20M
    # 查找指定目录中小于 20kb 的文件
    find [目录] -size -20k
    # 查找指定目录中等于 20MB 的文件
    find [目录] -size 20M
    
    # 查找指定目录中最后修改时间是在n*24小时前的文件。
    find [目录] -mtime +n
    # 查找指定目录中最后修改时间是在n*24小时内的文件。
    find [目录] -mtime -n
    # 查找指定目录中最后修改时间是n*24小时的文件。
    find [目录] -mtime n
    
    
    #       -exec       将每一条查找到的内容作为参数,放入到命令中执行
    #       {}          代表每一条查找到的内容
    #       \;          执行结束符(由于 ';' 需要转义才能使用,因此在其前面加上 '\' )
    
    # 查找指定目录中所有的txt文件,显示其文件名
    find [目录] -name "*.txt" -exec basename {} \;
    # 查找指定目录中文件大小大于 4kb 的文件,显示文件的父路径、文件名
    find /home -size 4k -exec echo "----------" \; -exec dirname {} \; -exec basename {} \;
    
    
    ######### locate #########
    
    # 更新 locate 数据库
    updatedb
    # 搜索文件
    locate [文件名]
    
    

    检索文本内容

    # 在指定文件中查找指定内容
    grep [要检索的内容] [文件名]
    # 在指定文件中查找指定内容,并显示行号
    grep -n [要检索的内容] [文件名]
    # 在指定文件中查找指定内容(忽略大小写)
    grep -i [要检索的内容] [文件名]
    # 在指定文件中查找指定内容(使用正则表达式)
    grep "正则表达式" [文件名]
    
    # 管道符号(将前一个命令的处理结果传递给后面的命令处理)
    |
    
    # 配合其他指令使用
    cat a.txt | grep -n hello
    ls -lh | grep -ni x
    

    压缩与解压缩

    ######### gzip #########
    
    # 压缩(压缩完成后删除源文件)
    gzip [文件]
    # 解压缩(解压缩完成后删除源文件)
    gunzip [文件名.gz]
    
    ######### zip #########
    
    # -r 递归压缩目录
    # -d 指定解压后文件的存放目录
    
    # 压缩文件
    zip [文件名.zip] [要压缩的文件]
    # 压缩目录
    zip -r [文件名.zip] [要压缩的目录]
    # 解压缩
    unzip -d [要解压到的目录] [文件名.zip]
    
    ######### tar.gz #########
    
    # -z 打包同时压缩
    # -c 产生 .tar 文件
    # -x 解压 .tar 文件
    # -v 显示详细信息
    # -f 指定压缩后的文件名
    # -C 指定解压到的目录
    
    # 压缩
    tar -zcvf [文件.tar.gz] [要压缩的文件]
    # 解压缩
    tar -zxvf [文件.tar.gz] -C [要解压到的目录]
    
    

    修改文件所有者

    
    # -R 递归更改目录下的所有文件和目录
    
    # 改变所有者
    chown -R [用户] [文件或目录]
    
    # 改变所在组
    chgrp -R [用户组] [文件或目录]
    
    # 同时改变所有者与所在组
    chown -R [用户]:[用户组] [文件或目录]
    
    

    文件权限

    
    ######### 文件权限 #########
    
    # 作用于文件
    r:读取
    w:修改(不代表可以删除该文件;删除文件的前提条件是对该文件所在的目录有 w 写权限,才能够删除该文件)
    x:执行
    
    # 作用于目录
    r:读取、查看目录内容
    w:修改,可在目录内删除、创建、重命名
    x:进入目录
    
    # 也可以用数字标识
    r:4
    w:2
    x:1
    
    rwx = 4 + 2 + 1 = 7
    rw- = 4 + 2 = 6
    r-- = 4
    -wx = 2 + 1 = 3
    -w- = 2
    r-x = 4 + 1 = 5
    --x = 1
    --- = 0
    
    

    修改文件权限

    
    # u 所有者
    # g 所在组
    # o 其他组
    # a 全部用户和组(包括 u、g、o)
    
    # = 覆盖
    # + 添加
    # - 减去
    
    # 修改权限为 rwxr-xr--
    chmod u=rwx,g=rx,o=r [文件或目录]
    
    # 为所在组减去 x 执行权限
    chmod g-x [文件或目录]
    
    # 为其他组增加 w 写权限
    chmod o+w [文件或目录]
    
    #  为全部用户和组设置为 r 读权限
    chmod a=r [文件或目录]
    
    # 修改权限为 rwxr-x--x
    chmod 751 [文件或目录]
    
    

    定时任务调度

    
    ######### 语法 #########
    
    #   -e      编辑 crontab 定时任务
    #   -l      查询 crontab 定时任务
    #   -r      删除当前用户所有的 crontab 定时任务
    
    # 编辑定时任务
    crontab -e
    # 查看当前用户的任务调度
    crontab -l
    # 删除当前用户的所有任务调度
    crontab -r
    # 重启任务调度
    service cron restart
    
    
    ######### 占位符说明 #########
    
    * * * * *
    
    #   项目           含义        范围
    #   第一个"*"      分钟        0-59
    #   第二个"*"      小时        0-23
    #   第三个"*"      日          1-31
    #   第四个"*"      月          1-12
    #   第五个"*"      星期        0-7( 0 和 7 都代表星期日)
    
    
    ######### 特殊符号说明 #########
    
    *       任意时间。比如第一个"*"就代表每分钟都执行一次
    ,       不连续的时间。比如"0 8,12 * * *"命令,就代表在每天的8点0分,12点0分都执行一次命令
    -       连续的时间范围。比如"0 5 * * 1-6"命令,代表在周一到周六的凌晨5点0分执行一次命令
    */n     每隔多久执行一次。比如"*/10 * * * *"命令,代表每隔10分钟就执行一次命令
    
    ######### 案例 #########
    
    45 22 * * *             每天的22点45分执行命令
    0 17 * * 1              每周一的17点0分执行命令
    0 5 1,15 * *            每月1号和15号的凌晨5点0分执行命令
    40 4 * * 1-5            每周一到周五的凌晨4点40分执行命令
    */10 4 * * *            每天凌晨4点开始,每隔10分钟执行一次命令
    0 0 1,15 * 1            每周一、每月1号和15号的0点0分执行命令(最好不要这样写,因为它们定义的都是天,非常容易混淆)
    
    ######### 套路 #########
    (1) 编写文件
    (2) 给文件添加 x 执行权限
    (3) 将文件添加到任务调度中
    
    
    

    驱动器标识符

    
    ######### 驱动器标识符 #########
    
    # 磁盘标识符 disk
    [设备类型][磁盘类型]
    # 分区标识符 part
    [设备类型][磁盘类型][分区号]
    
    # 例如
    hdc     IDE硬盘,辅助主盘
    sda     SCSI硬盘,基本盘
    hdb2    IDE硬盘,基本从属盘,第二个主分区或拓展分区
    sda1    SCSI硬盘,基本盘,第一个主分区或拓展分区
    sdd5    SCSI硬盘,辅助从属盘,第五个逻辑分区
    
    
    ######### 设备类型 #########
    
    IDE硬盘       hd
    SCSI硬盘      sd
    
    
    ######### 磁盘类型 #########
    
    a       基本盘
    b       基本从属盘
    c       辅助主盘
    d       辅助从属盘
    
    
    ######### 分区号 #########
    
    前四个分区用数字 1 到 4 表示,它们是主分区或拓展分区,从 5 开始是逻辑分区
    
    
    

    查看磁盘块列表

    
    # 查看块列表
    lsblk
    
    # 查看块列表,以文件系统的方式
    lsblk -f
    
    

    添加硬盘并挂载分区

    
    ######### 套路 #########
    (1) 为机器添加硬盘(关机添加 / 添加后重启)
    (2) 创建分区
    (3) 格式化分区(创建文件系统)
    (4) 挂载分区(重启后失效)
    (5) 设定自动挂载分区(永久挂载,重启后不会失效)
    
    
    ######### 创建分区 #########
    
    # 进入文件磁盘模式
    fdisk /dev/[磁盘标识符]
    
    # 获取帮助
    m
    # 创建新分区
    n
    # 类型为主分区
    p
    # 保存分区表并退出
    w
    
    
    ######### 格式化分区 #########
    
    # 创建文件系统,类型为 ext4
    mkfs -t ext4 /dev/[分区标识符]
    
    
    ######### 挂载分区 #########
    
    # 将文件系统挂载到指定目录,使其形成关联
    mount /dev/[分区标识符] [目录]
    
    
    ######### 设定自动挂载分区 #########
    
    # 修改 /etc/fstab 文件系统表
    vim /etc/fstab
    
    # 以下内容 2 选 1 添加即可
    # 文件系统          挂载点     类型      选项      dump    pass
    /dev/[分区标识符]    [目录]    ext4    defaults    0   0
    UUID=[分区的UUID]    [目录]    ext4    defaults     0    0
    
    # 挂载 /etc/fstab 中所有的文件系统
    mount -a
    
    
    ######### 卸载分区 #########
    
    umount /dev/[分区标识符]
    umount [目录]
    
    
    
    

    磁盘情况查询

    
    # 查看磁盘文件系统使用情况
    #   -l  将列表限制为本地文件系统
    #   -h  以更友好的方式显示空间大小
    df -lh
    
    
    # 查看指定目录的使用情况
    #   -h                  以更友好的方式显示空间大小
    #   -a                  列出明细,所有文件
    #   --max-depth=数值      列出明细,子目录的深度
    #   -c                  列出明细,并统计总用量
    #   -s                  不列出明细,仅统计总用量
    #   列出明细 与 不列出明细 是互斥的
    du [选项] [目录]
    
    
    

    统计行数

    
    #   -l      打印换行符个数
    
    # 打印每个文件的换行符个数、字数和字节数
    wc [选项]
    
    

    统计磁盘情况的实用指令

    
    # 统计 /home 目录下文件的个数
    ls -al /home | grep "^-" | wc -l
    # 统计 /home 目录下子目录的个数
    ls -al /home | grep "^d" | wc -l
    # 统计 /home 目录下文件的个数,包括子目录内的
    ls -alR /home | grep "^-" | wc -l
    # 统计 /home 目录下子目录的个数,包括子目录内的
    ls -alR /home | grep "^d" | wc -l
    # 以树状显示 /home 的目录结构
    tree /home
    
    

    配置网络

    
    # Ubuntu 20.04.1 LTS
    
    # 修改 /etc/netplan/01-network-manager-all.yaml 配置文件
    vim /etc/netplan/01-network-manager-all.yaml
    
    
    
    # YAML
    
    # 修改为以下内容
    network:
      version: 2
      renderer: NetworkManager
      ethernets:
        ens33:
          dhcp4: false
          addresses: [本机ip地址/子网掩码位数]
          gateway4: 网关ip地址
          nameservers:
            addresses: [网关ip地址]
    
    
    
    # 应用该配置
    netplan apply
    
    

    查看进程

    
    #   -a  查看当前终端的所有进程
    #   -u  以用户的格式显示进程
    #   -x  查看后台进程
    
    # 查看进程
    ps -aux
    
    USER            用户名
    PID             进程ID
    %CPU            CPU占用百分比
    %MEM            内存占用百分比
    VSZ             虚拟内存占用(单位:KB)
    RSS             物理内存占用(单位:KB)
    TTY             使用的终端
    STAT            进程状态( S:睡眠  s:该进程是会话的先导进程  N:进程拥有比普通优先级更低的优先级  R:正在运行  D:短期等待  Z:僵死进程  T:被跟踪或者被停止 )
    START           启动时间
    TIME            占用CPU的总时间
    COMMAND         进程执行时的命令行
    
    
    #   -e  查看所有进程
    #   -f  以全格式的方式显示
    
    # 以全格式的方式查看进程
    ps -ef
    
    UID             用户ID
    PID             进程ID
    PPID            父进程ID
    C               CPU用于计算执行优先级的因子(数值越大,优先级越低,代表该进程时CPU密集型运算;数值越小,优先级越高,代表该进程是I/O密集型运算)
    STIME           进程的启动时间
    TTY             终端名称
    TIME            CPU时间
    CMD             启动进程时所用的命令和参数
    
    
    # 查看进程树
    #   -p      显示进程的PID
    #   -u      显示进程所属的用户
    pstree [选项]
    
    

    终止进程

    
    #   -9      强制终止进程
    
    # 终止单个线程
    kill [选项] [进程号]
    
    # 终止所有匹配的线程(支持通配符)
    killall [进程名称]
    
    

    服务

    
    # 服务本质就是进程
    
    # 查看所有服务的状态
    service --status-all
    
    # 更改指定服务的状态
    #   start           启动服务
    #   stop            停止服务
    #   reload          重载服务
    #   force-reload    强制重载服务
    #   restart         重启服务
    #   try-restart     尝试重启服务
    #   status          查看服务状态
    service [服务名称] [操作]
    
    
    ######### 例子 #########
    
    # 启动防火墙服务
    service ufw start
    # 关闭 SSH 服务
    service ssh stop
    
    

    防火墙

    
    # 启用/禁用防火墙
    ufw enable|disable
    # 查看防火墙状态
    ufw status
    # 默认允许/拒绝所有连接
    ufw default allow|deny
    
    # 允许/拒绝指定端口
    ufw allow|deny [端口号、端口号/tcp|udp、服务名]
    # 删除允许/拒绝指定端口
    ufw delete allow|deny [端口号、端口号/tcp|udp、服务名]
    
    # 允许/拒绝指定ip地址
    ufw allow|deny from [ip地址]
    # 删除允许/拒绝指定ip地址
    ufw delete allow|deny from [ip地址]
    
    # 允许/拒绝指定ip地址的tcp/upd连接指定端口
    ufw allow|deny [proto tcp|udp] from [ip地址/子网掩码位数] to [any|本地ip地址] port [端口号、端口号/tcp|udp、服务名]
    # 删除允许/拒绝指定ip地址的tcp/upd连接指定端口
    ufw delete allow|deny [proto tcp|udp] from [ip地址/子网掩码位数] to [any|本地ip地址] port [端口号、端口号/tcp|udp、服务名]
    
    # 查看协议对应的端口
    less /etc/services
    
    ######### 案例 #########
    
    # 启用防火墙
    ufw enable
    # 默认拒绝所有连接
    ufw default deny
    
    # 允许 80 端口
    ufw allow 80/tcp
    # 允许 22 端口
    ufw allow 22
    # 拒绝 21 端口
    ufw deny 21
    # 允许 smtp 端口
    ufw allow smtp
    # 删除允许 110 端口
    ufw delete allow 110
    # 允许 17.16.10.2 访问 192.168.199.12 的 110 端口
    ufw allow from 17.16.10.2 to 192.168.199.12 port 110
    # 允许 192.168.1.0/24 网段的 tcp 包访问本机的 25 端口
    ufw allow proto tcp from 192.168.1.0/24 to any port 25
    
    

    服务的运行级别

    
    # 查看服务的运行级别,以图形化的方式
    sysv-rc-conf
    # 查看服务的运行级别,以列表的方式
    sysv-rc-conf --list
    #  设置服务在所有运行级别下自启动/关闭自启
    sysv-rc-conf [服务名称] on|off
    # 设置服务在指定的运行级别下自启动/关闭自启
    sysv-rc-conf --level [运行级别] [服务名称] on|off
    
    
    ######### 案例 #########
    
    # 查看 ssh 服务的运行级别
    sysv-rc-conf --list | grep ssh
    
    # 更改 ssh 服务在运行级别 5 的状态为关闭自启
    sysv-rc-conf --level 5 ssh off
    
    # 更改 ufw 服务在所有的运行级别为自启动
    sysv-rc-conf ufw on
    
    

    动态监控进程

    
    # 动态监控进程
    top
    
    
    ######### 交互操作 #########
    
    d       指定top命令每隔几秒更新(默认是3秒)
    i       不显示任何闲置或僵死进程
    u       仅显示指定用户的线程
    k       终止指定PID的线程
    P       以CPU使用率排序
    M       以内存使用率排序
    N       以PID排序
    q       退出top
    
    

    查看网络情况

    
    #   -a      查看所有
    #   -n      显示ip地址,而不是域名
    #   -p      显示PID
    
    # 查看网络情况
    netstat -anp
    
    

    Shell编程

    注意事项

    
    1) 脚本开头为 #!/bin/bash
    2) 脚本需要有 x 执行权限
    
    

    执行

    
    # 脚本在当前目录下
    ./脚本名称.sh
    sh ./脚本名称.sh
    
    # 脚本不在当前目录下
    /home/脚本名称.sh
    sh /home/脚本名称.sh
    
    

    变量

    
    1) 变量名称可以由字母、数字、下划线组成,但不能以数字开头
    2) 等号两侧不能有空格
    3) 变量名称一般习惯为大写
    
    
    
    # 定义变量
    变量名=值
    
    # 撤销变量
    unset 变量名
    
    # 定义静态变量(不能被 unset 撤销)
    readonly 变量名
    
    # 使用变量(系统变量和用户自定义变量都可以这样使用)
    $变量名
    ${变量名}
    
    # 将命令执行后的结果赋值给变量
    变量名=`命令`
    变量名=$(命令)
    
    
    #!/bin/bash
    
    # 变量
    
    echo "PATH=$PATH"
    echo "USER=$USER"
    
    A=0
    echo "A=$A"
    unset A
    
    readonly B=2
    echo "B=$B"
    #unset B
    
    USER_HOME_LIST=`ls -lh ~`
    echo "当前用户的目录内容:"
    echo "$USER_HOME_LIST"
    
    ROOT_HOME_LIST=$(ls -lh /root)
    echo "root用户的目录内容:"
    echo "$ROOT_HOME_LIST"
    
    

    环境变量

    
    # 将变量导出,使其成为环境变量
    export 变量名=值
    
    # 让修改后的配置文件立即生效
    source 配置文件
    
    
    #!/bin/bash
    
    export MY_ENV="aaa"
    echo "MY_ENV=$MY_ENV"
    
    

    注释

    
    # 单行注释
    
    :<<!
    多行注释
    !
    
    

    位置参数变量

    
    $n      功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
    $*      功能描述:代表除命令本身的所有参数,会把这些参数当作一个整体看待
    $@      功能描述:代表除命令本身的所有参数,不过会把这些参数区分对待
    $#      功能描述:代表除命令本身的所有参数的个数
    
    
    #!/bin/bash
    
    echo "命令本身:$0"
    echo "第一个参数:$1"
    echo "第二个参数:$2"
    echo "整体:$*"
    echo "区别对待:$@"
    echo "参数个数:$#"
    
    

    预定义变量

    
    $$      功能描述:当前进程的进程号
    $!      功能描述:后台正在运行的最后一个进程的进程号
    $?      功能描述:最后一次执行命令的返回状态。为0代表上一个命令正确执行了;非0代表上一个命令执行不正确
    
    
    #!/bin/bash
    
    echo "当前进程的进程号:$$"
    
    ./var_shell.sh &
    echo "最后一个进程的进程号:$!"
    
    TEMP=$(ls)
    unset TEMP
    echo "最后一次执行命令的返回状态:$?"
    
    

    运算符

    
    # 语法1
    $((运算式))
    
    # 语法2
    $[运算式]
    
    # 语法3
    # 注意:非数值符号的左右两边必须要有空格
    #   \*      乘号
    #   /       除号
    #   %       取余
    #   \(      左括号
    #   \)      右括号
    expr 运算式
    
    
    #!/bin/bash
    
    echo "(2+3)*4=?"
    
    A=$(((2+3)*4))
    echo "语法1:$A"
    
    B=$[(2+3)*4]
    echo "语法2:$B"
    
    C=`expr \( 2 + 3 \) \* 4`
    echo "语法3:$C"
    
    echo "两个参数之和:$[$1+$2]"
    
    

    条件判断

    if

    
    # 语法
    # 注意:条件前后要有空格
    if [ 条件 ] && [ 条件 ]
    then
        要执行的语句
    elif [ 条件 ] || [ 条件 ]
    then
        要执行的内容
    else
        要执行的内容
    fi
    
    #   非空返回true,可以使用 $? 验证(0为true,非0为false)
    #   [ "aaa" ]                               返回true
    #   [ ! "aaa" ]                             返回false
    #   []                                      返回false
    #   [ 条件 ] && [ 条件 ]                        并且
    #   [ 条件 ] || [ 条件 ]                        或者
    #   [ 条件 ] && echo ok || echo notOk         条件满足,执行后面的语句
    
    
    
    ######### 常用判断条件 #########
    
    !       取反
    
    =       字符串/数值之间的比较
    -lt     小于
    -le     小于等于
    -gt     大于
    -ge     大于等于
    -ne     不等于
    
    # 文件权限
    -r      有读的权限
    -w      有写的权限
    -x      有执行的权限
    
    # 文件类型
    -e      文件存在
    -f      文件存在,且是一个常规的文件
    -d      文件存在,且是一个目录
    
    
    #!/bin/bash
    
    if [ "ok" = "ok" ]
    then
        echo "ok等于ok"
    fi
    
    
    if [ 23 -ge 22 ]
    then
        echo "23大于等于22"
    fi
    
    
    if [ -e /root/install.log ]
    then
        echo "/root/install.log存在"
    fi
    
    
    echo "分数判断"
    if [ $1 -ge 90 ] && [ $1 -le 100 ]
    then echo "A"
    elif [ $1 -ge 80 ] && [ $1 -lt 90 ]
    then echo "B"
    elif [ $1 -ge 70 ] && [ $1 -lt 80 ]
    then echo "C"
    elif [ $1 -ge 60 ] && [ $1 -lt 70 ]
    then echo "D"
    else echo "E"
    fi
    
    

    case

    
    #   |       或者
    #   []      范围(与正则表达式的范围一致)
    #   ;;      相当于break
    #   *)      相当于default
    
    case $变量名 in
    值1 | 值2)
    如果变量的值为值1或值2,则执行语句
    ;;
    [值3])
    如果变量的值在范围值3中,则执行语句
    ;;
    *)
    如果变量的值都不是以上的值,则执行该语句
    ;;
    esac
    
    
    #!/bin/bash
    
    case $1 in
    "0" | "7")
        echo "周日"
    ;;
    "1")
        echo "周一"
    ;;
    "2")
        echo "周二"
    ;;
    "3")
        echo "周三"
    ;;
    "4")
        echo "周四"
    ;;
    "5")
        echo "周五"
    ;;
    "6")
        echo "周六"
    ;;
    *)
        echo "其他"
    ;;
    esac
    
    

    流程控制

    for

    
    # 语法1
    for 变量 in 值1 值2 值3...
    do
        要执行的语句
    done
    
    # 语法2
    for((初始值;循环条件;变量变化))
    do
        要执行的语句
    done
    
    
    #!/bin/bash
    
    for VAR_TEMP in "$*"
    do
        echo "命令行输入的参数:$VAR_TEMP"
    done
    
    echo "======================"
    
    for VAR_TEMP in "$@"
    do
        echo "参数:$VAR_TEMP"
    done
    
    
    #!/bin/bash
    
    SUM=0
    for ((i=1;i<=100;i=$[$i+1]))
    do
        SUM=$[$SUM+$i]
    done
    echo "从1加到100的结果:$SUM"
    unset SUM
    
    

    while

    
    while [ 条件 ]
    do
        要执行的语句
    done
    
    
    #!/bin/bash
    
    SUM=0
    I=0
    while [ $I -le $1 ]
    do
        SUM=$[$SUM+$I]
        I=$[$I+1]
    done
    echo "1+...+$1的结果为:$SUM"
    unset I
    unset SUM
    
    

    读取控制台输入

    
    #   -p      在尝试读取之前输出 PROMPT 提示符并且不带
    #   -t      如果在 TIMEOUT 秒内没有读取一个完整的行则超时并且返回失败
    
    read -p "提示文本" -t 秒数 变量名
    
    
    #!/bin/bash
    
    read -p "请输入一个数字:" NUM1
    echo "你输入的数字:$NUM1"
    
    TIMEOUT=10
    read -p "请继续输入一个数字($TIMEOUT秒内输入):" -t $TIMEOUT NUM2
    echo "您输入的数字:$NUM2"
    
    

    路径剥离

    
    # 从路径中剥离目录和后缀(获取文件名)
    # 如果后缀存在,则去除;不存在则不去除
    basename [路径] [后缀]
    
    # 从路径中去除最后一个文件名或目录
    dirname [路径]
    
    

    自定义函数

    
    # 声明函数
    function 函数名()
    {
        要执行的语句
        return 整数(0为执行成功,其他均为失败)
    }
    
    # 调用
    函数名 [入参1] [入参2] ...
    
    
    #!/bin/bash
    
    function getSum()
    {
        SUM=$[$N1+$N2]
        echo "结果:$SUM"
        return 0
    }
    
    read -p "请输入第一个数字:" N1
    read -p "请输入第二个数字:" N2
    
    getSum $N1 $N2
    
    

    案例

    1) 每天凌晨 2:10 备份数据库 test_cloud 到 /data/backup/db
    2) 备份开始和备份结束能够给出相应的提示信息
    3) 备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 格式,比如:2018-03-12_230201.tar.gz
    4) 在备份的同时,检查是否存在10天前的备份文件,如果有就将其删除
    
    #!/bin/bash
    
    echo ""
    echo "==================== 备份开始 ===================="
    echo ""
    
    # 备份路径
    BACKUP_PATH="/data/backup/db"
    # 备份的文件名
    BACKUP_FILENAME="$(date "+%Y-%m-%d_%H%M%S")"
    # 备份文件路径
    BACKUP_FILE_PATH="${BACKUP_PATH}/${BACKUP_FILENAME}"
    
    # 判断临时备份目录是否存在,若不存在则创建
    if [ ! -e "${BACKUP_FILE_PATH}/" ]
    then
        mkdir -p "${BACKUP_FILE_PATH}/"
    fi
    
    # 数据库服务器域名/ip地址
    DATABASE_HOSTNAME="localhost"
    # 端口号
    DATABASE_PORT=3306
    # 用户名
    DATABASE_USERNAME="root"
    # 密码
    DATABASE_PASSWORD="root"
    # 数据库名称
    DATABASE_NAME="test_cloud"
    
    # 备份数据库
    # 将sql通过gzip进行压缩,然后将压缩后的数据写入到 .sql.gz 文件中
    mysqldump -h${DATABASE_HOSTNAME} -P${DATABASE_PORT} -u${DATABASE_USERNAME} -p${DATABASE_PASSWORD} ${DATABASE_NAME} | gzip > "${BACKUP_FILE_PATH}/${BACKUP_FILENAME}.sql.gz"  
    
    # 打包
    cd "${BACKUP_PATH}"
    tar -zcvf "${BACKUP_FILENAME}.tar.gz" "${BACKUP_FILENAME}/"
    
    # 删除文件夹
    rm -rf "${BACKUP_FILENAME}/"
    
    # 如果存在10天前的备份文件,则删除
    find "${BACKUP_PATH}" -mtime +10 -name "*.tar.gz" -exec rm -f {} \;
    
    echo ""
    echo "备份的文件:${BACKUP_FILE_PATH}.tar.gz"
    echo "==================== 备份结束 ===================="
    echo ""
    
    

    MySQL

    连接

    mysql -h主机名 -P端口号 -u用户名 -p密码
    

    备份数据库

    # 将数据库的完整SQL打印到当前控制台窗口
    mysqldump -h主机名 -P端口号 -u用户名 -p密码 数据库名
    

    相关文章

      网友评论

          本文标题:Linux 命令

          本文链接:https://www.haomeiwen.com/subject/stiztltx.html