Linux常见命令简介

=========Linux运行级别===========
六种运行级别:
    0、关机
    1、单用户(可用来找回密码)
    2、多用户无网络
    3、多用户有网络(多用于工作环境)
    4、预留
    5、图形界面(多用于学习环境)
    6、重启
相关命令:
   a、切换当前运行级别:【init 3】(仅当前环境下生效,重启后失效)
   b、得到当前运行级别:【systemctl get-default】
   c、设置默认运行级别:【systemctl set-default graphical.target/multi-user.target】{永久生效}
   【注】可以在/etc/inittab中查看相关信息

=========vim命令说明===========
vim三种模式
   1.1 正常模式:按【ESC】键进入该模式,可以对文档进行复制、粘贴、删除等操作。
      1.1.1 复制当前行:yy    (y-yank) 
      1.1.2 复制当前n行:nyy    (如5yy,从光标所在行开始数5行进行复制,包括当前行)
      1.1.3 粘贴到指定行或具体位置:p    (如果复制的是整行则粘贴到光标所在行的下一行,若复制的是某段内容则粘贴到光标所在位置的后面) 
      1.1.4 删除/剪切当前行:dd
      1.1.5 删除/剪切当前n行:ndd
      1.1.6 可视化块操作:v        (移动左右方向键选中相应内容,按y复制选中内容,移动光标到指定位置按p粘贴)
      1.1.7 取消上次动作:u    (u-undo)
      1.1.8 将光标移动到第一行:gg
      1.1.9 将光标移动到最后一行:G

   1.2 插入模式:按【i】键进入该模式。

   1.3 命令模式:按【:】键进入该模式。可以对文档进行存盘、查找、退出、显示行号等操作。
      1.3.1 保存并退出:【:wq】                (w-write,q-quit)
      1.3.2 退出不保存:【:q!]               (q-quit)
      1.3.3 查找指定条件:【/要查找内容】    (n-查找下一个,N-查找上一个)
      1.3.4 替换【:[替换范围]s/被替换内容/新内容/flags】
        替换范围:无->当前行;m->第m行;m,n->第m到n行;%->整个文件
        flags:g(global)->替换一行中出现的所有匹配,否则只替换一行中的第一次配置内容;c(confirm)->替换前需要确认;i->忽略大小写
        s:s是substitute的缩写
      1.3.5 显示行号:【:set nu】        (nu-number)
      1.3.6 取消行号:【:set nonu】        (nu-number)
      1.3.7 取消高亮显示:【:set noh】
      1.3.8 将光标移动到指定行:【:行号】

   1.4 个性化配置
      配置文件:/etc/vimrc
      内容:增加如下内容
              set nu                " 设置显示行号
            set tabstop = 4        " 设置制表符的宽度为4个空格
            set shiftwidth=4    " 设置缩进时使用4个空格
            set autoindent      " 启用自动缩进
            set smartindent     " 启用智能缩进

=========Linux命令说明===========
一、开关机
   1.1 关机:
      1.1.1 shutdown -h now        参数:h->halt,now->马上,now可以改为具体数字表示n分钟后关机。
      1.1.2 halt            关机,但不关闭电源,尽量不用该命令
   1.2 重启:
      1.2.1 shutdown -r now        参数:r->reboot,now->马上,now可以改为具体数字表示n分钟后重启。
      1.2.2 reboot

二、用户
   2.1  切换用户:su - 用户名            (su-switch user,- 前后有空格的啊)
   2.2  注销用户:logout/exit
   2.3  新建用户:useradd 用户            (默认将该用户放入与该用户名相同的组中)
                  useradd -g 用户        (将该用户放入到指定组中)
   2.4  设置密码:passwd 用户
   2.5  删除用户:userdel 用户            (仅删除用户,不删除该用户的家目录及邮件目录等信息)
                  userdel -r 用户        (r-remove,将该用户的所有信息都删除)
   2.6  修改用户所在组:usermod -g 组 用户
   2.7  显示用户信息:id 用户
   2.8  查看当前用户:whoami            (该用户可能是后切换的)
   2.9  查看首次登录用户:who am i
   2.10 用户所在文件:/etc/passwd        (每行含义->用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell)
   2.11 密码所在文件:/etc/shadow
   2.12 sudo命令:模拟root来执行某些系统命令(/sbin),比如关机、重启、添加用户等
    root把某些系统命令赋给普通用户或组:visudo(实际上是修改/etc/sudoers)
    格式如下:
        root/#组    ALL=(ALL)    ALL
        用户名    IP地址【用户可在该IP的机器上执行命令】=(可使用身份)    具体命令
        如:lag    ALL=    /sbin/shutdown -h now    =>lag用户可以执行关闭linux命令
    sudo -l 可以查看root都赋予它哪些权限


三、组
   3.1 新建组:groupadd 组
   3.2 删除组:groupdel 组
   3.3 组所在文件:/etc/group            (每行含义->组名:口令:组标识号:组内用户列表)    

