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

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

很重要

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 总结 命令的使用 基本快捷键 性能命令等)