shell教程(2):积木游戏之认识积木--重要的系统命令


作者:余涛
email:[email protected]
中国科学院大学

前言

第一课shell教程(1):有没有兴趣玩耍一下shell版俄罗斯方块?简单介绍了什么是shell、它的版本、功能和特性。那么应该如何学习一门编程语言呢,其实就如同小孩们玩搭积木的游戏,想要造一个城堡,首先你要学会认识每一块积木都是用来干什么,这个是用来建造地基,这个是用来建造城墙,那个是用来建造大门…对于shell来说,这一阶段首先要认识一些常用命令,工欲善其事必先利其器,熟悉这些工具在编程的时候才能得心应手。

所有命令的用法规则

俗话说没有规矩不成方圆,所有命令的使用都有着统一的使用方式,一般是
命令 [选项 参数] <输入>
选项结合参数的设置使得命令更为强大,多数命令不需要加任何选项参数就可以运行,但是如果想使用更多的功能你就需要指定选项参数一个或者多个。
所谓的标准输入其实就是键盘输入,文件输入就是存到文本的内容作为命令的输入。
什么鸟语?能不能说人话?请看以下实例。

[Neptuneyut]$echo "Hello Shell"  #在屏幕显示/打印“Hello Shell”
Hello Shell
#“Hello Shell”即为标准输入,我们直接敲到屏幕的,很好理解吧,这里中间缺省选项参数
[Neptuneyut]$ echo -n "Hello Shell" #加参数-n,使得结尾不再换行,不加-n的默认会在结尾加换行
Hello Shell[Neptuneyut]$

经过上面的实例想必大家对命令的一般用法有了感性的认识,但是问题在于每个命令都有不同的选项,我们不可能都记住,这个时候怎么办呢?

授人以渔

command --help[-h]
的方式来查看命令选项参数,这几乎是所有命令或者软件必备的选项功能。值得一提的是,这也应该成为你写脚本必须要提供的一个功能,尽量为每一个脚本提供一个帮助选项,除非你或者别人可以不费周折的知道怎么使用。

从显示的帮助信息可见echo所有选项的功能都描述的比较清楚,稍微懂点英文就可以理解,如果某些描述实在令人费解,那你就加上这个参数按下Enter键大胆尝试,看看结果再理解它的涵义。
除了上面的方式,还有
man command
info command

可以查看系统内建命令(built-in)更为详细的使用方法,但是对于外部的软件就不一定了。
所谓系统内建命令,是指伴随着你操作系统的安装而附带的命令,不需要再通过第三方软件源另行下载安装
可以通过ls /bin/命令查看系统内建命令,对于2.6.32-279.el6.x86_64内核的系统来说有140个内建命令。

好了,如何使用命令的方法已经告诉你了,本期推送完!
皮一下,当然没完,下面还有很多干货呢!

程序运行原理

想要理解为什么命令是这样调用的需要理解程序是怎么运行,linux的文件系统又是什么。我们知道程序(或者命令)无非是按照某种语法写在磁盘的文本,运行一个程序,首先就要告诉这个程序存在的物理路径,即磁盘的位置,随后将程序读入内存,并激活cpu的运算能力,由于计算机只认识0101的符号,我们写的代码需要经过一个编译过程,将其转化成计算机识别的语言。纵观这个过程,准确告诉程序的位置是第一步,那么Linux系统的文件系统是如何架构的呢?
上面的命令ls的功能是显示目录下的内容,后面的/bin/是想要的显示的具体目录,为什么系统内建命令都放在这个目录呢?对于Linux系统来说,一切皆文件(程序是文件、设备是文件,各种配置也是文件),既然是文件,就需要文件系统架构,Linux所有的文件都源于根目录,用“/”表示,上下级目录之间也用“/”分割,为了便于管理,系统在安装的时候就会默认生成一些必要的目录用来分类存放各种文件,例如/bin/下存放着各种内建命令,/dev/下存放着各种设备文件,/etc/存放着用户密码和系统配置等文件,/proc/存放着系统动态内核、参数等信息…

