昨天在用curl发送简单的HTTP请求做测试的时候发现自己每次使用的时候都是在网络上查看别人的示例才能想起来怎么用,这样效率太低了,虽然有网络依然在,但是总感觉不是被自己掌握着,心里不踏实,回想起来自己使用Linux也差不多有三四年了,从最开始接触就是用一本Linux基础教程的书籍(不是鸟哥的书),开始接触的就是linux的各种各样的命令一些关于简单的shell编程的知识,但是当时仅仅掌握了一些常用的命令,对于大多数的命令还是在使用的时候遇到再翻资料查看,可能处于对英文文档的畏惧或是感到乏味,通过man命令查看的过程中总是不能够全部掌握一个命令的使用,而仅仅是该命令的某一个参数,以后都这样使用,其实可能还存在另外一种更简单有效的方案,而自己完全不知道。
鉴于以上的问题,我觉得还是有必要静下心来好好的学习一下经常使用到的linux命令,这样以后自己说出“熟悉Linux操作系统”(当然这句话不是仅仅掌握一些命令就可以了)的时候心里更有底气了,另外也让自己能把一些碎片时间收集起来,坚持做一件事情,锻炼一下自己对一件事情的坚持,这点是以前自己最欠缺的。
Linux命令有上百个,我们常用的也就那几十个,首先就从这几十个开始吧,主要参考man命令的描述,这样顺便能锻炼一下自己的英文文档的阅读能力,每个命令尽可能的通过实例配合讲述每个参数的使用以及组合的使用,当然可能有一些命令会非常复杂,需要一段时间的学习才能真正的吃透,不过现在时间还算充足,收集一下碎片时间,只要自己能够坚持,肯定能够战胜的。
Linux命令一般保存在/usr/local/sbin,/usr/local/bin,/usr/sbin,/usr/bin,/sbin,/bin这些目录下,我们一般使用的时候并不需要输入命令的绝对路径,而仅仅输入命令名就可以了,这是因为在shell中(经常用的bash)会根据根据环境变量PATH的配置,在所有PATH下的目录中查找是否存在输入的命令,如果存在则使用该文件,如果不存在则报错:-bash:
ls: 没有那个文件或目录,我们可以通过which命令后面跟着bash的命令查看命令的执行文件具体存放在那个目录下,例如which ls输出/bin/ls。
其实每一个命令只是一个linux的可执行文件,这个可执行文件可以是二进制文件、脚本文件等,当我们运行它们的时候和执行一些我们编译连接完成之后的程序一样的,对于脚本文件我们可以通过查看该文件内容的方式查看具体执行过程,而二进制文件一般是ELF格式的二进制文件,类似于C语言写出来的程序编译连接生成的可执行文件,可以通过strace命令跟踪一个命令执行过程中使用的系统调用,在分析问题的时候这是一个很棒的方法。当我们启动执行一个命令的时候,其实我们是处于另外一个进程的上下文中,这个进程就是我们使用的bash进程,它始终在等待着用户的输入,然后根据输入的命令行的第一个参数从PATH(如果只是一个参数名会从PATH中查找,如果包含绝对路径或者相对路径则根据当前路径查找)中查找该文件,如果找到之后再启动一个新进程(exec系统调用),这个子进程执行命令,而bash进程则根据是否该命令的是否以后台进程执行决定是否等待子进程执行完成。
好了,经过以上的介绍算是拉开了全面学习Linux命令的序幕,接着就认真的学习每一个命令,坚持下来。