Shell(一)

作者: 冰菓_ | 来源:发表于2022-07-11 00:38 被阅读0次

    一. Linux背景介绍

    Linux版本介绍

    内核版本分为三个部分,主版本号、次版本号、末版本号,次版本号是奇数为开发板,偶数为稳定版。
    发行版本
    RedHat:经过专业测试
    Fedora:社区发行,版本较新,但是没有经过专业测试。(也是redhat发行)
    CentOS:用RedHat的源代码编译,但是把RedHat的商标等去掉。但是没有一些技术支持。
    桌面安装:Debian,Ubuntu

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

    二. 系统命令

    帮助命令

    man 是 manual 的缩写
    man 帮助用法演示
        #man ls
    man 也是一条命令,分为9章,可以使用man命令获得man的帮助
        #man 7 man
    
    help
    shell(命令解释器)自带的命令成为内部命令,其他的是外部命令
    内部命令使用 help 帮助
        #help cd
    外部命令使用help帮助
        #ls --help
    
    可以通过type来判断一个命令是内部还是外部命令
        #type ls
        #type cd
    

    文件管理

    显示当前的目录
    pwd 显示当前的目录名称
    
    文件查看
    ls 查看当前目录下的文件
    ls /  /root    这样会同时查看根目录和 /root目录下的文件
    常用参数
        -l 长格式显示文件
        -a 显示隐藏文件
        -r 逆序显示(默认按照文件名排序)
        -t 按照时间顺序显示   ls -l -r -t (会按照时间逆向排序) ls -lrt
        -R 递归显示    -h 人性化显示、    -d 只显示目录
    
    更改当前的操作目录
    cd 更改当前的操作目录
    
    cd /path/to/... 绝对路径
    cd ./path/to/... 相对路径
    cd ../path/to/... 相对路径
    
    目录文件的创建与删除
    mkdir  建立空目录
    mkdir a
    
    常用参数
        -p  递归创建多级文件夹
    
    rmdir 删除空文件夹
    rmdir a
    
    rm 可以删除非空目录及文件
    
    常用参数
        -r 删除目录
        -f 强制删除,不提示
        需要注意,rm -rf 后面可以跟多个目录
        不要出现 rm -rf / usr 这种,会从根目录开始删除
    
    复制和移动目录
    cp 复制文件和目录
    cp /root/a /tmp
    
    常用参数
        -r/R 递归复制目录
        -v 显示过程
        -p 保留文件原有更新时间(属性)
        -a 时间戳+所有权+复制连接文件属性而非档案本身    -f 强行覆盖    -i 覆盖之前先行提示
    
    mv 移动文件或者重命名
    mv /a /othera
    mv /a /tmp
    mv /a /tmp/b(移动+重命名)
    
    常用参数
        -i 覆盖文件前提示
    
    

    通配符

    常用通配符:
      * 匹配任何字符串
      ? 匹配1个字符串
      [xyz] 匹配xyz任意一个字符
      [a-z] 匹配一个范围
      [!xyz]或者[^xyz] 不匹配
    

    Linux Shell 通配符

    文本内容查看👍

    cat 文本内容显示到终端
        显示全部
    head 查看文件开头
        head test.txt  默认查看前10行
        head -5 test.txt 
        head -c 20 runoob_notes.log  显示文件前 20 个字节
    
    tail 查看文件结尾
        tail -1000f catalina.out
        常用参数 
        -f 文件内容更新后,显示信息同步更新
    
    wc 统计文件内容信息    
        wc -l /tmp/test.txt    查看文件有多少行
        -c或--bytes或——chars:只显示Bytes数;
        -l或——lines:只显示列数;
        -w或——words:只显示字数。
    
    more 分行显示 
    less
    

    打包和压缩

    最早的Linux备份介质是磁带,使用的命令是tar
    可以打包后的磁带文件进行压缩储存,压缩的命令是 gzip 和 bzip2
    经常使用的扩展名是 .tar.gz  .tar.bz2  .tgz
    tar 打包命令
    常用参数
        c 打包
        x 解包
        f 指定操作类型为文件       v 显示进度    P 使用绝对路径
    打包
    tar cf /tmp/etc-backup.tar /etc      把  /etc 这个文件夹打包放在/tmp/etc-backup.tar会提示,但是也能成功:tar: Removing leading `/' from member names
    
    tar cPf /tmp/etc-backup.tar /etc      使用绝对路径 (没有提示)
    tar czf /tmp/etc-backup.tar.gz /etc  (tar集成了gzip和bzip2)
    tar cjf /tmp/etc-backup.tar.bz2 /etc  (压缩比例更高)
    
    解包
    tar xf /tmp/etc-backup.tar -C /root  把 tar包解压到 /root 目录下
    tar zxf /tmp/etc-backup.tar.gz -C /etc
    tar zjf /tmp/etc-backup.tar.gz -C /etc
    

    Vi👍

    多模式产生的原因
    四种模式:
        正常模式(Normal-mode)
        插入模式(Insert-mode)
        命令模式(Command-mode)
        可视模式(Visual-mode)
    
    i 进入插入模式
    i是当前光标
    I是光标当行开头
    a是光标后一位
    A是光标当行结尾
    o下一行,会产生一个空行
    O上一行,会产生一个空行
    
    v进入可视模式
    
    :进入命令模式
    
    esc返回正常模式
    
    正常模式下:
    hjkl可以控制上下左右
    
    yy表示复制当行,p可以粘贴
    3yy表示复制三行
    y$ 表示复制从光标到当行结尾
    dd d$表示剪切
    
    操作错误,u可以撤销,ctrl+r重做
    x表示删除当前光标的字符
    r可以替换当前字符
    
    :set nu 可以查看目前是第几行
    数字 + G可以到数字对应的行
    g移动到第一行
    G移动到最后一行
    
    
    ^来到光标所在行的开头,$来到光标所在行的结尾
    
    
     命令模式
    :w /root/test.txt   文件新建的,可以保存一个新文件
    :w 文件已经存在的情况下,保存
    :wq 保存退出
    :q! 强制退出
    
    :! 执行linux命令,看完后回车重新回到vim
    /x  查找x字符,n查找下一个,shift+n上一个
    :s/old/new 用新字符替换旧字符(只正对光标所在的行)
    :%s/old/new 用新字符替换旧字符(整个文本,但只替换一个)
    :%s/old/new/g 用新字符替换旧字符(整个文本,全部替换)
    :3,5s/x/X/g 3-5行内全部替换,替换一个就去掉g
    
    :set nu 显示行号
    :set nonu 不显示行号
    
    以上是单次修改的,如果要修改默认配置
    vim /etc/vimrc
    
    
    可视模式
    三种进入可视模式的方式
    v 字符可视模式
    V 行可视模式
    ctrl + v 块可视模式
        配合d和I(大写i)命令可以进行块的便利操作
    
    需要在块的所有行之前加入一些字符,选中块,I的时候会在选中的块的第一行的第一个光标处,输入字符,连续两次esc。
    选中块,d,然后选中的块就会被删除
    
    

    注意一下替换命令的使用

    用户与权限管理

    useradd 新建用户
        useradd dongye(可以用 id dongye 来验证是否存在)
        创建一个用户后,自动在 /home建立家目录,并且创建一些隐藏文件。同时,在 /etc/passwd 这个文件里会加入新用户dongye的数据,/etc/shadow里面也有会相关数据(密码相关)。如果没有组的话,创建一个同名的组。
    userdel 删除用户
        userdel dongye
        userdel -r dongye 同时删除家目录
    passwd 修改用户密码
        passwd dongye
        passwd更改当前用户密码
        /etc/passwd 和 /etc/shadow 里面的数据也被删除
    usermod 修改一个用户账户
        usermod -d /home/other dongye  家目录从 /home/dongye 改成 /home/other
    chage 修改用户生命周期    设置用户密码的过期时间,甚至用户本身的过期时间
    

    组管理命令

    groupadd 新建用户组
        groupadd group1
        useradd user1
        usermod -g group1 user1 把user1这个用户的组改成group1
        useradd -g group1 user2 新建用户user2时就把它放到group1组下
    groupdel 删除用户组    groupdel group1 删除组group1
    

    用户切换

    su 切换用户
        su - USERNAME 使用 login shell 方式切换用户
        su USERNAME 不完全切换,比如还是在 /root下而不会自动跳转到用户家目录
    
    sudo 以其他用户身份执行命令
        visudo 设置需要使用sudo的用户(组)
    

    用户和用户组的配置文件介绍

    /etc/passwd 用户配置文件,7个字段
    
    user3:x:1003:1003::/home/user3:bin/bash
    user3:用户名称
    x:是否需要密码验证,x表示需要,空表示不需要
    1003:用户的uid,用户的id信息,唯一识别用户的标识。root是0。
    1003:用户的gid,表示组id信息
    第五个字段:注释
    /home/user3:家目录
    /bin/bash:用户登录后的命令解释器。/sbin/nologin 表示不能登录
    
    /etc/shadow 保存用户和用户密码相关信息的
    第一个字段:用户名称
    第二个字段:用户加密过后的密码(看到也没用,经过处理,即使相同的密码也会显示不同)
    
    /etc/group 用户组相关的配置文件,4个字段
    group:x:10:another
    group:组的名称
    x:是否需要密码验证
    10:gid
    another:其他组设置,说明another这个用户的第二个组是group比如输入 id user1uid=1001(user1) gid=1001(group1) 组=1001(group1)id anotheruid=1002(another) gid=1002(another) 组=1003(group)  查找another信息,发现他的第二个组是group
    
    

    文件和目录的权限表示方法👍

    文件类型
    -    普通文件
    d   目录文件
    b   块特殊文件
    c   字符特殊文件
    l    符号链接
    f    命名管道
    s    套接字文件
    
    
    文件权限的表示方法
    
        字符权限表示方法
        r    读
        w    写
        x    执行
    
        数字权限的表示方法
        r=4
        w=2
        x=1
    
    文件权限的表示方法
    rwxrwxrwx
    第一个表示文件属主的权限,第二个表示文件属组的权限,第三个表示其他用户的权限
    
    创建新文件有默认权限,根据umask值计算,属主和属组根据当前进程的用户来设定
    
    
    目录权限的标识方法
    x    进入目录
    rx   显示目录内的文件名
    wx  修改目录内的文件名
    
    

    文件权限的修改方法和数字表示方法

    修改权限命令(测试的时候别用root,root不受限制)
    
    chmod    修改文件、目录权限
        chmod u+x /tmp/testfile    u表示属主
        chmod u=rwx /tmp/testfile  
        chmod g-r  /tmp/testfile   g表示属组
        chmod 0-r /tmp/testfile    o表示其他用户
        chmod a+r /tmp/testfile   a表示所有
        chmod 755 /tmp/testfile如果属主没有权限,所属的组有权限,以属主为准,还是没有权限。
    chown    更改属主、属组
        chown user1 /test   把test这个目录的属主改成user1
        chown :group /test   把test这个目录的属组给成group    chown user1:group /test   一起修改
    chgrp    可以单独更改属组、不常用
    
    linux一般创建一个文件默认会赋予666权限,然后根据用的umask值来计算。
    用户默认umask值为022,所以一般是 666-022=644,对应rw-r--r--
    

    注意:目录权限的标识方法...

    特殊权限

    SUID  用于二进制可执行文件,执行命令时取得文件属主权限
        如,/usr/bin/passwd
    
    SGID  用于目录,在该目录下创建新的文件和目录,权限自动更改为该目录的属组
        文件共享时使用
    SBIT  用于目录,该目录下新建的文件和目录,仅root和自己可以删除
        如 /tmp
    

    三. 网络管理

    网络状态查看

    net-tools VS iproute
    
    1. net-tools
        ifconfig
        route
        netstat
        
    2. iproute2
        ip
        ss
    
    网卡名称
    ifconfig查看网卡名称
            · eth0 第一块网卡(网络接口)
            · 你的第一个网络接口可能叫做下面的名字
                · eno1 板载网卡
                · ens33 PCI-E网卡
                · enp0s3 无法获取物理信息的 PCI-E 网卡
                · CentOS7使用了一致性网络设备命名,以上都不匹配则使用eth0
     
         当工作中大量管理网卡,所有设备的网卡最好都是以 eth0 命名,这样可以批量操作。
         网络接口命名修改
         网卡命名规则受 biosdevname 和 net.ifnames 两个参数影响
         编辑 /etc/default/grup 文件,增加 biosdevname=0 net.ifnames=0
         更新 grub
             # grub2-mkconfig -o /boot/grub2/grub.cfg
         重启
             # reboot
    
         组合,biosdevname=0 net.ifnames=0,则网卡名为 eth0
                  biosdevname=1 net.ifnames=0,则网卡名为 em1
                  biosdevname=0 net.ifnames=1,则网卡名为 ens33
    
    ifconfig
    普通用户要使用ifconfig,要使用 /sbin/ifconfig
    如果只想要看某一张网卡,可以 ifconfig 网卡名
    
    mii-tool eth0  查看网卡物理连接情况
    route -n 查看网关(路由),使用 -n 参数不解析主机名(把ip解析成域名)
    
    网络配置命令
    ifconfig <接口> <IP地址> [netmask 子网掩码]      设置网卡的ip地址
    ifup <接口>    启用网卡
    ifdown <接口>    禁用网卡
    
    网关配置命令
    添加网关
    route add default gw <网关ip>
    route add -host <指定ip> gw <网关ip>
    route add -net <指定网段> netmask <子网掩码> gw <网关ip>
    

    网络故障排除

    ping 检测是否连接到主机
        ping www.baidu.com 
    traceroute  跟踪当前主机到目标主机的网络状态,-w 1超时最多等1秒
        traceroute -w 1 www.baidu.com
        
    mtr  显示自己主机的网络状态
    
    nslookup  域名解析成ip
        nslooup www.baidu.com
    
    telnet  检测端口
        telnet www.baidu.com 80
    
    tcdump  网络抓包   -i any 抓取所有网卡里的数据包,-n 把域名解析成 ip ,port 80 抓取指定端口  host 10.0.0.1 抓取当前主机到某个主机的数据包
        tcpdump -i any -n port 80
        tcpdump -i any -n host 10.0.0.1
        tcpdump -i any -n host 10.0.0.1 and port 80
        tcpdump -i any -n host 10.0.0.1 and port 80 -w /tmp/filename 捕获并且保存
    
    netstat 监听地址 -n 域名转换,-t 显示tcp ,-p 进程 ,-l tcp状态 listen
        netstat -ntpl
    
    ss 跟netstat一样,参数也一样,显示的格式不一样
    
    网络服务管理程序分为两种,分别是 SysV 和 systemd(centos7)
    service network status|start|stop|restart
    
    网络配置文件
    
    /etc/sysconfig/network-scripts/ifcfg-eth0 (网卡配置项)
    /etc/hosts
    

    四. 软件包管理

    rpm
    rpm 命令常用参数
        -q 查询软件包    rpm -qa 查询所有软件包    rpm -q vim-common 查询某个软件包
        -i  安装软件包    rpm -i vim-enhanced-7.4.160-5.el7.x84_64.rpm  (要全称)
        -e 卸载软件包    rpm -e vim-enhanced   (只要名字,不需要版本号等)用 rpm 安装的问题:如果一个软件包依赖其他软件包,那么就会安装失败。需要操作者自己解决依赖关系。
    
    yum
    CentOS yum源
        http://mirror.centos.org/centos/7/
    国内镜像
        https://opsx.alibaba.com/mirror
    yum 配置文件
        /etc/yum.repos.d/CentOS-Base.repo
    
    可以修改配置文件
    [base]
    name=CentOS-$releasever - Base -mirrors.aliyun.com
    failovermethod=priority
    baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
                 http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
                 http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
    gpgcheck=1
    gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
    
    或者直接用别人已经写好的配置文件
    wget -O /etc/yum.repo.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo需要清除缓存yum makecache
    
    常用选项
    
    install 安装软件包
    remove 卸载软件包
    list |grouplist 查看软件包
    update 升级软件包
    
    其他安装方式
    二进制安装
    源代码编译安装
    
    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   (用2核编译)
    make isntall
    
    升级内核
    rpm 格式内核
        查看内核版本
            uname -r
        升级内核版本
            yum install kernel-3.10.0   这种方式一般不能升级到最新
            epel软件仓库会有较高的软件版本。yum install epel-release -y
        升级已安装的其他软件包和补丁
            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
    make allyesconfig (无脑全选)
    
    使用当前系统内核配置
    cp /boot/config-kernelversion.platform /usr/src/kernels/linux-5.1.10/.config
    
    
    查看cpu
    lscpu
    
    编译
    make j2 all
    
    安装内核
    make modules_install
    make install
    

    五. 进程管理

    进程的概念和查看进程
    进程-运行中的程序,从程序开始运行到终止的整个生命周期是可管理的
    
    查看命令
    ps
        -e 表示所有的终端运行的进程
        -f  显示更多信息,比如 UID、PPID(父进程)、CMD(命令的完整路径)
        -L  多显示 LWP ,线程信息
        ps -eLf  常用命令
    
    pstree  查看进程树
        
    top  动态查看进程信息top -p 进程号
    
    结论:
    进程也是树形结构
    进程和权限有着密不可分的关系
    
    top
    top示例
    第一行 
        34min 表示这台机器已经启动34分钟没有关机了
        2users 表示有2个用户登录
        平均负载:1分钟,5分钟,15分钟
    
    第二行
        一共运行的任务,几个在running ,几个在sleeping
    
    第三行(平均值,按 1 会把所有 逻辑cpu 的使用情况列出来)
        2.8 us  1.8 sy 97.7 id 0.0 wa
        us 表示用户计算,sy表示进程之间状态交互,id表示空闲,wa表示磁盘等待
    
    第四行
        内存状态
    第五行
        交换分区(虚拟内存)
    
    进程的优先级调整
    调整优先级
        nice 范围从 -20 到 19,值越小优先级越高,抢占资源就越多
            nice -n 10 ./rest.sh  启动的时候调整为 10
        renice 重新设置优先级
            renice -n 15 19312  已经处于启动的情况下进行调整。根据进程号
    进程的作业控制
        &符号,后台运行
            ./test.sh &
        jobs 把处于后台运行的程序调到前台显示
            jobs 能得到一个编号
            fg 编号,可以调到前台
        ctrl +z,把已经处于前台的程序调到后台,状态会stop
    
    信号
    信号是进程间通信方式之一,典型用法是:终端用户输入中断命令,通过信号机制停止一个程序的运行。
    使用信号的常用快捷键和命令
    kill -l 查看所有的信号
        SIGINT 通知前台进程组终止进程 ctrl + c,2号信号
        SIGKILL 立即结束程序,不能被阻塞和处理 kill -9 pid ,9号信号 
    
    守护进程和系统日志
    守护进程(精灵进程)
    
    使用 nohup 与 & 符号配合运行一个命令 (nohup进程不是守护进程)
        nohup 命令使进程忽略 hangup(挂起)信号。关掉终端这个进程依然可以运行,忽略输入并且把输出打印到 nohup.out
    守护进程(daemon)和一般进程有什么差别呢?
        开机自启,守护进程不需要终端,输出可以打印到特殊的文件中,进程所占用的目录是根目录。cd /proc/ 这个目录是内存信息,相应的进程会有进程号同名的目录。
    
    使用 screen 命令,进入screen环境后,如果远程连接断掉了,可以通过screen恢复工作现场
        screen 进入 screen 环境
        ctrl +a然后再单独按d退出(detached)screen 环境
        screen -ls 查看 screen 的会话
        screen -r sessionid 恢复会话系统日志文件 /var/log系统常规日志:messages内核运行情况:dmesg安全日志  secure定时任务日志 cron
    

    六. 内存和磁盘管理

    内存和磁盘使用率查看
    内存使用率查看
    free
        -m  以兆的方式显示
        -g   以G的方式显示,但是会被四舍五入。一般不用
    top
    
    磁盘使用率的查看
    fdisk
        -l 查看
        磁盘分区一块硬盘最多分15个分区
    df 既能够看到分区,又能够看到挂载到的目录
        -h 人性化可读
    du (实际占用的空间)
        -h 人性化显示
        -s  只显示总计
    du与ls的区别
        du 是实际占用的,ls算上空洞数据。
    
    常见文件系统
    Linux 支持多种文件系统,常见的有
    ext4(centos6)
    xfs(centos7)
    NTFS(需安装额外软件,window常用,有版权)
    
    磁盘分区和挂载
    常用命令
    fdisk
    mkfs
    parted
    mount
    
    
    常见配置文件
    /etc/fstab
    
    用fdisk创建分区(一个硬盘设备可以创建多个分区,也可以创建一个)
    1:fdisk -l 查看有几个硬盘设备及分区
    2:fdisk /dev/sdc    (比如有设备sdc,则可以针对sdc进行分区)
    3:之后 m 键是帮助
    4:n 表示新建一个分区
    5:新建分区时,需要选择主分区和扩展分区,其中 p表示主分区,最多有4个。e表示扩展分区(里面可以建立逻辑分区)。一般把一块硬盘划分为一个主分区。使用扩展分区时,只能建立3个主分区。
    6:选择区分编号1-4
    7:指定分区扇区大小,默认2048
    8:指定分区大小。默认全部。可以 + 20G等可以选择分区大小
    9:q 表示退出,分区不生效。w 表示生效
    
    建立完分区后,需要对分区进行格式化。
    
    mkfs.ext4  mkfs.xfs等命令
    mkfs.ext4 /dev/sdc1
    
    然后要进行操作,linux里都是文件级别的操作,需要挂载到某个目录下
    mkdir /mnt/sdc1
    mount /dev/sdc1 /mnt/sdc1 挂载上去
    对/mnt/sdc1的读写就会落入sdc1设备上
    
    1、一个硬盘
    2、进行分区
    3、格式化
    4、挂载
    5、对指定目录进行操作
    
    
    需要注意的事情:
    如果一个硬盘大于 2T ,不能使用 fdisk 进行分区,需要使用 parted
    parted /dev/sdd
    help 获取帮助
    
    mount 进行挂载是临时的,不是固化的
    vim /etc/fstab
    在文件中新增下面一句话
    /dev/sdc1 /mnt/sdc1 ext4 defaults(表示权限)0 0
    
    系统综合状态查询
    使用 sar 命令查看系统综合状态
        sar -u 1 10 CPU的查看,每隔1秒做采样,采样10次,
        sar -r 1 10 看内存
        sar -b 1 10 IO的情况(磁盘读写)
        sar -d 1 10 查看每块磁盘的读写
        sar -q 1 10 查看进程
    使用第三方命令查看网络流量
    yum install epel-release
    yum install iftop (网络情况)
    iftop -p (默认eth0)
    

    相关文章

      网友评论

        本文标题:Shell(一)

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