需要注意的是这种从根目录写文件路径的称为绝对路径(例如上面的/bin/echo),在任何时候你都可以找到该文件,进行读、写、执行的操作,但是这样带来的问题是冗长的书写,有可能一条命令光引用路径就写了好几行,那有什么办法吗?此处先卖个关子,将在下期揭晓答案。

常用命令指南

上一节有点歪楼,还是回到本期的主题,简要介绍最为常用的命令。需要说明的是,Liunx完整的系统命令数量庞大,没必要都学一遍,对于大多数人来说掌握常用的一些命令即可,另一个好消息是系统命令使用一般极其简单,因此下面内容仅作为学习指南,具体的参数使用和延申需要大家多动手实践,还是那句话,老司机请绕过。

显示标准输入

  • echo
  • printf

功能:以上命令均能显示输出标准输入,相比echo,printf功能更为强大,可以格式化输出文本内容。
shell应用:在脚本中打印某一步处理输出的结果,用来排查错误;对文本按照特定要求格式化输出,使得输出结果更为整齐、美观。
实用命令:

#彩色输出
echo -e "\e[32mHello shell\e[0m" 
printf "\e[35mHello shell\n\e[0m"
#echo -e "\e[文字颜色m字符串\033[0m"
#指定-e选项后\e将有着特殊含义,即用来设置文字颜色打印字符串,然后再把文字颜色恢复默认设置,0表示使用默认设置。

#格式化输出
printf "%-10s %.2f\n"   二黑  60.256 狗蛋  80.2235
#%s 格式化字符串,-10表示长度10个字符,左对齐
#%f 格式化浮点数,.2表示保留2位小数

显示文件输入

  • cat
  • less
  • more
    功能:查看文本内容,cat一次性将文本输到屏幕,more每次输出一部分,less很像more,分次输出,但最后输出结果不会占领屏幕,对于长文本推荐less -S,谁用谁知道。除此之外,cat > filename,可以新建文件按Ctrl+c结束输入(最后要按enter换行,否则不会保存最后一行)。

目录/文件外部操作

  • ls:#查看目录
  • mkdir:#创建目录
  • touch:#创建文件
  • cp:#拷贝文件
  • mv:#移动文件
  • rename:#重命名文件按
  • rm:#删除文件
  • tar:#打包/解包目录
  • gzip:#压缩/解压缩文件
    实例:
ls -lh #l详细显示文件的属性,h根据文件大小自动显示大小(Kb/Mb/Gb)
touch {1..10}.txt #批量创建1.txt 2.txt...10.txt

linux老鸟委员会提醒您:命令千万条,安全第一条,rm -rf / ,老板把命要!!!

文本处理套件

  • seq #生成等差数列
  • tr #从标准输入转换、压缩和删除字符串
  • rev #反转字符串
  • sort #排序
  • uniq #去重,必须先sort才能去重
  • wc #统计文本
  • sed #流编辑器
  • grep #在文件或者标准输入搜索特定的模式
  • awk #强大的文本处理功能,本身就是一门语言,将在后续讲解
echo "aaatcg" |tr atcg tagc|rev #实现序列的反向互补
grep -A n "pattern" file    #在file中搜索pattern,并输出匹配到的行及紧接着的n行 
grep -f list file    #按照list中的patern在file中批量搜索
sed -n "s/pattern/string/pg" file   #将file中匹配pattern的所有字符替换为其他string
 seq 1 10|awk '{sum+=$1}END{print sum}' #计算1-10的累加和

文本编辑器

  • vi #强大的文本编辑器,将在后续讲解

系统

  • top #动态查看系统进程和负载
  • ps #静态查看系统进程和负载
  • jobs #查看后台任务

磁盘

  • df #查看磁盘分区大小
  • du #统计文件占用的磁盘大小

网络

ping #测试网络是否畅通
netstat #查看网络连接状态

熟悉以上命令基本可以玩转Linux系统以及做一些简单的任务处理了,其实数一数也才20几个常用的命令,所以,骚年加油,让键盘跳跃起来吧!

本次shell教程的讲解和源码在Github Shell-10-Lessons,欢迎大家star、fork、watch!

发布了23 篇原创文章 · 获赞 18 · 访问量 6560

猜你喜欢

转载自blog.csdn.net/qq_42491125/article/details/92705061