四、文件/目录
   4.1  显示当前目录:pwd            (pwd->print working directory)
   4.2  显示目录内容:ls -al            (a->all,l->list,可省略写ll)
   4.3  切换目录:cd                (cd ~ ->切换到当前用户的家目录,cd .. ->切换到上级目录)
   4.4  新建目录:mkdir -p 目录            (p->parents,有参数p可以新建多级目录,无参数p则只能建1级目录)
   4.5  删除空目录:rmdir 目录            (仅删除1级空目录,不实用)
   4.6  删除目录/文件:rm -rf 目录/文件        (rm->remove,r->recursion递归,f->force直接删除不显示是否删除等提示信息,连目录带里面的文件一起删除,慎用啊)
   4.7  创建空文件:touch 文件
   4.8  拷贝目录/文件:cp -r 源目录/文件 目标目录    (r->recursion递归)
        覆盖拷贝不提示:\cp -rf 源目录/文件 目标目录    (r->recursion递归,f-force强制覆盖不提示,因为cp默认使用的是别名【cp -i】,覆盖是要提示的,用\cp则不使用别名)
   4.9  移动或重命名目录/文件:mv 源目录/文件 新目录/文件
   4.10 查看文件内容:cat 文件            (参数n->带行号显示,|more 多屏显示,空格与ctrl+b翻屏)
   4.11 查看文件内容:less 文件            (PgUp/PgDn翻页,/查找内容,q退出,适合显示较大文件)
   4.12 查看文件内容:head -n 5 文件        (显示头5行文件内容,默认10行)
   4.13 查看文件内容:tail -n 5 文件        (显示尾5行文件内容,默认10行,多用于查看日志)
                      tail -f 文件        (监控文件变化,ctrl+c退出)
   4.14 输出内容到控制台:echo "内容"        (echo $PATH/HOSTNAME)
   4.15 输出重定向:>                (用新内容替换旧内容)
                    >>                (用新内容追加旧内容,如echo "hello" >> /root/111.txt)
   4.16 软链接:ln -s 源目录/文件 链接名    (ln->link,类似windows中快捷键方式,存放链接文件的路径)
   4.17 硬链接:ln 源文件 链接名        (类似C语言中指向某内存地址的2个指针,源文件与链接名的内容是一样的,任何一个修改另一个也跟着变化)
   4.18 删除软链接:rm 链接名            (千万不要加参数-r来删除软链接,因为该参数会删除软链接对应的目录/文件内容而不是删除软链接)
   4.19 删除硬链接:rm 链接名            (删除硬链接并不会影响另一个文件)
   4.20 查看历史命令:history 10        (查看最近执行的10个命令)
   4.21 执行历史命令:!10            (执行编号为10的历史命令)
   4.22 字符相关命令:
    4.22.1 cut [选项] 文件名        (d 分隔符->按指定分隔符来分割列delimiter;f 列号->提取第几列field。若2列之间用不固定的空格分隔的话该命令就不能用了)
           如:cat /etc/passwd|grep /bin/bash|grep -v root|cut -d ':' -f 1 => lag zs    查询所有普通用户
    4.22.2 printf '输出类型输出格式' 输出内容
        输出类型:
            %ns    (输出字符串,n-输出几个字符)
            %ni    (输出正数,n-输出几个数字)
            %m.nf    (输出浮点数,如%8.2f,输出8位数,其中6位整数2位小数)
        输出格式:
            \n    (换行)
            \r    (回车)
            \t    (TAB键)
    4.22.3 awk '条件1{动作1} 条件2{动作2} ...' 文件名
        如:df -h | awk '{printf $1 "\t" $5 "\t" $6 "\n"}'
                df -h|grep sda2|awk '{printf $5}'|cut -d '%' -f 1
            df -h|awk 'BEGIN{FS=" "}{printf $1 "\t" $2 "\n"}'        (FS="分割符",前面的BEGIN是在读取内容时先做点什么)

五、日期
   5.1 显示当前时间:date "+%Y-%m-%d %H:%M:%S"
   5.2 设置当前时间:date -s "2024-03-20 20:23:18"    (重启失效)
   5.3 显示日历:cal 2024            (显示2024年的日历)

六、搜索查找
   6.1 查找文件:find 搜索范围 -name 文件名    (从指定目录递归查找指定名称的文件,如:find /root -name hello*)
   6.2 快速定位:locate 文件名            (该命令自己建立数据库并在其中查找而不是遍历目录查找,因此要先执行updatedb建立/更新数据库。文件不能匹配通配符)
                 如: updatedb
                      locate hello.c
   6.3 过滤查找:grep [选项] 要查找内容 源文件    (n->显示行号,i->忽略大小写,v->反向匹配。在某文件或管道中查找内容)
                 如: grep -n "prin" /root/test/hello.c
                      cat /root/test/hello.c | grep -n "prin"
   6.4 查找命令所在位置:which 命令

七、压缩解压
   7.1 内部命令
       7.1.1 压缩:gzip 文件            (该命令只能压缩文件,不能压缩目录,要想压缩目录必须与tar联合使用,该命令默认不保留源文件)
       7.1.2 解压:gunzip 文件
       7.1.3 打包:tar [选项] xxx.tar.gz 打包内容    (tar将某目录下所有内容归档成一个.tar文件,然后用gzip将该文件压缩成.tar.gz文件来实现压缩目录)
                   如:tar -zcvf home.tar.gz /home    (z-用gzip压缩,c-建立新.tar文件,v-显示详细信息,f-指定压缩后文件名该参数一定要放到最后一个)
       7.1.4 拆包:tar [选项] xxx.tar.gz -C 拆包后存放路径
                   如:tar -zxvf home.tar.gz -C /root    (x-释放,C-指定释放路径,无则默认当前目录)
   7.2 外部命令
       7.2.1 压缩:zip [-r] xxx.zip file1 file2...    (该压缩格式与windows通用,若要压缩目录则加参数r。但该命令不是linux内部命令,需要安装)
       7.2.2 解压:unzip [-d] 解压后存放路径 xxx.zip    (默认解压到当前目录,该命令需安装)

