zoukankan      html  css  js  c++  java
  • Linux命令指南(二)常用命令【下】

    四 文件解压缩

    4.1 官宣的linux压缩工具:tar

    tar的基本命令格式为

    tar [参数选项] [文件或目录]

    tar常用命令

    tar -zcvf [压缩包名] [待打包文件或目录]
    # [压缩包名] 一般为 tar.gz 后缀
    # z :通过gzip压缩或解压
    # c :创建新的tar包
    # v :显示命令执行过程
    # f :指定压缩文件的名字
    # t : 不解压查看tar包内容
    
    tar tvf [压缩包]
    # 不解压查看压缩包内容
    
    tar zxvf [压缩包] -C [解压路径]
    # 将压缩参数的c换成x,便是解压
    # -C:指定解压路径,不加-C解压到当前目录

    #第一种排除
    tar -zcvf a.tar.gz 打包的目录 --exclude='指定排除的文件所在的路径'
    #第二种排除
    find /root/hh ! -type d | xargs tar zcvf b.tar.gz
    #将/root/hh 下不是目录文件打包成 b.tar.gz

    4.2 gzip 

    gzip只能打包文件,不能打包目录。

    gzip打包文件后会将源文件删除。

    gzip参数:

    gzip 【参数选项】 【待压缩文件或压缩包】
    
    # -d :解压
    # -v :显示解压过程
    # -l : 列出压缩文件内容信息
    # -c : 不改变原始文件
    # -r :递归压缩目录下所有文件
    # -t :检查压缩文件完整性
    # -数字<1-9> :指定压缩率,值越大压缩率越高,默认为6

    gzip常用命令示例:

    cd /root/hh
    gzip *.log
    # 打包所有log文件
    
    
    gzip -l *.gz
    # 不解压展示压缩包内信息
    
    gzip -dv *.gz
    # 解压gz文件

    不知道你们有没有发现,解压后gz包也不见了或者压缩后.log文件不见了。那怎么保留源文件?

    gzip -c a.log > a.gz
    # 使用-c + 重定向符号,将a.log压缩为01.gz,并且不删除源文件,解压也是一样的操作
    
    
    gzip -dc a.gz > a.log
    # 将a.gz解压为a.log,可以看到源文件a.gz还存在

    4.3 zip 和unzip

    zip压缩

    zip tao.zip *
    # 压缩当前目录下所有文件
    
    zip -r yao2.zip *
    #递归压缩
    
    zip -r  yao3.zip * -x  '文件'
    #排除不打包的文件
    
    #参数
    # 无参数,普通压缩
    # -r :递归压缩
    # -x :排除某个文件压缩
    # -q :不显示压缩信息

    unzip解压

    unzip -d tao tao.zip
    # 解压到test文件夹下
    # -d : 指定目录,无此目录则创建一个,解压的部分信息===>> creating: tao/test/
    # 没有-d参数则默认解压到当前文件夹
    # -o : 解压时不提示是否覆盖文件;如果我们现在解压到当前目录就会提示是否覆盖,因为已经有此文件了,使用-o可以直接覆盖
    # -v :展示解压时的详细信息

    4.4  7za

    7z也是一种高效率的压缩文件格式,7z常用命令如下。

    压缩:

    7za a -r tao.7z *.log
    # 压缩所有html到tao.7z包中
    # a :添加文件、目录
    # -r :递归

    不解压查看文件内部信息:

    7za l tao.7z
    # l :不解压查看

    解压:

    7za x tao.7z -r -o tao7z
    # x : 解压,x换成e也可以解压;但是一般用x,x解压全路径,用e会将所有文件解压到一个目录中
    # -r :递归解压子目录
    # -o :指定解压目录,注意的是,-o参数与目录间没有空格,这是比较奇特的一点

    五  用户、文件与权限

    5.1 权限升级:su与sudo

    whoami
    # 查看自己是哪个用户,我们这里可以看到是root登录的
    
    su tao
    # root用户切换为普通用户不需要输入密码
    
    su root
    # 普通用户切换回root用户需要输入密码
    # 小知识: su root == su,su切换root不需要输入root用户名
    # 注意:这种切换虽然可以成功,但是环境变量还是原用户的,所以要用下面的命令切换
    
    su - tao
    # su - [用户名],这种切换方式可以切换到相应用户,还能将登陆后的环境变量一并切换

    其实su也可以不用切换过去就能执行命令,只需要加一个参数-c就行:

    su - tao -c 'pwd' 
    # 使用tao执行pwd命令

     可以看到,其实是执行成功了,正确返回了tao的home路径。

    但是这种方式毕竟没有sudo来的方便,接下来看看不用切换用户的sudo:

    su - tao
    # 切换为普通用户登录
    
    whoami
    # 查看切换成功了没
    
    ls /root
    # 访问root文件夹

     可以看到,没权限。怎么办?sudo呀。

    sudo ls /root
    # 访问root目录,输tao用户的登录密码就行了

    所有用户都可以使用sudo吗?当然不是了,我们可以查看下赋予sudo权限的用户:

    sudo -l
    # 查看当前用户被授权的sudo权限

    怎么赋予sudo权限?

    在/etc/sudoers文件中添加用户就行了

    sudo cat /etc/sudoers

    用vi还是sed都可以,但是最好使用visudo。

    sudo visudo
    # root用户不用sudo

    visudo是专门来编辑/etc/sudoers文件的,并且它还有语法检查作用。

    5.2  用户增删改:useradd、usermod、userdel

    5.2.1 用户新增:useradd、passwd

    不带任何参数的添加用户:

    useradd tao
    # 新增用户tao
    
    passwd tao
    # 设置密码,密码一般为大小写加数字和一个特殊字符

    passwd 小技巧,一条命令设置用户密码:

    echo "123456" | passwd --stdin tao
    # --stdin :可从标准输入获取密码
    # 批量修改密码时,此命令比较有用
    # 此外,还有个chpasswd命令也可以批量修改密码

    passwd 密码到期提醒策略:

    passwd -n 7 -x 60 -w 10 -i 30 tao
    # 7天内不能修改密码,60天以后必须修改密码,过期前10天通知用户,过期后30天禁止用户登录
    # -n : 7 表示不能修改密码天数
    # -x :60 表示必须修改密码天数
    # -w :10 表示过期前10天通知
    # -i : 30 表示过期后30天禁止登录

    useradd不带任何参数时,系统会先读取/etc/login.defs(用户定义)、/etc/deault/useradd(用户默认配置)文件,然后根据其中所设置的规则添加用户同时向/etc/passwd(密码文件)、/etc/group(用户组)文件添加新用户和新用户组记录。

    建好了之后,可以到/home目录下看下,已经创建了属于此用户的家目录。

    cd /home/tao
    chage -l tao
    # 查看用户的有效期

    #查看用户所属信息:
    id tao
    # 这个信息其实就在/etc/passwd中,可以用grep tao /etc/passwd 查看比对下
    # uid : 用户id
    # gid :用户组id

    禁止登陆用户创建:

    useradd -s /sbin/nologin ftp_ymm
    # -s :指定用户登录的shell,/sbin/nologin表示禁止登陆,部署ftp等中间件会经常用到
    
    useradd -M -s /sbin/nologin nginx_wfy
    # 部署nginx、mysql等中间件会经常用到
    # -M : 不创建家目录

    其他参数:

    useradd -u 806 -s /bin/sh -c "这是测试用户" -G root -e "2019/12/21" -f 2 -d /tmp/tao test_tao
    # -u :指定uid
    # -c :用户说明
    # -G :设置用户组
    # -e : 设置过期时间
    # -f :2表示过期两天停权
    # -d :用户每次登录时的家目录
    
    tail -1 /etc/passwd
    # 查看passwd文件最后一行,可以看到刚才添加的用户信息
    
    tail -1 /etc/shadow
    # 查看/etc/shadow文件最后一行,可以看到刚才-f添加的参数2

    拓展:使用useradd -D 参数就是修改用户的初始配置文件:/etc/deault/useradd,来看下这个文件有什么。

    [root@iZwz9722zisgyebxzpgpc3Z tao]# cat /etc/default/useradd
    
    # useradd defaults file
    GROUP=100 
    # 依赖于/etc/login.defs的USERGROUPS_ENAB参数,如果为no,则此处控制
    HOME=/home
    # 把用户的家目录建在/home中
    INACTIVE=-1
    # 是否启用用户国企停权,-1表示不启用
    EXPIRE=
    # 用户终止日期,不设置表示不启用
    SHELL=/bin/bash
    # 新用户默认所用的shell类型
    SKEL=/etc/skel
    # 家目录默认文件存放路径,新增用户时,从这个配置目录拷贝过去
    CREATE_MAIL_SPOOL=yes
    # 创建mail文件

    用useradd -D来修改下看看,当然,先做好备份:

    cp /etc/default/useradd{,.bak} 
    # 做个备份
    
    cd /etc/default
    # 可以看到创建useradd.bak文件
    
    useradd -D -s /bin/sh
    # -D :改变/etc/default/useradd文件
    # -s :改变默认shell
    # -b : 定义家目录
    # -e :设置用户过期日期
    # -f :过期后几日停权
    # -g :设置用户组
    
    diff /etc/default/useradd{,.bak}
    5.2.2 用户修改:usermod

    usermod的参数大部分与useradd相同,无非一个新增一个修改而已。不同的参数如下:

    usermod -l  tao2 tao
    # 将wfy这个用户的登录名改为wfy2
    # -l :修改用户名称
    # -L :lock,锁定用户密码
    # -U :unlock,解除密码锁定
    # -a :追加用户组,与-G参数连用

    将useradd替换为usermod,其他参数不变,来修改下用户信息

    usermod -u 806 -s /bin/sh -c "修改了测试用户" -G root -e "2019/12/21" -f 2 -d /tmp/tao test_tao
    
    grep test_tao /etc/passwd
    
    grep test_tao /etc/shadow
    5.2.3 用户删除:userdel
    userdel -r tao
    # -r : 删除用户及家目录
    # -f : 强制删除用户,即使用户登录了
    # 不加-r参数删除不会删除家目录

    注意:实际工作中,一般不使用userdel,而是去/etc/passwd中将用户信息注释。

    5.3 用户查看:id、w、who、whoami、last

    id,查看用户id信息:

    id tao
    # 显示wfy的uid及gid信息

    w,最常用,查看已登录用户信息:

    w
    # 展示所有已登录用户信息
    # 展示字段含义如下
    # USER : 用户
    # TTY : 用户tty名称
    # FROM : 从哪登录的
    # LOGIN : 登录时间
    # IDLE :终端空闲时间
    # JCPU : 终端上所有进程及子进程使用系统的总时间
    # PCPU :活动进程使用的系统时间
    # WHAT :当前用户执行的进程

    who 查看所有已登录用户信息:

    who
    # 显示已登录用户信息,与w略有不同

    users 查看所有已登录用户名:

    users
    # 只显示用户

    whoami 查看当前登录用户信息:

    whoami
    # 查看当前登录的用户名

    last:

    last
    # 显示用户登录列表,读取/var/log/wtmp
    
    last -10
    # 显示最近10次的登录信息
    
    last root -10
    # 显示root用户的最近10次登录信息
    
    lastb
    # 展示用户登录失败信息,读取/var/log/btmp
    
    lastb -10
    # 展示最近10条用户登录失败信息
    
    lastb root -10
    # 展示root用户登录失败信息,最近10条
    
    lastlog
    # 展示所有用户最近一次登录记录,读取/var/log/lastlog

    5.4 文件权限:chown 、chmod

    5.4.1 改变文件用户组:chown

    chown常用命令如下:

    chown tao a.txt
    # 更改a.txt的所属用户为tao
    chown tao:tao a.txt
    # 将a.txt的所属用户更改为tao,用户组从root更改为tao
    chown -R tao:tao hh
    # 将yao这个目录及其子目录全都赋权给tao
    # 可以看到hh下的var目录页赋权给了tao这个用户及用户组

     5.4.2 改变文件权限范围:chmod

    chmod可以改变文件及目录的权限范围,它有两种赋权模式:1)使用权限字母 + 操作符;2)使用数字。

    常用命令示例:

    chmod 777 a.txt
    # 更改a.txt权限为所有人可访问

    7代表rwx,777所代表的9位字符权限为rwxrwxrwx。

    1. "r" = 4, 可读权限;目录、子目录及其文件都可被访问。
    2. "w" = 2,可写权限;可修改文件内容、目录名称。
    3. "x" = 1,可执行权限;目录没有x权限无法进入,sh脚本文件没有x无法执行。
    4. "-" = 0,无权限。

    赋予目录只读权限:

    chmod -R 555 hh
    # 5 = 4 + 0 +1,即r-x,可读与可执行权限,但是不能被修改。

    可以看到第一位字符是d,d代表目录,后续9位字符为r-x(属主权限位)、r-x(属组权限位)、r-x(其他用户权限位)。

    此外还有一种常用的赋权模式,为+x,赋予文件可执行权限,一般用来执行shell脚本:

    chmod +x [脚本名].sh

    shell脚本一般有四种执行方式,最常用的为+x赋权后使用下面命令执行:

    ./脚本名.sh

    其他三种方式:

    . /脚本名.sh
    # .后有空格
    
    source 脚本名.sh
    
    sh 脚本名.sh

    当然,也可以用来执行txt文件,示例如下:

    . b.txt
    
    source b.txt
    
    sh b.txt

    可以看到我们的wfy.txt文件并不是一个shell文件,没有找到响应的命令去执行,后续的shell入门会说下.sh的脚本文件是怎样编写的。

    注意:普通用户还需有r权限才能执行,root则不需要。

    六 资源监控与管理

    6.1 虚拟文件管理系统:proc

     说到资源管理这块,/proc文件夹是linux上不得不说的一个目录。

    ls /proc

    可以看到红框/proc目录下红框圈的那一片数字文件夹,这其实就是我们linux系统中所有进程文件存放的地方。每生成一个进程,就会在这里有个对应的文件夹,也就是我们以后会经常打交道的pid。

    有很多的inux命令都是调用此目录中的文件来显示系统相关信息。例如内存、cpu等信息。

    为什么proc下面的文件能存放内存、进程、cpu这些跟磁盘文件没任何关系的东西呢?

    因为proc实际是一个伪文件系统,或者说虚拟文件系统。我们在文章开头就说了,linux中的一切都是以文件形式存在的,就是proc做到的。

    对于用户、应用程序,它们是从proc中得到系统的一些信息,甚至可以改变内核的某些参数。

    而proc中的文件内容并不是全然不变的,它们会随着系统进程的变化而变化,当用户读取它们时,proc文件系统就动态地从系统内核中读出所需要的信息并提交。

    一些我们常用的命令会用到下面的一些文件,如磁盘、cpu、内存相关的。

    /proc/cmdline 内核命令行,核心启动参数
    /proc/cpuinfo cpu的相关信息
    /proc/devices 挂载设备
    /proc/Loadavg 负载均衡
    /proc/meminfo 内存信息
    /proc/mounts 加载文件系统
    /proc/stat 全面统计状态表
    /proc/swaps 交换空间表
    /proc/version 内核版本
    /proc/uptime 系统正常运行时间

    6.2 磁盘空间监视器:df

    df命令可以说linux上最常用的命令之一,因为一旦磁盘空间不够就会出现各种故障,数据库、应用都可能会处于瘫痪状态。

    常用命令示例:

    [root@iZwz9722zisgyebxzpgpc3Z ~]#  df -h
    # 以适合人类阅读的方式展示磁盘空间大小
    
    文件系统        容量  已用  可用 已用% 挂载点
    /dev/vda1        50G   43G  4.3G   91% /
    devtmpfs        1.9G     0  1.9G    0% /dev
    tmpfs            10G  666M  9.4G    7% /dev/shm
    tmpfs           1.9G  324K  1.9G    1% /run
    tmpfs           1.9G     0  1.9G    0% /sys/fs/cgroup
    tmpfs           380M     0  380M    0% /run/user/1005
    tmpfs           380M     0  380M    0% /run/user/0[root@iZwz9722zisgyebxzpgpc3Z ~]#  df -i
    # -i : 显示inode的使用情况
    # linux文件有个inode的文件数量限制,一旦无可用inode,则无法再产生新的文件,会在磁盘空间未满的情况下报“No space left on device”,解决方案是删除无用(多天前)的小文件或者log文件
    
    文件系统         Inode 已用(I) 可用(I) 已用(I)% 挂载点
    /dev/vda1      3276800  215486 3061314       7% /
    devtmpfs        482932     308  482624       1% /dev
    tmpfs           485254     258  484996       1% /dev/shm
    tmpfs           485254     354  484900       1% /run
    tmpfs           485254      16  485238       1% /sys/fs/cgroup
    tmpfs           485254       1  485253       1% /run/user/1005
    tmpfs           485254       1  485253       1% /run/user/0[root@iZwz9722zisgyebxzpgpc3Z ~]#  df -Th
    # -T:查看文件系统类型
    # 本机展示的挂载盘/dev/vda1文件系统类型为ext3
    
    文件系统       类型      容量  已用  可用 已用% 挂载点
    /dev/vda1      ext3       50G   43G  4.3G   91% /
    devtmpfs       devtmpfs  1.9G     0  1.9G    0% /dev
    tmpfs          tmpfs      10G  666M  9.4G    7% /dev/shm
    tmpfs          tmpfs     1.9G  324K  1.9G    1% /run
    tmpfs          tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
    tmpfs          tmpfs     380M     0  380M    0% /run/user/1005
    tmpfs          tmpfs     380M     0  380M    0% /run/user/0

    6.3 内存空间监视器:free

    一台电脑、服务器,内存、存储(磁盘)、处理器(cpu)、操作系统是最基本的组成。

    free就是用来监视linux系统使用内存的命令。

    常用命令示例:

    [root@iZwz9722zisgyebxzpgpc3Z ~]#free -h
    # 以人类可读方式展示内存使用情况,根据实际大小自动转换为KB、MB、GB
    
                  total        used        free      shared  buff/cache   available
    Mem:           3.7G        275M        144M         48M        3.3G        3.1G
    Swap:          0B          0B            0B

    Mem为物理内存使用情况,Swap为虚拟内存使用情况(一般是划分一部分磁盘空间作为虚拟内存)。

    total :总内存;3.7G一般为4G内存机器。

    used :已使用内存。

    free :自由内存。

    shared : 共享内存。

    buff/cache : 缓存,3.3G。

    available : 可用内存。

    在以前没有available这个展示字段的时候,我们通常是将 free + buff/cache 的总量作为可用内存。

    linux系统的特性就是将不用的物理内存缓存起来,因为千万以为free的144M内存就是真实的系统剩余内存了。所以当前可用内存为available:3.1G。

    常用命令之二:定时查询内存

    free -hs 5
    # 每5秒显示内存使用情况,ctrl + c 终端
    # -s:根据指定间隔显示内存使用情况,单位为秒

    6.4 网络探测器:ping

    ping www.baidu.com
    # ping域名或ip,会一直显示ping结果,ctrl + c 中断
    # 不同于windows的是,windos上ping -t才会一直显示ping结果

    [root@iZwz9722zisgyebxzpgpc3Z ~]# ping www.bai.com
    PING bai-s2.nodes.gz.com (14.17.96.13) 56(84) bytes of data.
    64 bytes from 14.17.96.13 (14.17.96.13): icmp_seq=1 ttl=51 time=6.86 ms
    64 bytes from 14.17.96.13 (14.17.96.13): icmp_seq=2 ttl=51 time=6.87 ms
    64 bytes from 14.17.96.13 (14.17.96.13): icmp_seq=3 ttl=51 time=6.86 ms
    64 bytes from 14.17.96.13 (14.17.96.13): icmp_seq=4 ttl=51 time=6.90 ms
    64 bytes from 14.17.96.13 (14.17.96.13): icmp_seq=5 ttl=51 time=6.86 ms
    ^C
    --- bai-s2.nodes.gz.com ping statistics ---
    5 packets transmitted, 5 received, 0% packet loss, time 4006ms
    rtt min/avg/max/mdev = 6.860/6.876/6.909/0.017 ms

    从结果行第一行可以看到,baidu的域名被转换成了bai-s2.nodes.gz.com,发送了56字节的数据。

    而从第二行开始,是目标返回信息。目标受到的字节是64,icmp_seq就是受到包的序列号,ttl是数据包的生存周期,time是延时,6.86毫秒。

    最后三行是统计结果信息,发送了5个包,接收了5个包,一个包没有丢失,总共用时4006毫秒。min/avg/max/mdev 为最小/平均/最大/平均偏差(Mean Deviation) 延时。

    ttl为time to life,即icmp包在网络上的存活时间。

    常用ping命令示例:

    ping -c 3 -i 3 -s 1024 -t 255 www.csdn.com
    # -c :固定ping次数,本次为3次
    # -i :发送间隔,本次为3秒
    # -s :数据包大小,单位字节,本次1024为1KB
    # -t :255,ttl值

    ping只能探测ip及域名,但是没法探测端口

    6.5 cpu、进程及内存监视器:top

    top - 14:17:58 up 31 days, 2:44, 1 user, load average: 0.05, 0.12, 0.08
    Tasks: 110 total, 1 running, 108 sleeping, 1 stopped, 0 zombie
    %Cpu(s): 1.0 us, 1.0 sy, 0.0 ni, 98.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    KiB Mem : 1883724 total, 72564 free, 910376 used, 900784 buff/cache
    KiB Swap: 0 total, 0 free, 0 used. 720156 avail Mem


    PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND 
    此处省略.......

    第一行:结果第一行,为uptime命令的执行结果。

    14:17:58  # 当前系统时间    
    up 31 days, 2:44 # 系统已运行33天2小时44分
    1 users #一个用户在登录
    load average: 0.00, 0.01, 0.05 # 最近1分钟、5分钟、15分钟的负载情况

    第二行:进程信息。共110个进程,1个运行,108个睡眠,停止的1个,僵死的0个。

    第三行,cpu状态信息。

    1.0 us # 用户空间占比
    1.0 sy # 内核空间占比
    0.0 ni # 改变过优先级的进程占用比
    98.0 id # 空闲CPU百分比
    0.0 wa # I/O等待占用cpu百分比
    0.0 hi # 硬中断占用cpu百分比
    0.0 si # 软中断占用cpu百分比
    0.0 st # 虚拟机占用比

    第四行、第五行,分别是物理内存状态及虚拟内存状态。

    total # 内存总量
    free  # 空闲内存
    used  # 已用内存
    buff/cache # 缓存

    第六行为空行,第七行以后就是系统中各进程的监控状态。

    PID  # 进程id
    USER # 用户,进程所有者
    PR   # 优先级
    NI   # nice值,负值高优先
    VIRT # 进程使用的虚拟内存总量,KB
    RES  # 所用物理内存大小,KB
    SHR  # 共享内存大小
    S    # 进程状态。S=睡眠sleep,R=运行running,D=不可终端的休眠状态,T=stopped,Z=zombie僵尸进程
    %CPU # 占用CPU百分比
    %MEM # 占用物理内存百分比
    TIME+ # 进程使用CPU时间统计
    COMMAND # 进程名
    top -c
    # 第七行后进程信息显示进程全路径
    
    top -n 2
    # -n : 指定更新次数两次不再刷新,无参数会一直刷新

    top的交互模式:

    按1可以显示多核CPU的信息。

    按b可以高亮选中某列,再使用符号"<"或“>”来向左或向右降序排序。

    关于资源监控还有许多很实用的工具:如iostat、mpstat、iftop、vmstat、iotop、sar等工具。

  • 相关阅读:
    创建本地yum源
    sed命令总结-基本操作指南
    MySQL5.7配置GTID主从---搭建GTID主从
    MySQL5.7配置GTID主从---GTID介绍
    CentOS7系统RPM方式安装MySQL5.7
    CentOs7安装配置NFS文件服务器
    CentOs7安装配置zabbix3.4(四)----配置报警邮件
    CentOs7安装配置zabbix3.4(三)-配置grafana
    CentOs7安装配置zabbix3.4(二)--安装zabbix-agent
    CentOs7安装配置zabbix3.4(一)--安装zabbix-server
  • 原文地址:https://www.cnblogs.com/aikutao/p/12112379.html
Copyright © 2011-2022 走看看