搜索
查看: 2788|回复: 0

[linux] I-2——linux初步2:饮水机的比喻

[复制链接]

5

主题

5

帖子

54

积分

注册会员

Rank: 2

积分
54
发表于 2017-5-18 16:13:40 | 显示全部楼层 |阅读模式
公众号:生信放映室

  • linux终端哲学是:没有消息就是好消息。和这个公众号一样,有段时间没有消息了,不过一直陪着小编的都是真爱啊
  • 这个公众号的排版按照markdown进行的,利用的markdownhere的浏览器插件,后面将对公众号的环境搭建单独来一遍分享。markdownhere对code的支持略差,发现在不同系统上的显示是有问题的(不换行),再测试两次如果不好,后面对code部分均改用斜体来进行,后面有时间再来处理Markdown的code支持问题
  • 涉及知识点:终端、权限、标准数据流、管道、重定向、基础命令
这篇一部分继承上篇,可以主要是用户和权限的继承。

用户和权限
用户可以自己所属文件具有更改权限,命令为chmod
  • 方法一:

    $ chmod 755 test.txt

  • $ chmod -R 666 test


  • 方法二:

$ chmod a+x test.txt

此为给test.txt文件的所有用户(a)添加“可执行”(x)权限。类似的常用操作符号含义为:

+:添加权限
-:删除权限
r/w/x:可读/可写/可执行
a/u:所有用户(all users)/当前用户


终端
linux系统之前说过/dev目录放的是设备相关信息,而且设备即文件,这些文件成为设备文件,对于每个终端,都有对应的设备特殊文件(字符设备文件)。linux终端分为很多类型,与我们最有关系的为三个:
  • 虚拟终端(TTY): 我更喜欢理解为系统(级)终端,切换的方式是Ctrl+Alt+F[1-6],对应终端名称为tty1~tty6,对应的设备文件为/dev/tty1~/dev/tty6。特别的:
  • /dev/tty为当前虚拟终端,可以用命令tty查看具体是哪个虚拟终端
  • /dev/tty0为当前虚拟终端的一个别名
这些是系统提供的6个虚拟终端,还有一个是Ctrl+Alt+F7,被叫做图形界面(即通常所说的Xwindows),他们都是用软件的方式模拟的(不同linux系统和版本会有区别,Ubuntu和CentOS的虚拟终端数和图形界面快捷键有所不同,可以自己试试,前提是装了Xwindows界面。有的图形界面为Ctrl+Alt+F3,通常也是我们系统开机默认进入的终端)。
  • 控制台终端(Console):即计算机显示器,对应有真实的硬件设备文件,与上面的虚拟终端相关联。不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上,即打印到显示器上。你可以登录到不同的虚拟终端上去,因而可以让系统同时有几个不同的会话期存在。只有系统或超级用户root可以向/dev /tty0进行写操作。
  • 伪终端(PTY/ PTS):PTY (pseudo-tty)是被叫做伪终端(直译为伪虚拟终端,可以看出与虚拟终端的关系,属于虚拟终端的一种),其中pts(pseudo-terminal slave)是pty的实现方法,不和任何硬件设备有关系。通常为Xwindows模式下的伪终端,也是我们经常打交道中常说的“终端”就是指它,Ctrl + Alt + T可以打开 。可以简单理解为,系统级虚拟终端下可以有多个伪终端。通过ssh登陆的也是pts,可以用ps -ax查看所属哪个伪终端
解释终端一是为了说明linux的多用户特性,在每个终端都可以登录一个用户,所以可以有多个用户同时登录,一个用户也可以登录多个终端。二是为数据流的解释做铺垫。

标准数据流:饮水机的比喻

我们先回顾下饮水机接到水的整个经过:进水——加热/过滤等——出水。通常饮水机会有灯提示是否正在加热等。

来说说这和linux系统(程序)数据流有什么关系。linux系统/程序有三种标准数据流:stdin、stdout、stderr(标准输入、标准输出和标准错误),分别用0、1、2代表。这和饮水机的进水流、出水流和显示等提示完全一致。这三个数据流都可以为空,也和饮水机模型一样。需要注意的是,stderr并不一定就是通常所说的运行错误,可以是程序正常运行的提示或进度情况,就如饮水机的保温指示灯一样,表示可以水已开,可以正常饮用。