八、权限管理(重点)
   8.1  修改文件所有者:chown 用户 文件1 文件2...    (仅修改文件的所有者而不会修改文件的所在组,目录可以加参数-R来递归把目录下所有文件一起修改)
   8.2  修改文件所在组:chgrp 组 文件1 文件2...        (仅修改文件所在组)
   8.3  权限符号:drwxr-xr-x                (共10位)
                  第0位:文件类型(-文件,d目录,l软链接,c字符设备文件如鼠标键盘,b块设备如硬盘)
                  第1~3位:文件所有者的权限        (r可读,w可写,x可执行)
                  第4~6位:文件所在组的权限
                  第7~9位:文件其他组的权限
    针对目录的权限符号含义:
                  r-可以读取查看目录内容,如ls
                  w-可以修改目录,如重命名目录,在目录内创建或删除文件
                  x-可以进入目录,如cd            (这个非常重要,若无该权限则目录就进不去,进不去目录就无法对目录内的文件做任何操作)
    针对文件的权限符号含义:            (该文件所在目录必须拥有x权限,否则无意义。连目录都进不去又如何能操作文件呢)
                  r-可以读取查看文件,如cat less head tail
                  w-可以修改文件,但但但不代表可以删除文件,想删除文件的前提是对该文件所在目录有w权限
                  x-可以执行文件
    修改权限:chmod
          第一种方式:用[+][-][=]来变更文件/目录权限    (u-所有者,g-所在组,o-其他组,a-所有人{包括ugo})
                  1)chmod u=rwx,g=rx,o=r 文件/目录    (-rwxr-xr--)
                  2)chmod o+w 文件/目录        (其他组增加w权限)
                  3)chmod a-x 文件/目录        (所有人都取消执行权限)
          第二种方式:用数字来变更文件/目录权限        (r=4,w=2,x=1;{数字1=x,2=w,3=wx,4=r,5=rx,6=rw,7=rwx}【记住:二进制000,2^2,2^1,2^0】)
                  chmod 751 文件/目录        (-rwxr-x--x)
   8.4 文件系统属性权限:chattr    (change file arrtibutes)
       语法:chattr [+-=] [选项]
         +  增加权限; - 删除权限  = 等于某权限
         i -> 文件:锁定该文件,只能看,其他什么也做不了。(针对root也生效)
              目录:只能修改该目录下的文件数据,不能建立或删除文件。
             举例:chattr +i /root/test/aaa.txt        (锁定该文件,root也改不了)
               lsattr /root/test/aaa.txt        (查看该文件的系统属性)
               chattr -i /root/test/aaa.txt        (恢复正常)
         a -> 文件:可增加文件内容,但不能删除或修改。
          目录:可以在该目录下新建或修改文件,但不能删除。
    
