命令格式: [选项] [选项参数] ... [参数]

  按照英语语系语法: 主谓宾 、 定状补、 命令省略主语
  命令主体: 谓语动词;
  [选项] :命令执行的方式,一般以 -- 或 - 开始
  [参数] : 宾语, 是该命令要处理或修改的事物;
  注意点: 命令中 空格 作为各个参数之间分隔符;
关于命令中选项 与  选项参数;
linux cmd中很多选项都是单词首字母,例如h, 有可能help, human-readable, header
human-readable:

header:

通配符:

?       : 单个字符
*        : 几个任意字符
[charlist]  : 匹配字符列表中任意单一字符
[^charlist]  : 不在字符列表中任意单一字符
[c1-c2]    : 匹配字母序或数字C1 到 C2 之间任意单个字符
(str1|str2) : 匹配列表中任意一个字符串
<num1-num2>  : 匹配任何在num1 至 num2 之间数字,缺省为0 ~ 无穷大;

任务管理:

Ctrl+c : 结束当前程序/命令;
ctrl+z : 命令挂起,暂停命令执行
jobs  : 查看后台执行的和 挂起的任务及任务编号;
bg    : 将挂起命令后台执行;如果存在多个挂起命令,根据上面jobs 得到的任务编号,可以指定任务后台执行; bg %3
fg   : 将挂起或后台执行的命令,变为前台运行; 如果存在多个挂起命令,根据上面jobs 得到的任务编号,可以指定任务后台执行; fg %3

&   :加在命令后表示后台运行;
;   :加在命令后表示顺序执行;
&&  :连接 2 个命令后表示与,前面执行成功才会执行后面命令;
||  :连接2 个命令后表示或,如果前面成功就执行后面命令;
``   : 命令替换符,表示命令中如果包含另一个命令,用``包括的命令将会优先执行; ls `echo /`

体会下 ||, &&,以及experession 在 []中的表示:

A=123
[ -n ${A} ] && ([ "${A}" -lt 100 ] || echo "too big" )

  

输入&输出重定向:

>    : 重定向符号,从命令到文件的重定向
>>  : 追加符号,从命令到文件的追加
<    :重定向符号,从文件到命令的重定向
<<   : 自定义结束符号的重定向,后续输入的字符以<< 后面定义的字符为结束标志;

管道: |, 将管道符号做边的命令的标注输出,作为管道符号右边命令的标准输入;

 

 实际应用中要把命名管道文件重定向到需求的对象,当管道中有数据时候,就会直接传送过去;

 还有匿名管道,直接将结果传递给下一个对象;

 

 转义字符:

\   :反斜杠,转义,去除其后紧跟的元字符 或通配符的特殊意义
''  :硬转义,硬引用,其内部所有的shell元字符,通配符都会被关掉; 注意 硬转义中不允许出现``
""  :软转义,软引,其内部只允许特定的shell 元字符;
      $ 用于变量替换,` 用于命令替换, \ 用于转义单个字符;

系统信息相关命令:

alias : 命令别名, 可以将常用命令简略化
    alias a1="ssh a1" ,退出后别名会消失;如果想要永久保存,可以把命令存在.zshrc 类的resource 文件中。

passwd : 配置密码相关设定(删除密码,锁账户,设定密码时效...),缺省值是当前用户,否则是指定用户; 返回值 对应不同含义
  -d  : delete 删除密码
  -e   : expire 密码过期
  -l  : lock 锁密码;

last  :显示最近一月用户登陆信息;
  -f <file>: 指定记录文件; 其中/var/log/wtmp :成功登陆用户信息文件; btmp,btmp1:失败用户登陆信息;
lastlog : 打印每个帐号的最近登陆时间;

uname  :打印当前系统信息, Unix name; 
  cat /etc/os-release : OS release 版本信息;
 
uptime : 系统运行市场 和 平均负载;
  -p  :(pretty) 以漂亮方式显示;
  -s :(since)  系统启动时间
  -V  :(version)版本信息

w    :当前用户列表及正在执行的任务

id    : 查看用户与组信息
su - username : 切换用户,其中 - 模拟重新登陆过程;
who    :显示当前登陆系统的用户信息
who am i: 只显示当前terminal用户,有些解释器没有这个命令
whoami :当前用户

date  :显示或设置系统时间日期
cal   :日历

write  :将信息发送到指定的登陆用户终端
   信息接受打开/关闭 : mesg y/n
wall   :write all 给所有人发信息;比如要关机重启通知所有登陆用户;

 man  :  manual帮助文档
    man -k cmd ; 包含关键子cmd 字符的所有cmd
    man -f cmd: 完全匹配cmd 字符的cmd
    man 3 printf ; 进入第3 章节中的printf;
      在文本编辑器中,K(3 + K) 可以跳入对应的解释文件;

目录/文件的基本操作:

cd    : change dir(切换工作目录)
  cd .. : #切换到上层目录
  cd   :  #切换到当前用户家目录
  cd ~ :  #切换到当前用户家目录
  cd - :  #切换到上次工作目录
 
pwd   : print working dir 打印当前目录
  -L : logic 逻辑地址
  -P : phycis 物理地址

  EXAMPLE: 下面的run 文件夹是link 类型,对于不同pwd 参数返回就不同 

tree  : 树状格式打印
  -L : 打印到第几层,当前为第一层;
  -d : dir only, 只打印文件夹
  -s : size, 显示大小
  -h : human-readable size显示,方便阅读 
 
ls   :list 列出当前目录下文件,其中时间默认是mtime
  -a : all 所有文件
  -S : size 按size 降序排列
  -i : --inode, 打印出每个文件的index, 同一个文件有相同的index(主要针对软/硬链接)
  --time=atime/ctime/mtime : 指定显示的时间类型

  文件:
    可读:可以读取文件里的数据
    可写: 可以改变和删除文件
    可执行:可以执行该程序
  文件夹:
    可读:可以列出目录中有什么文件(只有名字 和 类型)
    可写: 可以在目录中删除和增加文件
    可执行:可以列出目录下文件信息,进入目录

lsattr : 文件隐藏属性
  -a : all 打印隐藏文件属性
  -R : recursively 递归
  -d : dir 如果是目录,仅打印目录

chattr: change 修改文件的隐藏属性, + : 增加,- : remove, = : 完全等于当前attr; 有这些选项'aAcCdDeFijPsStTu', 下面举例了一些;
  A : no atime update 不修改atime
  S : synchonous 同步写入
  a : append 只能增加数据
  c : compressed 自动压缩,解压
  d : no dump 不会被dump程序备份
  i : immutable 不能删除,修改,建立链接
  s : secure deletion 文件删除时,直接从磁盘删除
  u : undeletable 文件删除时,数据内容存在磁盘中 

mkdir : 创建目录
  -p : parents 多层文件目录建立时,父层文件夹没有时,自动建立
  -m :mode 文件夹权限; mkdir -m 700 files  

rmdir : 删除目录
  -p : 多层目录时候,同时删除父文件夹;如果父文件夹不为空,到不为空文件夹删除时候会fail, rmdir -p a/b/c/d/e
rm   : 删除文件/目录; 此时只是将物理位置移除链接。
  -i : 互动模式
  -r : recursively, 如果有递归,则递归删除文件夹下所有的文件&文件夹;
  -f : 不询问,直接删除;

mv   : move 移动文件;

cp : copy 拷贝文件
  -r : recusively, 递归复制
  -p : perserve 连同文件属性一起拷贝,mode, ownership, timestamp;
  -d : 若源文件为link 属性,则复制link 属性
  -a : archive 上面rpd 的要求都包含;
  -l : link 拷贝为硬链接,类似于C++ 中的别名
  -s : soft 拷贝为软链接,新建一个文件,类似超链接
  -u : update 源文件比目的文件要新,或目的文件不存在时候才更新;
  -i : interactive, 覆盖前询问(prompt)
  EXAMPLE: 下面展示了软/硬链接差别,硬链接是同一个文件,因为inode值一样,软链接是新文件。也可以注意文件前面的链接数;
        但是更改这3个文件任一个,其他文件都跟着更新;
        注意软链接时间戳为建立时间,即使源文件更新了。

文件内容增查改删:主要针对ASCII 编码文件

od   : 以二进制方式查看文件;
cat  : 正向连续输出
  -A : 相当于-vET
  -b : number-nonblank 列出行号
  -n : number 列出行号,包含空行
tac  : 反向连续读;
nl   :  输出行号, 等价 cat -b 
  -b : 行号指定方式
    -b a : 相当于 cat -n
    -b t : 相当于cat -b
    -b p : 只对满足正则表达式记行号, nl -b pSoft file  #只对包含Soft行统计行号;
  -n : 列出行号的表示方法
    -n ln : left number 行号在屏幕最左边
    -n rn : right number 行号在屏幕最右边
    -n rz : right + zero 最左边显示,补齐位用0
  -w <NUM> : 行号所占位数

EXAMPLE: nl -b por -n rz man  -w 20 

more  :  一页一页的显示文件内容, 进入查看文件后,可以有下面操作;
  /string : 向下查找string 关键字
  :f    : 显示文件名 和 当前显示行数;
  ?     : 查看其他命令
   
less  : 与more 类似,功能更多, 进入查看文件后,可以有下面操作;
  /string : 向下查找string 关键字
  ?string : 反向查找string 关键字
  n    : 继续向下查找
  N    : 继续反向查找
  q    : 退出
head  : 只看前面几行
  -n xx : 查看前xx 行数
  -n -xx: 最后xx行不显示
tail  : 末尾几行
  -n num  : 显示后num 行;
  -n +num : 除了前num - 1 行,其他都显示

touch  : 修改文件时间与新建文件,默认ACM 时间都会修改
  -a  : access time 仅修改访问时间
  -c  : no-create 仅修改文件的时间,如不存在,不新建
  -m  : modify 仅修改mtime
  -d  : date 修改文件日期
  -t  :time 修改文件时间[yymmddhhmm]

stat  : 显示文件的状态,包含大小,位置,ACM time等等;
  -c  : control, 控制输出内容; stat -c "%s %n"  a.a

chmod   :更改文件权限
  chmod a+x file #给file 文件UGO 都赋予执行权限
  chmod o-x file #将file 文件other 减去执行权限
  chmod 755 file #设置file文件权限 rwxr-xr-x
  chmod u=rwx,go=rx file #设置file文件的权限 rwxr-xr-x

  chmod u+/-S file 或 
  chmod 4755 file 方式更改文件隐藏权限;这里一共4为权限位,第一个4 就是代表下面的SUID/SGID/SBIT 权限位;
  修改文件的隐藏属性
  SUID: set_uid    4 二进制程序文件,非脚本; 用户在使用命令时候获取所属者的权限
  SGID: set_gid    2 目录与二进制文件,用户在该目录,有效组变为目录所属组
  SBIT: sticky bit 1 在该目录下,用户只能删除自己创建的内容; sudo 用户组可以突破这个限制;

chown  #更改文件所属用户   
  chown user:group file     #修改文件file的所属用户是user,所属组为group   
  chown -R user:group directory #修改目录directory及目录下的所有文件的所属用户是user,所属组为group   
  chown user file          #修改file 所属用户为user 
chgrp  #更改文件所属组,类似chown   
  chgrp -R group directory #修改directory 及目录下面所有文件所属组

 命令与文件查询:

which : 返回PATH 路径下的可执行文件
    which pwd/ls : 返回alias / build-in cmd / bin 

whereis : 寻找命令, 包含二进制/源文件/ 手册
        -b: 只查找二进制文件
        -m: 只查找manual 路径下文件
        -s: 只查找source 源文件
        -u: 查找其他文件

locate : 搜索文件(可部分查找)速度很快,因为这个是考维护/var/lib/mlocate/索引库,实现查找的;
    可以通过 sudo updatedb 方式更新这个文件
        -i : 忽略大小写
        -r : 按正则查找

find : 多样化高级查找,多用来查找特定要求
        与时间相关的参数 -atime, -ctime, -mtime
        ---------2---------1---------now------
        mtime  +2|  mtime 1|  mtime -1
        -mtime n : n天之前的(一天内)修改过的文件
        -mtime +n : n天之前,不包含n,修改过的文件
        -mtime -n: n天之内,包含n, 修改过的文件
        -newer file: 比file 还要新的文件

        与用户或用户组相关参数
        -uid n: 用户UID 为n  (id 可以查看uid 相关值)
        -gid n: 群组GID 为n
        -user name : 用户名为name
        -group name : 群组名name
        nouser : 文件所有者不存在
        nogroup: 文件所在组不存在 //针对一些账户被删除以后的寻找相关操作

        与文件权限及名字相关参数
        -name filename : 文件名filename
        -size[+-] SIZE :查找比SIZE 大或小的  //find . -size -1M
        -type TYPE: f b c d l s p //不同文件类型  //find / -type p
        -perm mode : 刚好包含mode文件
            find . -perm -o=rwt
        -perm -mode:  permission, 全部包含mode文件, 
  
    找到文件后,还可以进行后续的操作;
    -exec 指执行后面的命令,{}中存放的是find 找到的值,直到遇到;就执行命令所有参数结束;
    -delete : 删除找到的文件,可以直接用 -delete;  也可以使用 -exec rm -f {} \; 
    EXAM: find . size 0 -exec ls -al {} \;

搭配文件篇中的描述符,可以实现只保留成功信息;
find / -perm -o=rwt 2>/dev/null 1>11.txt  //其中 /dev/null 是文件回收站 2>/dev/null 其中必须没有空格
通过将错误的信息2放入回收站,有用信息放入文件,减少大量无用信息刷屏;

查找某个文件夹下特定后缀文件, 并统计行数, 字数
find /home/guigym/personal/ -name "*.c" -o -name "*.cpp" -exec cat {} \;    #打印出找到的文件内容,其中-o 是逻辑or 意思(-a 是逻辑 and);
cat `find /home/guigym/personal/ -name "*.c" -o -name "*.cpp"` | wc -w(-l, -m)   // 统计找到文件中字数/行数;

用户管理:

su : 切换用户 
        -| -l : login 重新登陆
        -m  | -p: preserver-environment 不更改环境变量
        -c command : command 切换后执行命令,并退出; su - guigym -c pwd

sudo: 临时切换为root 用户 ;
        -i: 切换到root 用户,并使用root 下 shell 设定
        -s: 切换到root 用户,使用当前shell  设定

passwd : 设定用户密码, /etc/shadow 里面的信息都可以通过passwd更改
       -d:delete 清除密码
       -l: lock 锁定用户
       -e: expire 使密码过期
       -S: status 显示密码认证日期
       -x days : max days 密码过期后最大使用天数
       -n days : 密码冻结后最小使用时间

gpasswd: 设定组密码
    -a username : 将用户加入群组
    -d username : 将用户从群组中删除
    -r : 删除密码
    -A usename  :将用户设置为群组管理员
    -M username1, username2, ... : 设置群组成员;
        
chsh 修改用户shell
        chsh -s shell_path

usermod : 修改用户账号
        -c string : 更改备注信息
        -d dir : 修改$HOME
        -e day: 账号期限
        -f days:密码过期后宽限日期
        -g groupname : 修改该用户所属群组
        -l username :修改该用户账号名称
        -L : 锁定用户密码,使密码无效
        -s shell:修改用户登陆所使用shell
        -u uid : 修改用户ID

useradd : 新建用户
        -d dir: 制定$HOME
        -m: 自动建$HOME
        -M: 不自动建立$HOME
        -s: 指定shell
        -c: 设置用户备注

userdel : 删除用户
        -r: 删除用户相关文件与目录

id : 显示用户信息
        -g:下属所属组id
        -G: 附加组id

 进程管理

free: free and used memory state, 打印系统情况与内存情况
        free -b/k/m/g : 以字节为单位显示
        free -s 5 : 每隔5s 显示一次
        free -h : human, 以人类可读方式,加上各自对应单位
        free -c 10:一共打印次数 

top: 显示当前系统进程情况,内存,cpu 等信息

dstat:disk state 系统资源信息统计工具
        dstat 2 3 : 2s 刷新一次,一共更新3次
        dstat -list

ps: process state 报告当前进程状态
        ps -aux
        ps -fe
pstree: process state tree, 树状显示进程派生关系
        pstree -p : 显示pid
        pstree -u : 显示用户
pgrep: process grep, 查找进程
kill: 删除执行中的进程和工作,通过ID 来杀进程
pkill: 批量按照进程名删除进程,通过名字来杀进程(一般是模糊匹配)

 

数据提取操作:

nl : number line for file or standard input;对输入实现行数计量;一般对于cat 文件来讲有 -n 选项,但是对于一些管道/输入信息,这个就比较有效果;

 

cut : 切分 (如果没有输入,则以输入内容为输入)
        cut -d c :delimiter 以c 字符分割 : 
        cut -f num: field, 显示num 字段的内容 [n-; n-m; -m; m,n]
        cut -b num: bytes 结果取第几个字节
        cut -c num: character, 只取这个范围内字符 

grep: 检索
        grep -w  : word-regexp 作为完整单词搜索
        grep -c  : count 统计匹配到次数
        grep -i  : ignore-case 忽略大小写
        grep -n  : line-number 可以打印行数
        grep -v  : invert-match 反向输出(不包含搜索的内容)

sort :排序
        -f : ignore case 忽略大小写
        -M : month-sort 以月份名称排序
        -n:  numeric-sort 根据数值排序
        -r: reverse  反向排序
        -u: uniq
            last | cut -d " " -f 1 | grep -v "^$" | grep -v "wtmp" | sort -u
        -c: check 检查文件是否有序
        -t 分隔字符: 指定排序是使用的栏位分隔字符
        -k :key 以区间排序
        +  : 排序栏位,第一栏为0, 按顺序优先排序; 
下面例子里面主要是sort 的用法,还有-n 是按照数值大小排列, -k 是以区间字符串顺序排列;

主要演示了-u 的效果,以及把前面一些命令综合起来应用;

wc: 统计字符, 字数,行数
        -l: line 仅列出行号
        -w: words 仅列出多少word,以空格和换行为一个单词间隔
        -m: 仅列出多少字节 byte
        -c: 列出多少字符 character
        -L:max-line-length, 列出最长一行的字符长度
 //wc -m 与 -c, 对于英文没看出差别,中文是不一样;
// 统计文件夹下cpp 文件中字符个数

uniq : 去重 , 必须要先sort,因为这个只和相邻行判断,没sort 就没办法 uniq
        -i : 忽略大小写
        -c: 计数
        -u:只输出无重复行

tee : 双向重定向
        -a : append 追加
       EAXM:ping www.baidu.com | tee output : 即会输出在终端也会在文件中保存一份,这样后面回看时候,要是终端已经被清空了,可以看文件中内容

split: 文件切分
        -b size : bytes 切分为size bytes 大小文件
        -C size : line-bytes 切分为size bytes 大小文件,但是不会断开一行
        -l num  : lines 以num行为大小切分
        split -C 1k filename   //切分后的文件的前缀名,对于非文件类型不可以提供前缀名;没有前缀名就用默认名

xargs : 参数替换, 针对一些需要前一个返回的结果值,来作为下一个命令的参数来使用
        -p : prompt, interactive执行指令前询问
            ls filename | xargs -p cat 
        -n num :每次执行cmd时需要的参数个数,防止返回了一堆数据,然后一次性都传给了后面的命令,这个可以指定每次给多少数据
            cat /etc/passwd | cut -d : -f1 | xargs -n 1 id
        -e 到等于某个参数时候,就结束
            cat /etc/passwd | cut -d : -f1 | xargs -n 1 -p -esys id

tr:(translate or delete characters) 替换 压缩和删除 tr [option] .. SET1 [SET2]
     -c : 取代所有不属于第一字符集的字符  complement
     -d : delete 删除所有属于第一字符集的字符
     -s : squeese-repeats 将SET1中连续重复的字符以单独的一个字符表示
    -t : truncate-set1 将第一字符集替换成第二字符集,如果SET1 与 SET2 字符集不匹配,不匹配部分不会替换。
     a='asfsa52sf234322652444' && echo ${a} | tr "[:lower:]" "[:upper:]"

其他:

tldr(too long don't read) :  精简列出各个命令选项,包含大部分的命令(不包含C库),需要专门安装;

  

远程文件转移:

  

  scp 文件名 用户名@主机名:目标位置   #从本地拷贝到远程主机
  scp 用户名@主机名:文件名 目的位置   #从远程位置拷贝文件到本地
  wget 47.93.11.51:88/install_zsh.sh     #从地址中获取文件到当前目录

 

grep/sed/awk linux 命令中三剑客:

 grep:
        正则表达式 regular expression, 对文本进行过滤的工具,有各种元字符 和 一般字符 构成的字符串;

        字符定义:    可以(man tr) 查看相关字符定义

            匹配普通字符  .
            忽略大小写 -i ;
            转义元字符 \$   \\ grep '\b'
            一系列字符集合  "[abcd]"  或者 \[0-9a-d\]
            排除字符集合 [^0-9]
            定位符 :  ^ 行首; $ 行尾 ; \b 单词边界 ;\B 单词非边界  // echo "hello llob loca" | grep "\Blo"  
        
      POSIX 字符集:
            [:alnum:] : 所有字母和数字 [0-9a-zA-Z]
            [:digit:] : 数字
            [:alpha:] : 字母
            [:upper:] : 大写字母
            [:lower:] : 小写字母
            [:blank:] : 空格
            [:graph:] : 非空字符
            [:punct:] : 标点符号

扩展正则: 一个或多个 + 0次或多次 * 0个或一个 ? 指定个数 {2,4}; // echo "hello " | grep "[[:digit::]]\{2\}" //注意是否需要转义符 // echo "hello " | grep -E "[[:digit::]]{2}" -E 以后可以不用转义 -P perl 正则表达 (man grep / man tr) 查看相关定义 grep -p '\d' : 包含数字 ; \D 不包含数字; \w 包含单词字符; \W 不包含单词字符

       -E extended-regexp grep -E "\w+\@[:alnum:]+\.[com]"
homework: echo "dolai_c@163.com" | grep -E "[a-zA-Z0-9][a-zA-Z0-9_]*\@[[:alnum:]]+\.com"

 

sed:

sed 非交互式文本编辑器 : 每次从文件和标准输入中每次读取一行数据复制到缓冲区中,然后读取命令行或脚本的编辑子命令,对缓冲区文本进行编辑.

    sed [OPTION]... {script-only-if-no-other-script} [input-file]...
  OPTION:
        -n : 安静模式
        -e : 不编辑源文件,默认选项
        -f : 使用脚本文件中操作,  这里脚本中使用sed 中操作命令;a/c/s/d/p ... 这些;
        -r : 支持正则
        -i : 直接修改文件
       Script:
        a :追加   //cat a.txt | sed  '1a new add one line after 1;' 在后面追加
        c :替换行 //cat a.txt | sed '1,+2cxxxxx'  ; 这里替换是将这一系列行,换成某个字符串;
        d :   删除   //cat a.txt | sed '4,6d'
        i :   插入   // cat a.txt | sed 'i1 xxx'  ; 在指定行插入
        p : 打印   
            ~: 表示步长  //cat a.txt | sed -n '1~2p'
            +: 连续几行  //cat a.txt | sed -n '1+3p'  
        s : 字符匹配以后进行替换字符   //  cat a.txt | sed  's/l/xxx/g'  //没有g 的话,只会替换第一个

 

awk: 是一种强大的数据处理工具,也是一种编程语言环境;

  是以空格作为分隔符;
        格式: awk [-Ffv]  'BEGIN{commands}   pattern {commands}   END{commands}'   file

        -F fs: 指定输入风格符号, fs 可以是字符串或正则 -F
        -v var=value 赋值一个用户定义变量,将外部变量传递给awk
        -f scriptfile 从脚本文件中读取awk 命令

        第一步: 执行BEGIN{commands} 语句中的语句
        第二步: 从文件或stdin 中读取一行,执行pattern {commands} 逐行扫描文件,从第一行到最后一行重复这一过程,直到读完
        第三步: 当读至输入流末尾时候,执行END{commands} 语句中内容

    last | grep -v "^$" | grep -v "wtmp" | cut -d " " -f1| sort | uniq -c | awk 'BEGIN{printf("start\n")} {sum =sum+$1} END{printf("vip sum=%d\nend\n", sum)}'

    last | grep -v "^$" | grep -v "wtmp" | cut -d " " -f1| sort | uniq -c | awk -v sum=0 '{if($1 >=5){sum+=$1} printf("%d %s\n", $1, $2)} END{printf("sum=%d\nend\n",sum)}'

    eval  `last | grep -v "^$" | grep -v "wtmp" | cut -d " " -f1| sort | uniq -c | awk -v sum=0 '{if($1 >=5){sum+=$1}} END{printf("sum=%d\n",sum)}'`  
    后面可以 echo ${sum} 打印出变量值, eval 可以将输出信息,作为当前命令行输入处理,实现赋值

    homework :
    1. 显示root用户的默认shell
        answer: cat /etc/passwd | grep root | cut -d : -f7

    2. 找出 /etc/passwd 中两位或者三位数
        cat /etc/passwd | tr : '\n' | sed -r 's/[^0-9]//g' | grep '\b[0-9]\{2,3\}\b'

    3. 计算/etc/passwd 中UID 为两位数或三位数的和
       my answer: cat /etc/passwd | cut -d : -f3 | grep '\b[0-9]\{2,3\}\b'| awk -v sum=0 '{sum=sum+$1} END{printf("%d\n",sum);}'

        answer: cat /etc/passwd | grep -w -E "[[:digit:]]{2,3}" | awk -F : -v sum=0 '{if($3 > 9 && $3 <1000) {sum=sum+$3}} END{printf("%d\n", sum)}'
    
    4. 计算3*3 数组 1|2|3\n4|5|6\n7|8|9 中间列的和
        my answer: cat a.txt| cut -d "|" -f2 | awk -v sum=0 '{sum=sum+$1} END{printf("%d\n",sum)}'
        answer : echo  "1|2|3\n4|5|6\n7|8|9" | awk -F "|" -v sum=0 '{sum=sum+$2} END{printf("%d\n",sum)}'

    5. 顺序打印/etc/passwd 名字及顺序编号。 格式: 编号 名字。
        my answer: cat /etc/passwd |cut -d :  -f1|nl
        answer: line=`cat /etc/passwd | wc -l`   
                cat /etc/passwd | awk -F : -v num=1 -v I=line'{if(num<I){printf("%2d %s\n",num++,$1)}}

 

 

nethogs -- 检测系统占用带宽情况

htop--交互式的进程浏览器

nmon --先是所有重要的性能优化信息

dstat--全能信息统计工具

posted on 2022-06-13 18:41  学海一扁舟  阅读(139)  评论(0编辑  收藏  举报