标准数据流
文件描述符
设备文件
shell操作符
硬件设备
stdin
0
/dev/stdin->/proc/self/fd/0
< 或 <<
默认键盘输入
stdout
1
/dev/stdout->/proc/self/fd/1
> 或 >>
默认屏幕输出
stderr
2
/dev/stderr->/proc/self/fd/2
2> 或 2>>
默认屏幕输出
* 文件描述符——同C语言的文件描述符或文件句柄,我们对文件进行读写操作,只需要对其文件描述符进行读写操作即可,其他编程语言也是这样。linux系统默认文件描述符数量最多为1024,可以用命令ulimit -n查看
* '<'或'>'——方向代表数据流方向,'>'指向文件会覆盖原文件内容,即重写
* '<<'或'>>'——方向调拨数据流方向,'>>'指向文件不会覆盖原文件,即追加写

$ cat >catfile < test.sh 2> err.txt

cat从test.sh获取数据,输出到catfile,标准错误输出到err.txt
也可以写成

$ cat 1>catfile < test.sh 2> err.txt

其中1可以省略,但2不可以省。因默认的stdout和stderr都输出到屏幕,无法分辨出哪些信息是stdout,哪些是stderr,重定向就起到分流的作用。系统中有一个特殊的空文件 /dev/null, 不含任何内容,写入任何内容也还是空文件,它就是linux的“黑洞”。通常当stdout或stderr的信息太多也不需要时,就可以将其重定向到/dev/null
  • exec绑定重定向
    上面的重定向只能输出到文件只能当次可以,后面命令默认仍然输出到屏幕。现在用下面命令修改其标准输出到test.txt,exec相当于修改了默认的输出文件:

$ exec 1> test.txt

$ lsof -a -p $$ -d 0,1,2

查看test.txt文件,输出如下:

  • COMMAND PID USER    FD  TYPE    DEVICE  SIZE/OFF    NODE    NAME
  • bash    23061   lee 0u  CHR 136,20  0t0 23  /dev/pts/20
  • bash    23061   lee 1w  REG 8,2 0   525789  /home/lee/test/test
  • bash    23061   lee 2u  CHR 136,20  0t0 23  /dev/pts/20
这个绑定后怎么恢复到系统原来默认的输出到屏幕呢,来试试。

管道 "|"
“command A | command B”,其实管道命令符的作用就是:“将前一个命令A的stdout作为后一个命令B的stdin”。管道将是你走向高效操作的重要命令符。

$ ls | wc -l -

$ 7

最后的"-"表示管道的stdout,这就是ls(默认当前目录 ./)将当前目录列表输出到stdout,传递到 wc -l 这个命令,屏幕显示"7",说明当前文件夹内有7个文件/文件夹。如果后一个命令只有一个stdin,那么后面的"-"可以省略,例如:

$ ls | wc -l

$ 7

  • 管道和重定向之间的区别
    管道就是连个命令间的“管道”,这个名字本身就形象生动的说明了它的作用。重定向相当于把默认的数据流向更改了方向(输出到文件或标准数据流)。

通配符 + 快捷键

* : 通配符,代表任意字符(0到多个)
? : 通配符,代表一个字符
~ : 用户的根目录
[] : 中间为字符组合
` : quote符号,两个``中间为可以先执行的指令(注:不是单引号',是英文输入下的键盘左上角的"~"同一个键)
Ctrl+C : 终止当前命令
Ctrl+D : 输入结束(EOF),例如邮件结束的时候
Ctrl+M : 就是Enter
Ctrl+S : 暂停屏幕的输出
Ctrl+Q : 恢复屏幕的输出
Ctrl+U : 在提示符下,将整行命令删除
Ctrl+K:终端下删除光标之后字符
Ctrl+Z : 暂停当前命令
&& : 当前一个指令执行成功时,执行后一个指令(command A && command B)
|| : 当前一个指令执行失败时,执行后一个指令(command A || command B)

其中最常用的是*、?、[]和 ‘。下面举几个简单的例子:

ls test* <==*表示后面不论接几个字符都接受(没有字符也接受)
ls test? <== ?表示后面当且仅当接一个字符时才接受
ls test??? <== ???表示一定要接三个字符
cp test[1~5] /tmp <== test1, test2, test3, test4,test5若存在,则复制到/tmp目录下
cd /lib/modules/' uname -r'/kernel/drivers <== 被 ' ' 括起来的命令先执行

对于目录操作有"cd ~"、"cd -"、"cd",试试各有什么特点吧。
重定向和管道非常重要,重定向还有更高级的操作,不过我都很少用到,熟练理解基础的才是王道。如果其中有错误,可以在后台交流啊。
Enjoy it~




上一篇:你值得了解的七种回归技术
下一篇:I-3——linux初步:“里子”和“面子”-谈谈配置文件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2020-3-31 10:55 , Processed in 0.025168 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.