九、任务调度(计划任务)
   9.1 语法: crontab [选项]                    (e->编辑定时任务{edit},l-查询定时任务{list},r-删除定时任务{remove})
   9.2 说明:*/1 * * * * date "+\%F \%T" >> /tmp/mydate.txt    (五星上将,由于命令中有%,因此要用\转义,用#注释)
        第1颗星:分钟    取值范围0-59            
        第2颗星:小时    取值范围0-23
        第3颗星:天数    取值范围1-31
        第4颗星:月份    取值范围1-12
        第5颗星:星期    取值范围0-7            (0与7都代表周日)
            符号解析:* 任何时间。
                  , 不连续时间。如[10 8,12,16 * * * 命令]代表每天的8点10分,12点10分,16点10分都执行一次命令
                      - 连续时间。如[0 5 * * 1-5 命令]代表每周一到周五早上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            (每周1到周五的4点40分执行)
                  */10 4 * * *            (每天4点,每隔10分钟执行一次,即4:10,4:20,4:30,4:40,4:50,5点以后就不算了)
                  0 0 1,15 * 1            (每月的1号与15号还必须得是周一才在0点0分执行)

十、磁盘管理
   10.1 常识:主引导记录MBR{master boot record},位于硬盘的0柱面0磁头1扇区位置(主引导扇区),共512字节。
          分三部分。主引导程序、硬盘分区表DPT(disk partition table)与分区有效标识(55AA)。
              主引导程序占446字节,分区表占64字节(每个分区占16字节,因此最多可以分4区),分区有效标识占2字节(固定是55AA)。
          由上述得知分区表的划分,一块硬盘最多可以分为4个分区,就像windows中的C、D、E、F盘,我们称之为主分区。那如果我们想多划分几个分区怎么办呢?
          只要把某个主分区改为扩展分区就行了。即我们可以建立n个主分区(n<=3)+1个扩展分区。
          扩展分区是不能直接使用的,也无法格式化,我们将该扩展分区再划分为多个逻辑分区就绕过MBR的限制了。
   10.2 硬盘起名:在linux中一切皆文件。硬盘起名也是固定的。
          IDE硬盘:默认文件名为hdx(hd->hard disk,x是用字母来代表硬盘数。如第一块硬盘hda,第二块为hdb...)。
               硬盘划分的分区文件名hdxn(n-分区号,如第一块硬盘第1分区为hda1,第一块硬盘第2分区为hda2)。
          SCSI硬盘:默认文件名为sdx(sd->scsi disk,x是用字母来代表硬盘数。如第一块硬盘sda,第二块为sdb...)。
               硬盘划分的分区文件名sdxn(n-分区号,如第一块硬盘第1分区为sda1,第一块硬盘第2分区为sda2)。
   10.3 增加硬盘:新增加一个10G硬盘,则该文件名为sdb,将该硬盘划分为1个主分区2G和1个扩展分区8G,再将扩展分区划分为2个逻辑分区,各4G。
    10.3.1 显示块设备信息:lsblk [选项]    (lsblk->list block devices,参数f->显示文件系统相关信息,如类型、标签、UUID等)。
               通过该命令【lsblk】我们可以看到新增加的硬盘名称为sdb,但还没有分区,暂时不能使用。
    10.3.2 分区:fdisk 设备名        (fdisk /dev/sdb)
        10.3.2.1 输入n,创建新分区。再输入p创建主分区,分区号为1,起始扇区2048,默认回车,截止扇区要改为【+2G】,这第一个分区大小就固定了。
             分区大小=(截止扇区-起始扇区)* 512 / 1024 / 1024 / 1024 = 2G。可以输入p来查看该分区的详细信息。
        10.3.2.2 输入n,再输入e,创建扩展分区,分区号为2,一路默认回车,把硬盘剩余的8G空间都给它。
        10.3.2.3 输入n,再输入l,将扩展分区再划分为逻辑分区,默认分区号5,因为前4个号是给主分区与扩展分区预留的,逻辑分区必须从5开始。截止扇区改为【+4G】
        10.3.2.4 输入n,再输入l,创建逻辑分区,默认分区号为6,一路默认回车,将剩余空间都给它。
        10.3.2.5 输入w,将以上修改写入到硬盘中。
                 [注]如果输入错误时按退格键是不好用的,得按ctrl+Backspace才行。
        这时我们用lsblk -f查看就可以看到新增加的硬盘已经分好区了。但还没有UUID与挂载。
        UUID是某分区的唯一识别码,只有格式化后才有。
    10.3.3 格式化:mkfs -t 文件系统类型 分区块    (mkfs->make file system。文件系统类型用ext4)
        10.3.3.1 mkfs -t ext4 /dev/sdb1        (该命令执行完后用lsblk -f就可以查看到UUID了)
        10.3.3.2 mkfs -t ext4 /dev/sdb2        (出错了,因为sdb2是扩展分区,不能格式化)
        10.3.3.3 mkfs -t ext4 /dev/sdb5        (格式化逻辑分区)
        10.3.3.4 mkfs -t ext4 /dev/sdb6        (格式化逻辑分区)
        格式化完毕,只要与目录挂载就可以使用了。
    10.3.4 挂载:mount 设备文件 挂载目录
        10.3.4.1 mount /dev/sdb1 /newdisk1    (先建立目录/newdisk1,再挂载)
        10.3.4.2 mount /dev/sdb5 /newdisk5
        10.3.4.3 在挂载sdb6前先做个小实验。在目录/newdisk6中新建1个文件old.txt,由于此时该目录还未被挂载,所以该文件被存放在与/挂载的sda2中,
             回退到根目录下开始挂载。 mount /dev/sdb6 /newdisk6,此时再进入到newedisk6中查看,刚才新建的old.txt已经不存在了。
             我们再新建一个文件new.txt。
    10.3.5 卸载:umount 设备文件/挂载目录
        10.3.5.1 卸载sdb6:umount /dev/sdb6,卸载后我们进入newdisk6中发现new.txt文件不存在了,而old.txt文件回来了。哈哈
    10.3.6 永久挂载:用命令行挂载的方式在linux重启后会失效,只有修改配置文件才会永久生效。
        10.3.6.1 修改配置文件/etc/fstab        (fstab->file system table)
             vim /etc/fstab            (如UUID=477771fc-7c21-4fce-a137-37ec34c1c0f5 /boot ext4 defaults  1 2)
             该配置文件挂载行分6部分。
             10.3.6.1.1 分区设备文件或UUID,建议使用UUID(可以用lsblk -f查看)而不是设备文件,因为设备文件的顺序可以人为修改,比如把sdb1改为sdb3,
                    而配置表却没有同步修改则可能会导致系统崩溃。
             10.3.6.1.2 硬盘挂载点
             10.3.6.1.3 文件系统名称类型
             10.3.6.1.4 挂载参数
             10.3.6.1.5 分区是否被dump备份(0-不备份,1-每天备份,2-不定期备份)
             10.3.6.1.6 分区是否被fsck检测(0-不检测,其他数字代表检测优先级,1最高)
             如:/dev/sdb5    newdisk5    ext4    defaults    0 0
        10.3.6.2 自动生效:mount -a          (根据/etc/fstab内容自动挂载,永久生效,不用重启)
             该命令非常重要,必须执行,可以查看挂载是否正确,有错误可以马上修改,否则有错误重启后会导致系统崩溃。
        10.3.6.3 挂载配置文件出错导致系统崩溃:
             输入root密码进入系统,修改/etc/fstab配置文件即可。若该文件只读无法修改则执行命令【mount -o remount,rw /】重新把/对应分区挂载,有rw权限啊。
   10.4 磁盘情况查询:df -h                  (df->disk free,h-human) 
   10.5 目录情况查询:du [选项] 目录              (du-disk usage,h-human,a-包含目录内文件,c-显示汇总信息)
              如du -hac /root
   10.6 统计文件行数、字数、字节数:wc [选项] 文件名  (wc-word count,l-行数,w-字数,c-字节数)
              如 wc aaa.txt              (92 228 5744 aaa.txt,即92行,228个单词,5744字节大小)
        利用该命令也可以查看某目录有多少个文件或有多少个子目录。
    10.6.1 统计/opt下文件数:【ls -l /opt | grep "^-" | wc -l】    (其中"^-"正则表达式,表示过滤以-开头的内容)
    10.6.2 统计/opt下目录数:【ls -l /opt | grep "^d" | wc -l】
    10.6.3 统计/opt下文件数(包括子目录):【ls -lR /opt | grep "^-" | wc -l】    (参数R-递归查询子目录)
    10.6.4 统计/opt下目录数(包括子目录):【ls -lR /opt | grep "^d" | wc -l】
    10.6.5 以树状来显示目录结构:tree 目录           (tree是外部命令,得用yum install tree来安装才行)
                 
十一、网络配置
   11.1 linux网络连接方式与虚拟网卡对应关系:VMnet1对应linux的仅主机模式,VMnet8对应linux的NAT模式。
   11.2 查看并配置网络接口:ifconfig [选项]        (可用来查看linux的IP)
   11.3 测试网络是否畅通:ping 网址            (如果从linux虚拟机 ping windows主机不通有可能是因为windows的防火墙开着呢)
   11.4 固定IP                        (先用ifconfig查看IP,假设为192.168.126.130,现要改为固定IP为192.168.126.188)
    11.4.1 编辑网络配置文件/etc/sysconfig/network-scripts/ifcfg-ens33
        11.4.1.1 取消DHCP自动分配IP服务,改为静态分配    (BOOTPROTO="dhcp" => BOOTPROTO="static")
        11.4.1.2 增加固定IP                (IPADDR=192.168.126.188)
        11.4.1.3 增加掩码                (NETMASK=255.255.255.0)
        11.4.1.4 增加网关                (GATEWAY=192.168.126.2,与VMnet8中的配置一样)
        11.4.1.5 增加DNS域名解析(首选为1)        (DNS1=192.168.126.2) 
        11.4.1.6 生效
            11.4.1.6.1 即时生效 service network restart    (不用重启)
            11.4.1.6.2 重启生效 reboot
   11.5 查看主机名:hostname                (linux的主机名为lhw)
   11.6 修改主机名:/etc/hostname            (重启生效)
   11.7 关联主机名与IP
    11.7.1 windows中关联文件:c:\Windows\System32\drivers\etc\hosts        (增加linux的主机名与IP对应关系:192.168.126.188 lhw)
           这时在windows的dos窗口中ping linux的命令为:ping lhw,实际上是ping 192.168.126.188
    11.7.2 linux中关联文件:/etc/hosts                    (增加windows主机名与IP对应关系:192.168.126.1 lag,lag是windows主机名,ip是VMnet8IP)
           这时在linux终端中ping windows命令为:ping lag,实际上是ping 192.168.126.1

十二、进程管理
   12.1 进程含义:程序运行后会加载到内存中,这就是进程。进程名以d结尾表示这是守护进程,即后台进程(daemon)。
   12.2 查看进程:
    12.2.1 ps -ef                    (e-显示所有进程,f-全格式,ps-process status)
    12.2.2 ps -aux                    (a-显示所有进程,u-以用户格式显示,x-显示后台进程运行参数)
    12.2.3 进程显示内容
            USER    - 用户名称
               UID    - 用户ID
        PID    - 进程ID
        PPID    - 进程的父进程ID
        C    - CPU用来计算执行优先级的因子
        %CPU    - 占CPU百分比
        %MEM    - 占内存百分比
        VSZ    - 占虚拟内存大小(单位字节)
        RSS    - 占物理内存大小(单位字节)
        TTY    - 终端名称
        STAT    - 进程状态(S-睡眠,R-运行中,Z-僵尸进程)
        START    - 进程启动时间
        STIME    - 进程启动时间
        TIME    - 进程占用CPU时间
        COMMAND    - 进程启动所需的命令与参数
   12.3 目录树显示进程:pstree [选项]            (p-显示进程的PID,u-显示进程所属用户)
   12.4 杀死进程
    12.4.1 kill [-9] 进程ID                (-9强制杀死进程,该命令不会杀死该进程的子进程)
    12.4.2 killall 进程名                (杀死该进程及其所有子进程)

十三、服务管理
   13.1 服务含义:服务本质就是进程,运行在后台,通常监听某个端口,等待客户端请求(如mysqld、sshd、防火墙),因此又称为守护进程。
   13.2 服务命令:systemctl [选项] 服务名        (start-启动,stop-停止,restart-重启,status-状态)
          如:systemctl restart network.service    (重新启动linux的网络服务)
          systemctl能管理的服务在/usr/lib/systemd/system目录下
   13.3 自启动服务:
    13.3.1 查看所有服务自启动状态:systemctl list-unit-files
                   如:systemctl list_unit-files | grep firewalld.service    (查看防火墙是否自启动)
    13.3.2 设置服务自启动:systemctl enable 服务名
    13.3.3 关闭服务自启动:systemctl disable 服务名
    13.3.4 查看某服务是否自启动:systemctl is-enabled 服务名
    [注]以上自启动都是针对3与5这2个级别的,其他级别也没啥用。
   13.4 举例:
    查看当前防火墙状态,关闭防火墙,再重启防火墙。
    13.4.1 systemctl status firewalld
    13.4.2 systemctl stop firewalld
    13.4.3 systemctl start firewalld
   13.5 打开或关闭端口
    13.5.1 打开端口:firewall-cmd --permanent --add-port=端口号/协议
    13.5.2 关闭端口:firewall-cmd --permanent --remove-port=端口号/协议
    13.5.3 重新载入:firewall-cmd --reload
    13.5.4 查询端口:firewall-cmd --query-port=端口号/协议

十四、动态监控进程
   14.1 top [选项]                    (d-刷新秒数默认3秒,i-不显示闲置或僵尸进程,p-指定某进程ID并对其进行监控)
   14.1.1 交互操作
    14.1.1.1 P                     (根据CPU使用率排序)
    14.1.1.2 M                     (根据内存使用率排序)
    14.1.1.3 N                     (根据PID排序)
    14.1.1.4 u                     (仅显示某用户进程,输入u,然后再输入用户名。取消则输入u,再输入空格)
    14.1.1.5 k                     (杀死进程,输入PID,然后输入参数9,强制杀死进程)
    14.1.1.6 q                    (退出)

十五、监控网络情况
   15.1 netstat [-anp]                    (an-按一定顺序排列,p-显示PID。anp-一个苹果)

十六、软件包管理
   16.1 RPM:RedHat Package Manager的缩写,类似Windows中的setup.exe。
    16.1.1 查询指定包:rpm -q 软件包名    (rpm -qa | grep 软件包)
           如:rpm -q firefox            (firefox-60.2.2-1.el7.centos.x86_64)
           名称:firefox
           版本:60.2.2
           系统:1.el7.centos.x86_64    (1-发布次数,e17.centos-linux平台[这里指RHel7与centOS],x86_64硬件平台64位系统[i686、i386表示32位,noarch表示通用])
    16.1.2 查询包详细信息:rpm -qi 软件包名
    16.1.3 查询包中文件:rpm -ql 软件包名
    16.1.4 查询某文件归属于哪个包:rpm -qf 文件
    16.1.5 安装包:rpm -ivh 带路径的软件包全名        (i-install,v-verbose提示,h-hash进度条,记不住就记hiv-艾滋病,U-升级)
           16.1.5 依赖性:有些包需要先安装依赖的包或某些依赖的文件,如安装httpd时需要/etc/mime.types,我们不知道该文件在哪个包里,可以到www.rpmfind.net网站查。
    16.1.6 卸载包:rpm -e [--nodeps] 软件包        (e-erase,nodeps-强制删除,不考虑是否有依赖关系,就是卸啊)
    16.1.7 包名与包全名的区别:未安装前要使用带路径的全包名,安装后可以使用简略的包名了。
   16.2 YUM:Yellow dog Updater,Modified的缩写,yum是在网上的yum应用商店里下载软件。
    16.2.1 网络地址配置文件:/etc/yum.repos.d/目录下    (repository-仓库)
            内容:以CentOS-Base.repo为例
                [base]                (容器名称)
                name=CentOS-$releasever - Base    (容器说明)
                mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra    (镜像站点)
                #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/        (yum服务器源地址,与镜像网站二选一即可)
                gpgcheck=1        (1-RPM数字证书生效,0-RPM数字证书不生效)
                gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7        (数字证书公钥文件保存地址,不用动)
                enabled=1        (0-该容器不生效,其他-生效)
            光盘yum源:
                将/etc/yum.repos.d/下的所有文件的扩展名都改名或将他们移动到备份目录下,只保留CentOS-Media.repo。修改其内容
                将baseurl改为本地光盘挂载目录,其他2个地址注释掉,同时将enabled=0改为1。
    16.2.1 查询包:yum list/search 软件包
    16.2.2 安装包:yum [-y] install 软件包
    16.2.3 卸载包:yum [-y] remove 软件包        (yum卸载时会将相关依赖包都卸载,而这些依赖包可能有别的程序要使用,这有可能导致系统崩溃出问题)
十七、shell
    17.1 shell定义:命令行解释器。
    17.2 编写shell:
        17.2.1 以#!/bin/bash开头
            举例:vim hello.sh,内容如下
                    #!/bin/bash
                    echo "hello,world!"
        17.2.2 执行方式
            17.2.2.1 sh ./hello.sh
            17.2.2.2 ./hello.sh                    (该文件有可执行权限,一定要带路径)
        17.2.3 变量
            17.2.3.1 系统变量:$HOME $PWD $SHELL $USER等,可用set来显示shell中的所有变量。
            17.2.3.2 自定义变量:
                17.2.3.2.1 定义变量:变量名=值    (不能有空格)
                17.2.3.2.2 撤销变量:unset 变量名
                17.2.3.2.3 静态变量:readonly 变量名(不能unset)
        17.2.4 将命令的返回值赋给变量
            如:a=`date` 等价于 a=$(date)        (反引号表示先运行里面的命令,并把结果返回给变量)
        17.2.5 环境变量
            17.2.5.1 export 变量名=变量值        (将shell变量输出为环境变量即全局变量)
            17.2.5.2 source 配置文件            (让修改后的配置文件马上生效)
            17.2.5.3 echo $变量名                (查询环境变量值)
            17.2.5.4 举例:
                17.2.5.4.1 在配置文件/etc/profile中增加环境变量,内容:export LAG_HOME=/home/lag
                17.2.5.4.2 source /etc/profils    (让刚才新增加的变量马上生效)
                17.2.5.4.3 echo $LAG_HOME
        17.2.6 位置参数变量                        (./my.sh 100 200 这里的100与200就是位置参数变量)
            17.2.6.1 基本语法:
                17.2.6.1.1 $n    (n为数字,$0命令本身,$1-$9为前9个参数,10以上用${10},${11}...)
                17.2.6.1.2 $*    (代表所有参数,$*把所有参数当做一个整体,类似字符串)
                17.2.6.1.3 $@    (代表所有参数,$@把每个参数分别对待,类似数组)
                17.2.6.1.4 $#    (代表所有参数的个数)
        17.2.7 预定义变量
            17.2.7.1 $$            (当前进程的进程号(PID))
            17.2.7.2 $!            (后台运行的最后一个进程的进程号(PID))
            17.2.7.3 $?            (最后一次执行命令的返回状态,0-正确执行)
        17.2.8 运算符
            17.2.8.1 语法:$((运算式))  或 $[运算式]  或 expr m + n        (用(())它里面的内容的语法类似C语言,如> >= == <= !=,但有些特殊表达式用不了)
            17.2.8.2 使用expr表达式的符号:+  -  \*  /  %    (加、减、乘、除、取余)
            17.2.8.3 举例:计算(2+3)*4的值:echo "(2+3)*4=$[(2+3)*4]"     (这种方式空格无所谓)
        17.2.9 条件判断
            17.2.9.1 语法:[ 条件 ]    (注:条件的前后必须有空格),返回:非空-true,也可使用$?验证0-true,>1-false
            17.2.9.2 判断:
                17.2.9.2.1 两个字符串比较:=        ([ "ok" = "ok" ]注意一定要有空格啊)
                17.2.9.2.2 两个整数比较:
                    17.2.9.2.2.1 小于 -lt            (lt-less than,[ 23 -lt 33 ])
                    17.2.9.2.2.2 小于等于 -le        (le-less equal])
                    17.2.9.2.2.3 等于 -eq            (eq-equal,[ 34 -eq 34  ])
                    17.2.9.2.2.4 大于 -gt            (gt-great than)
                    17.2.9.2.2.5 大于等于 -ge        (ge-great equal)
                    17.2.9.2.2.1 不等于 -ne            (ne-not equal)
                17.2.9.2.3 文件权限判断:
                    17.2.9.2.3.1 -r 有读的权限
                    17.2.9.2.3.2 -w 有写的权限
                    17.2.9.2.3.3 -x 有执行的权限
                17.2.9.2.4 文件类型判断:
                    17.2.9.2.4.1 -f 文件存在,且是常规文件    (if [ -f /root/test.txt ])
                    17.2.9.2.4.2 -e 文件存在
                    17.2.9.2.4.3 -d 文件存在,且是目录
        17.2.10 if语句:
            if [ 条件判断式 ]        或 if ((条件判断式))
            then
                代码
            elif [ 条件判断式 ]
            then
                代码
            else
                代码
            fi
        17.2.11 case语句:
            case $变量名 in
            "值1")
                代码
            ;;
            "值2")
                代码
            ;;
            *)
                其他代码
            ;;
            esac
        17.2.12 for语句:
            17.2.12.1 语法1:
                for 变量 in 值1 值2 值3 ...
                do
                    代码
                done
            17.2.12.2 语法2:
                for((初始值;循环条件;变量变化))            【空格不重要,因为用了(()),因此里面语法类似C语言】
                do
                    代码
                done
                举例:1加到100
                    SUM=0
                    for((i=1;i<=100;i++))
                    do
                        SUM=$((SUM+i))
                    #    SUM=$[$SUM+$i]
                    done
                    echo "1加到100等于$SUM"
        17.2.13 while语句:
            while((条件))
            do
                代码
            done
        17.2.14 控制台输入:
            read 选项 变量                (p-读取时的提示,t-等待时间)
            举例:
                read -p "请输入年龄:" AGE 
                echo $AGE
        17.2.15 函数:
            17.2.15.1 系统函数:
                17.2.15.1.1 basename [路径名] [后缀]        (返回完整路径最后/部分,常用于获取文件名。若带有后缀参数则返回不带后缀的文件名)
                            如:basename /root/test/aaa.txt => aaa.txt
                17.2.15.1.2 dirname [路径名]                (返回完整路径最后/的前面部分,常用于获取路径部分。)
                            如:dirname /root/test/aaa.txt => /root/test
            17.2.15.2 自定义函数:
                17.2.15.2.1 语法:
                    # 函数定义时没有形参与实参的概念,默认用 $* $@ $1 $2 ...来得到参数
                    # 返回值取值范围0~255,0-成功。可以用个$?得到该值,因此一般情况下都不需要有返回值。
                    # 可以用一个变量来接收想要返回的值,在调用该函数后将其显示出来即可实现返回值的功能。
                    # 调用该函数时也没有括号,有参数则用空格隔开
                    [function] 函数名[()]
                    {
                        代码
                        [return 0]
                    }
                    【注】[]内是可以省略不写的,但不建议省略。
                17.2.15.2.2 举例:
                    # 函数定义
                    function getSum()
                    {
                        SUM=$(($1+$2))
                    }
                    # 调用函数
                    read -p "请输入第一个数值:" VAL1
                    read -p "请输入第二个数值:" VAL2
                    getSum $VAL1 $VAL2
                    echo "相加结果等于:%SUM"

