美文网首页
SHELL 总结 命令的使用 基本快捷键 性能命令等

SHELL 总结 命令的使用 基本快捷键 性能命令等

作者: oasis_m | 来源:发表于2020-02-18 17:24 被阅读0次

    声明:所有文章只作为学习笔记用,转载非原创

    很重要

    https://www.cnblogs.com/aguncn/p/7000775.html?utm_source=itdadao&utm_medium=referral

    https://www.cnblogs.com/liang-io/p/9825363.html
    基础命令
    学会如何使用 man 命令去阅读文档。学会使用 apropos(适当的) 去查找文档

    命令行艺术

    https://explainshell.com/
    https://cloud.tencent.com/developer/article/1441454
    帮助
    --help
    man -k
    apropos 适当的

    #命令运行原理
    用户输入命令,
    bash利用空格切割获得命令,
    判断命令是内部或外部命令,
    在$PATH中给定的目录中从左向右寻找。Linux环境变量以:分割的。
    shell的简单定义就是命令行解释器,功能是将使用者的命令翻译给核心处理
    

    Linux 计算日期的时间是以 1970 年 1 月 1 日作为 1 不断累加得到的时间
    这是因为,Linux 计算日期的时间是以 1970 年 1 月 1 日作为 1 不断累加得到的时间,到 1971 年 1 月 1 日,则为 366 天。这里显示 15775 天,也就是说,此 root 账号在 1970 年 1 月 1 日之后的第 15775 天修改的 root 用户密码。

    那么,到底 15775 代表的是哪一天呢?可以使用如下命令进行换算:
    [root@localhost ~]# date -d "1970-01-01 15775 days"
    2013年03月11日 星期一 00:00:00 CST
    /etc/shadow
    mysql:!!:18203::::::
    date -d "1970-01-01 18203 days"
    2019年 11月 03日 星期日 00:00:00 CST

    https://cloud.tencent.com/developer/article/1445050

    vim 自带教程

    vimtutor

    怎样记住命令 https://www.zhihu.com/question/21690166

    常用的英文单词

    https://blog.csdn.net/s464036801/article/details/8219574

    runlevel control directory  rc.d 运行级别
    field separator 分隔符
    *   **GPL**(GNU 通用公共许可证,GNU General Public License) 
    *   **Grep**(全局正则表达式及打印,Global Regular Expression and Print)
    
     如 invoke 调用, locale 当地,compatible兼容, configure,verbose冗长 ... etc 
         tx是发送(transport),rx是接收(receive)
     信息摘要(Message Digest)
    recursive 递归
    reverse, 上下颠倒的意思
    dereference 取消引用
    negated   英[nɪˈɡeɪtɪd][](javascript:;)[](javascript:;) | 美[nɪˈɡeɪtɪd][](javascript:;)[](javascript:;) | 
                        | v. | 取消; 使无效; 否定; 否认 |
    probe 探测
    Merge 合并,结合,并入; 相融; 融入; 渐渐消失在某物中;
    orphaned 孤儿
    Resume each 恢复
    suspended 暂停的
    bootstrap 引导程序
    symbols 符号标志
    Selective Acknowledgment 选择确认
    Referenced 被引用
    Anonymous 匿名
    Implementations  实做
    omit 忽略
    quotas 配额
    --numeric-sort  数字
    promiscuous 混杂
    Thread Id 线程
    periodically 定期的
    Toggle 切换
    control Group 控制组 --- cgroup 
    OOM killer(Out Of Memory killer)
     \"     double quote 双引号     (man printf)
      \\     backslash  反斜杠
    malloc的全称是memory allocation
    SELinux(Security Enhanced Linux) 增强
    IPC(Inter-Process Communication),进程间通信
    LWP(Light Weight Process)轻量级进程
    Extra Packages for Enterprise Linux (or EPEL) 
    resident set size 常驻内存
    Assembling 汇编、集合组合 
      GUI:Graphic User Interface
    requisite 必要条件
    页目录(page directory, PGD
    wildcard  通配符
    reaping 收割,回收
    General-Purpose Registers 通用寄存器
    Embedded 嵌入式  Linux Consulting 咨询服务
    

    图形界面

    GNOME (C,图形库gtk)
    KDE (C++,图形库qt),下图为CentOS6.10的KDE界面 
    XFCE (轻量级桌面)
    PS: 如果用户需要用到图形处理小工具,需要查看图形工具支持的图形库,选择对应的GUI,否则小工具无法使用。
    CLI:Command Line Interface(文本模式)

    Extra Packages for Enterprise Linux (or EPEL) 简言之,EPEL是专门为RHEL、CentOS等Linux发行版提供额外rpm包的
    https://www.cnblogs.com/f-ck-need-u/p/8494992.html
    Emacs,著名的集成开发环境和文本编辑器。

    [https://www.cnblogs.com/33debug/p/6657519.html](https://www.cnblogs.com/33debug/p/6657519.html)
    
    #shell 定义:
       对于一般用户,我们不能直接使用操作系统(kernel)。而是通过 kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
    从技术角度 , Shell的最简单定义 : 命 令 行 解 释 器(command Interpreter)
    主要包含:
        a. 将使用者的命令翻译给核心(kernel)处理。
        b. 同时,将核心的处理结果翻译给使用者。
    
    #父子
    [https://jingyan.baidu.com/article/0eb457e5c9559203f1a90514.html](https://jingyan.baidu.com/article/0eb457e5c9559203f1a90514.html)
    
    
    
    图解快捷键
    [https://blog.csdn.net/weixin_42256178/article/details/80392077?utm_source=distribute.pc_relevant.none-task]
    
    #快捷键
    [b]检索[/b]
    Ctrl+r: 快速检索历史命令。(r: retrieve 找回)
    Ctrl+p: 上一个使用的历史命令。 (p: previous)
    Ctrl+n: 下一个使用的历史命令。(n: next)
    
    [b]移动[/b]
    Ctrl+a: 光标回到命令行首。 (a: ahead)
    Ctrl+e: 光标回到命令行尾。 (e: end)
    Ctrl+b: 光标向行首移动一个字符。 (b: backwards)
    Ctrl+f: 光标向行尾移动一个字符。 (f: forwards)
    Alt +f: 光标向前移动一个单词。 (f: forwards)
    Alt +b: 光标向后移动一个单词。 (b: backwards)
    
    [b]删除[/b]
    Ctrl+w: 删除光标处之前的词。 (不包括光标处字符)
    Alt +d: 删除光标之后的词。 (包括光标处字符)
    Ctrl+k: 删除光标处到行尾的字符。(包括光标处字符)
    Ctrl+u: 删除光标处到行首的字符。(不包括光标处字符)
    Ctrl+h: 向行首删除一个字符。
    Ctrl+d: 向行尾删除一个字符。
    
    [b]粘贴[/b]
    Ctrl+y: 粘贴刚才所删除的内容。
    
    [b]其他控制键[/b]
    Tab 键: 命令、文件名等自动补全功能。
    
    Ctrl+t: 交换光标所在字符和其前的字符。
    
    Ctrl+i: 相当于 Tab 键。
    Ctrl+m: 相当 Enter 键。
    Ctrl+o: 相当于 Ctrl+m。
    
    Ctrl+v: 插入特殊字符。例如:Ctrl+v+m(插入^M)
    
    Ctrl+s: 挂起当前 shell。可以使快速输出的终端屏幕停下来。
    Ctrl+q: 退出 Ctrl+s 状态。
    Ctrl+z: 使正在运行在终端的任务,运行于后台。 (可用 fg 恢复)
    Ctrl+c: 中断终端中正在执行的任务。
    Ctrl+d: 退出终端。
    
    
    
    #Shell特殊状态变量
    $?     获取执行上一个指令的执行状态返回值(0成功,非0为失败)
    $$      获取当前执行Shell脚本的进程号(PID)
    $!      获取上一个在后台工作的进程的进程号(PID)
    $_      获取在此之前执行的命令或脚本的最后一个参数
    
    
    bashrc 
    /etc/skel/.bashrc 
    [https://www.cnblogs.com/midworld/p/11006967.html](https://www.cnblogs.com/midworld/p/11006967.html)
    
    
    
    
    
    #命令总结
    [http://c.biancheng.net/view/5970.html](http://c.biancheng.net/view/5970.html)
    [https://blog.csdn.net/qq_44740871/article/details/97420340](https://blog.csdn.net/qq_44740871/article/details/97420340)
    [https://blog.51cto.com/11620628/2430428](https://blog.51cto.com/11620628/2430428)
    
    以bash为例
    解释器优先从bash自带的命令也就是内部命令(在内存中)中找,找到了自然就直接执行了,没找到呢?就在外部命令中找,也就是磁盘中存在的可执行程序或代码,这里就存在一个优先级,我们知道内存中是有一块Cache的,这里面有从硬盘中缓存过来的数据,我们使用过的命令自然也在其中,优先从这里面找,找不到也不是就放弃了,直接去硬盘里面找,此时就通过PATH环境变量来找,PATH里存放的就是路径可以看一下
     
    # 十进制转十六进制 
    printf "%x\n"  7906
    
    
    #lsof 
      lsof +D /workshare/
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
    bash    16398 root  cwd    DIR  253,0     4096 35813076 /workshare
    tail    16476 root  cwd    DIR  253,0     4096 35813076 /workshare
    tail    16476 root    3r   REG  253,0      774 35813081 /workshare/test1.txt
    13 . 列出所有的网络连接
    lsof -i
    14. 列出所有tcp 网络连接信息
    lsof  -i tcp
    15. 列出所有udp网络连接信息
    lsof  -i udp
    16. 列出谁在使用某个端口
    lsof -i :3306
    17. 列出谁在使用某个特定的udp端口
    lsof -i udp:55
    特定的tcp端口
    lsof -i tcp:80
    18. 列出某个用户的所有活跃的网络端口
    lsof  -a -u test -i
    
    #命令基本意思
    

    apropos -ewhatis 可以显示 section 代号:
    man 1 ls
    man 1p ls
    [root@master locales]# whatis ls
    ls (1) - list directory contents
    ls (1p) - list directory contents
    [root@master locales]# whatis ps
    ps (1) - report a snapshot of the current processes.
    ps (1p) - report process status

    1. -h 通常意指 'h' + uman, 也就是 human-readable,能让人类方便读的格式输出, 比如 1.3 GB 格式, 而不是 1300000000 bytes, 代表者有: ls -lth, sort -h

    2. -v (小写) 通常意指 'v' erbose, 代表者有: curl -v, ssh -v, python -v
    2.1 -V (大写) 通常意指 ‘V’ ersion,与 --version 相比之下比较冷门,代表者有: gedit -V, firefox -V, openvt -V
    2.2 --version (小写 v) 也是意指 ‘V’ ersion,代表者是九成的命令: python --version, konsole --version, gnome-shell --version, firefox --version, chromium-browser --version, bash --version, curl --version, tree --version, ls --version, journalctl --version, gedit --version, unp --version。 除了 java 和 javac 使用非 GNU 标准的 -version (少了一个 '-')
    2.3 --help, 同上, 九成的命令都有。不推荐 -h, 很多命令没有 -h, 亦或已经用来代表 'h'uman-readable。

    3. -a 通常意指 'a'll, 全部文件的意思(因为开头 "." 命名的文件是默认隐藏的如 vim 的 .swp 恢复文件, 历史原因和后果请看此 https://plus.google.com/+RobPikeTheHuman/posts/R58WgWwN9jp), 代表者有: ls -a, tree -a

    4. -r 通常意指:

    [a]. 'r' + everse, 上下颠倒的意思,代表者有: ls -lthr, sort -r

    • 本人的 l alias 是 `ls -larthiF --context --color', 其中 t+r 排列最新更改日期的文件在最下方,毕竟大多数情况下,我只关心最近的文件。

    [b]. 'r' + ecursive, 递归的意思,普遍用于遍历目录的子目录,代表者有: grep -r, rm -r

    [c]. 'R' 也可能意指 'R' ecursive , 代表者有:
    [c.1] ls -R, chmod -R
    [c.2] grep -R (--dereference- 'R' ecursive)

    [d]. rm 和 cp 的 -r 和 -R 同样是 recursive。切记有些平台只有 -r, 有些平台只有 -R, 有些平台两者都有。

    5. --exclude-dir 排除某个目录,代表: cloc . --exclude-dir=xxx, grep -rniI --exclude-dir=xxx abc ./* 。

    5.1 "exclude" 是排除的意思,对立的就是 "include"。"dir" 是 "directory" 的缩写,表示 "目录"。Unix 传统不使用 "folder" 这个英文表示目录。

    建议:

    0. 学习命令选项不需要英文很好,manual 的英文简单,而且重复频率很高, 如 invoke, locale,compatible, configure, ... etc 不像英文小说每一段都有新词囧。

    1. 不仅仅是 man,当不确定的时候,可以用 --help 快速一览选项。切记 --help 不等同于 man, 有时需要两个命令互补。也别忘了 info。要切记的是 man 本身有 section 分类 ,如图所示, man 1 lsman 1posix ls 可以浏览两个不同的 manual, 用 apropos -ewhatis 可以显示 section 代号:

    
    
    #管道
    

    https://www.cnblogs.com/old-path-white-cloud/p/11685558.html

    /proc 伪文件系统 https://blog.csdn.net/qq_28357631/article/details/60764758

    /proc 文件系统是一种内核和内核模块用来向进程(process)
    简单来说:之所以把/proc文件系统称为虚拟,是因为其包含的文件和子目录并没有存储在磁盘上,而是由内核在进程访问此类信息时候动态创建而成的。
    尽管/proc 中的文件是虚拟的,但它们仍可以使用任何文件编辑器或像’more’, ‘less’或’cat’这样的程序来查看。当编辑程序试图打开一个虚拟文件时,这个文件就通过内核中的信息被凭空地(on the fly) 创建了。

    ├1/ 关于进程1的信息目录。每个进程在/proc 下一个名为其进程号的目录。

    ├cpuinfo 处理器信息,如类型、制造商、型号和性能。

    ├devices 当前运行的核心配置的设备驱动的列表。

    ├dma 显示当前使用的DMA通道。

    ├filesystems 核心配置的文件系统。

    ├interrupts 显示使用的中断,and how many of each there have been.

    ├ioports 当前使用的I/O端口。

    ├kcore 系统物理内存映象。与物理内存大小一样,但实际不占这么多内存;

    ├kmsg 核心输出的消息。也被送到syslog 。

    ├ksyms 核心符号表。

    ├loadavg 系统”平均负载”;3个没意义的指示器指出系统当前的工作量。

    ├meminfo 存储器使用信息,包括物理内存和swap。

    ├modules 当前加载了哪些核心模块。

    ├net 网络协议状态信息。
    最主要的,就是local_address本地地址:端口、rem_address远程地址:端口、st连接状态。

    注1:文件中都是用的16进制,所以HTTP的80端口记录为0050。
    注2:状态码对应如下
    00 "ERROR_STATUS",
    01 "TCP_ESTABLISHED",
    02 "TCP_SYN_SENT",
    03 "TCP_SYN_RECV",
    04 "TCP_FIN_WAIT1",
    05 "TCP_FIN_WAIT2",
    06 "TCP_TIME_WAIT",
    07 "TCP_CLOSE",
    08 "TCP_CLOSE_WAIT",
    09 "TCP_LAST_ACK",
    0A "TCP_LISTEN",
    0B "TCP_CLOSING",
    ├self 到查看/proc 的程序的进程目录的符号连接。

    ├stat 系统的不同状态

    ├uptime 系统启动的时间长度。

    └version 核心版本。
    https://www.cnblogs.com/cfinder010/p/3143263.html
    https://github.com/torvalds/linux/blob/v4.10/Documentation/networking/proc_net_tcp.txt
    https://blog.csdn.net/whatday/article/details/100693051

    查看

    /proc/cpuinfo - CPU 的信息(型号, 家族, 缓存大小等)
    /proc/meminfo - 物理内存、交换空间等的信息
    /proc/mounts - 已加载的文件系统的列表
    /proc/devices - 可用设备的列表
    /proc/filesystems - 被支持的文件系统
    /proc/modules - 已加载的模块
    /proc/version - 内核版本
    /proc/cmdline - 系统启动时输入的内核命令行参数
    /proc/sys/vm/
    /proc/net/dev

    [shell脚本中使用getopts处理多命令行选项]https://blog.csdn.net/wdz306ling/article/details/79974377

    https://blog.csdn.net/ouyang_peng/article/details/86493502

    tail 与 head

     
    [https://www.jianshu.com/p/72ebecad9566](https://www.jianshu.com/p/72ebecad9566)
    head -n k和head -n +k 相同 (k是相同数字)
    tail -n k和tail -n -k 相同
    head -n -3 testfile (共10行)
    1
    2
    3
    4
    5
    6
    7
    head -n -3输出7行(祛除后面三行),而tail -n +3输出8行(从第三行开始)。 头正尾负
    

    性能 进程相关

    https://www.cnblogs.com/zhuochong/p/10185707.html

    java 常用的分析手段和逻辑

    https://www.cnblogs.com/onmyway20xx/p/3668861.html
    jstack
    jmap

    https://my.oschina.net/hosee/blog/906955
    OOM killer(Out Of Memory killer)

    1、UNIX options, which may be grouped and must be preceded by a dash.
      UNIX选项,可以分组,并且必须以 '-' 开头。
      如 -A -e
    2、BSD options, which may be grouped and must not be used with a dash.
       BSD选项,可以分组,不能和 '-' 一起使用。
      如 a
    3、GNU long options, which are preceded by two dashes.
       GNU长选项,前面有两个'--'。
       如 --help
    
    ---ps -ef 
    UID    //用户ID、但输出的是用户名 
    PID    //进程的ID 
    PPID    //父进程ID 
    C      //进程占用CPU的百分比 
    STIME  //进程启动到现在的时间 
    TTY    //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。 
    CMD    //命令的名称和参数
    
    ---ps aux
    同ps -ef 不同的有列有
    USER      //用户名 
    %CPU      //进程占用的CPU百分比 
    %MEM      //占用内存的百分比 
    VSZ      //该进程使用的虚拟內存量(KB) 
    RSS      //该进程占用的固定內存量(KB)(驻留中页的数量) 
    STAT      //进程的状态 
    START    //该进程被触发启动时间 
    TIME      //该进程实际使用CPU运行的时间
    
    其中STAT状态位常见的状态字符有
    D      //无法中断的休眠状态(通常 IO 的进程); 
    R      //正在运行可中在队列中可过行的; 
    S      //处于休眠状态; 
    T      //停止或被追踪; 
    W      //进入内存交换 (从内核2.6开始无效); 
    X      //死掉的进程 (基本很少见); 
    Z      //僵尸进程; 
    <      //优先级高的进程 
    N      //优先级较低的进程 
    L      //有些页被锁进内存; 
    s      //进程的领导者(在它之下有子进程); 
    l      //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads); 
    +      //位于后台的进程组;
    其它常用组合
    ps -eFh
    ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
    
    #top
    [https://www.zhangshengrong.com/p/8AaY3v53X2/](https://www.zhangshengrong.com/p/8AaY3v53X2/)
    
           -H 显示线程 -p 指定pid
    -H 线程模式,示例:top -H -p `pidof mysqld`
    选项:
        -d # 指定刷新时间间隔,默认为3秒
        -b 全部显示所有进程
        -n # 刷新多少次后退出
        -H 线程模式,示例:top -H -p `pidof mysqld`、
    
    
    

    查看watch 用法

    watch more /proc/net/dev
    

    邮件服务 理解

    简单邮件传输协议(Simple Mail Transfer Protocol,SMTP):用于发送和中转发出的电子邮件,占用服务器的25/TCP端口。
    
      邮局协议版本3(Post Office Protocol 3):用于将电子邮件存储到本地主机,占用服务器的110/TCP端口。
    
      Internet消息访问协议版本4(Internet Message Access Protocol 4):用于在本地主机上访问邮件,占用服务器的143/TCP端口。
    

    相关文章

      网友评论

          本文标题:SHELL 总结 命令的使用 基本快捷键 性能命令等

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