前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >08. Linux 编程(一:常用命令完全介绍)

08. Linux 编程(一:常用命令完全介绍)

作者头像
北野茶缸子
发布2021-12-17 09:33:34
3990
发布2021-12-17 09:33:34
举报
文章被收录于专栏:北野茶缸子的专栏

命令

shell 的命令可分为内建命令与非内建(外部)命令。二者操作方式,大不相同。

外部命令

也被称为文件系统命令,是存在于bash shell 之外的程序。它们并非shell 程序的一部分。外部命令程序通常位于/bin, /usr/bin, /sbin/usr/sbin中。一般可以通过which , type找到它们。比如ps 就是一个外部命令。

因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,但是其命令执行过程是由 shell 程序控制的。

当外部命令执行时,会创建出一个子进程,这种操作称为衍生,forking。

当进程必须进行衍生操作时,它需要话费时间与精力来设置新子进程的环境。所以外部命令还是有一定代价的。

内建命令

与外部命令的区别在于,内建命令不需要使用子进程来执行。它已经作为shell 工具的组成成分而存在了。我们可以利用type 了解某个命令是否为内建命令。

代码语言:javascript
复制
$ type cd
cd is a shell builtin

比如cdexit 都是shell内建命令。

相比起外部命令,内建命令既不需要衍生出子进程来执行,也不需要打开程序文件,因此内建命令的执行速度也更快,效率也更高。

这些命令是写在 bash 源码的 builtins 里面的,由 shell 程序识别并在 shell 程序内部完成运行,通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中。

其他

有一些命令有多种实现的方式,它们即有内建命令,也有外建命令。比如pwd, echo。可以通过-a 选项查看。

代码语言:javascript
复制
 type -a echo
echo is a shell builtin
echo is /bin/echo

which 命令则只会显示外部命令文件。

如果我们查看 ls 还会获得另外一种结果。

代码语言:javascript
复制
#得到这样的结果说明是内建命令,正如上文所说内建命令都是在 bash 源码中的 builtins 的.def中
xxx is a shell builtin
#得到这样的结果说明是外部命令,正如上文所说,外部命令在/usr/bin or /usr/sbin等等中
xxx is /usr/bin/xxx
#若是得到alias的结果,说明该指令为命令别名所设定的名称;
xxx is an alias for xx --xxx

基本命令

与文件压缩有关的命令

文本处理相关命令

其他命令

col

col 命令可以用来转换tab 与空格。

操作示例

代码语言:javascript
复制
# 查看 /etc/protocols 中的不可见字符,可以看到很多 ^I ,这其实就是 Tab 转义成可见字符的符号
$ cat -A /etc/protocols
# 使用 col -x 将 /etc/protocols 中的 Tab 转换为空格,然后再使用 cat 查看,你发现 ^I 不见了
$ cat /etc/protocols | col -x | cat -A

join

和数据库或者其他编程语言中的join 非常类似,就是将文件通过相同的行连接在一起。

代码语言:javascript
复制
join [option]... file1 file2

image.png

代码语言:javascript
复制
$ cd /home/shiyanlou
# 创建两个文件
$ echo '1 hello' > file1
$ echo '1 shiyanlou' > file2
$ join file1 file2
# 将/etc/passwd与/etc/shadow两个文件合并,指定以':'作为分隔符
$ sudo join -t':' /etc/passwd /etc/shadow
# 将/etc/passwd与/etc/group两个文件合并,指定以':'作为分隔符, 分别比对第4和第3个字段
$ sudo join -t':' -1 4 /etc/passwd -2 3 /etc/group

# 也就是以: 分隔passwd 与group 中的内容,其中取前者的第四段和后者的第三段合并

image.png

paste

image.png

代码语言:javascript
复制
$ echo hello > file1
$ echo shiyanlou > file2
$ echo www.lanqiao.cn > file3
$ paste -d ':' file1 file2 file3
$ paste -s file1 file2 file3

另外,还可以使用 - ,直接对传递的文本本身进行分段处理。

若干个 - 则将文本按照设定分隔符分隔为若干列。

练习

image.png

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 北野茶缸子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 命令
    • 外部命令
      • 内建命令
        • 其他
        • 基本命令
        • 与文件压缩有关的命令
        • 文本处理相关命令
        • 其他命令
          • col
            • join
              • paste
              • 练习
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档