十八、日志管理
    18.1:日志文件位置:/var/log/目录下
    18.2:重要的日志:
        18.2.1 boot.log:    系统启动日志
        18.2.3 cron:         定时任务日志
        18.2.4 lastlog:     记录所有用户最后一次登录时间(该文件内容为二进制,得用命令lastlog查看内容)
        18.2.5 maillog:     邮件信息日志
        18.2.6 message:     系统重要信息日志,如果系统出现问题首先就要检查该日志。
        18.2.7 secure:         验证与授权信息日志,只要涉及到账号与密码都记录到此日志中。
    18.3:日志服务:
        18.3.1 服务名:rsyslogd
        18.3.2 服务配置文件:/etc/rsyslog.conf            (该文件配置了哪些动作记录到哪个日志文件中)
            18.3.2.1 配置文件格式    *.*        存放日志文件(mail.*    -/var/log/maillog)
                18.3.2.1.1 第一个*含义:日志类型
                    18.3.2.1.1.1 auth            pam产生的日志
                    18.3.2.1.1.2 authpriv        ssh、ftp登录信息的验证信息产生的日志
                    18.3.2.1.1.3 cron            定时任务产生的日志
                    18.3.2.1.1.4 kern            内核产生的日志
                    18.3.2.1.1.5 lpr            打印产生的日志
                    18.3.2.1.1.6 mail            邮件产生的日志
                    18.3.2.1.1.7 user            用户程序产生的日志
                    18.3.2.1.1.8 local 1-7        自定义的日志设备
                18.3.2.1.2 第二个*含义:日志级别
                    18.3.2.1.2.1 debug            调试
                    18.3.2.1.2.2 info            信息
                    18.3.2.1.2.3 notice            最具有重要性的普通条件信息
                    18.3.2.1.2.4 warning        警告
                    18.3.2.1.2.5 err            错误
                    18.3.2.1.2.6 crit            严重
                    18.3.2.1.2.7 alert            需要立刻修改
                    18.3.2.1.2.8 emerg            内核崩溃
                    18.3.2.1.2.9 none            什么都不记录
        18.3.3 日志文件格式:
            事件产生时间    产生事件服务器主机名    产生事件的服务名或程序名    事件具体信息
        18.3.4 举例:将ssh登录信息记录到日志/var/log/myssh.log中
            18.3.4.1:编辑/etc/rsyslog.conf,增加一下内容
                        authpriv.*        /var/log/myssh.log
            18.3.4.2:重启linux,登录,查看/var/log/myssh.log
    18.4 日志轮替:
        18.4.1 日志轮替文件命名:
            18.4.1.1 日志轮替配置文件(/etc/logrotate.conf)中参数为dateext,则以日期作为日志文件扩展名。
            18.4.1.2 若无dateext参数则以xxx.n(n>0)的方式来轮替日志。
        18.4.2 日志轮替配置文件:
            18.4.2.1 配置文件内容(/etc/logrotate.conf)
                18.4.2.1.1 daily        每天对日志进行一次轮替
                18.4.2.1.2 weekly        每周对日志进行一次轮替
                18.4.2.1.3 monthly        每月对日志进行一次轮替
                18.4.2.1.4 rotate n        保存n份日志文件,超过n时删除旧的
                18.4.2.1.5 create        日志轮替后创建新的空日志文件
                18.4.2.1.6 dateext        以日期作为日志轮替文件扩展名
                18.4.2.1.7 size 4M        日志大于4M才轮替
                18.4.2.1.8 compress        日志文件是否压缩
                18.4.2.1.9 单独为某个日志配置
                    18.4.2.1.9.1 直接写入到配置文件/etc/logrotate.conf
                                /var/log/myssh.log{
                                    monthly
                                    minsize 10M
                                    rotat 2
                                }
                    18.4.2.1.9.2 将某个单独的日志配置文件放到/etc/logrotate.d目录中
    18.5 日志轮替机制:
        在/etc/cron.daily/目录下有个logrotate的shell,cron定时任务会每天都执行一次这个shell来完成日志轮替工作。
    18.6 查看内存日志:journalctl


 

相关推荐

  1. Linux常见命令简介

    2024-04-04 17:32:02       15 阅读
  2. linux常见命令

    2024-04-04 17:32:02       19 阅读
  3. Linux常见命令

    2024-04-04 17:32:02       17 阅读
  4. Linux系统常见命令

    2024-04-04 17:32:02       13 阅读
  5. Linux常见命令总结

    2024-04-04 17:32:02       11 阅读
  6. 常见linux命令

    2024-04-04 17:32:02       10 阅读
  7. 常见Linux命令

    2024-04-04 17:32:02       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-04 17:32:02       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-04 17:32:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-04 17:32:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-04 17:32:02       18 阅读

热门阅读

  1. 探索Django REST框架构建强大的API

    2024-04-04 17:32:02       17 阅读
  2. redis-乐观锁Watch使用方法

    2024-04-04 17:32:02       18 阅读
  3. python用fastapi快速写一个增删改查的接口

    2024-04-04 17:32:02       15 阅读
  4. Linux内核调试之如何用kdb调试

    2024-04-04 17:32:02       16 阅读
  5. 模板:C++ sort函数

    2024-04-04 17:32:02       18 阅读