Linux怎么使用流

Linux怎么使用流,第1张

Unix/Linux/BSD 都有三个特别文件,分别

1)标准输入 即 STDIN , 在 /dev/stdin ,

一般指键盘输入, shell里代号是 0

2) 标准输出 STDOUT, 在 /dev/stdout,

一般指终端(terminal), 就是显示器, shell里代号是 1

3) 标准错误 STDERR, 在 /dev/stderr

也是指终端(terminal), 不同的是, 错误信息送到这里

shell里代号是 2

2, 3用些例子再表达一下

User@User-PC ~

$ ls /dev/stdin

/dev/stdin@

User@User-PC ~

$ ls -l /dev/std*

Linux *** 作系统在服务器方面的应用越来越好。下面由我为大家整理了Linux服务器 *** 作系统的简介及版本介绍,希望对大家有帮助!

Linux服务器 *** 作系统简介及版本介绍

一、Linux服务器 *** 作系统简介

Linux服务器 *** 作系统和一般的Linux发行版有什么区别?考虑服务器硬件。服务器本质上是具有专门规格的计算机。例如,服务器硬件确保最大的正常运行时间,效率和安全性。此外,服务器平衡计算能力和功耗。类似地,Linux服务器 *** 作系统优先考虑安全性和资源消耗。

Linux服务器 *** 作系统向客户端设备提供内容。因此,服务器 *** 作系统提供了用于简单服务器创建的工具。由于服务器通常以命令行方式进行配置和运行,因此Linux服务器 *** 作系统的图形用户界面(GUI)不重要。

根据IDC,硬件销售数据表明,28%的服务器是基于Linux的。虽然有专用的Linux服务器 *** 作系统,还可以选择滚动安装版本。选择的关键是 *** 作系统应该能提供长期服务(LTS)迭代并支持安装所需的软件。LTS的发行版提供了稳定性和更长的支撑周期。

当选择Linux服务器 *** 作系统时,还要考虑使用用途。比如将Linux计算机用作媒体服务器与设置游戏服务器是不同的。

二、Linux服务器 *** 作系统版本介绍

1. Ubuntu Server

Ubuntu可以说是最知名的Linux *** 作系统。而且社区有大量的Ubuntu衍生产品,它是一个稳定的发行版。Ubuntu及其变体提供了优秀的用户体验。Ubuntu Server有两个版本:LTS和滚动版本。LTS的Ubuntu Server发行版拥有五年的支持周期。虽然非LTS的Ubuntu Server发行版支持周期不是五年,但也提供了九个月的安全和维护更新。

虽然Ubuntu和Ubuntu Server非常相似,但服务器提供了不同的组件。值得注意的是,Ubuntu Server提供了OpenStack Mitaka、Nginx和LXD。这些内容能满足系统管理员的需求。使用Ubuntu Server版,可以启动Web服务器、部署容器等。而且它是即开即用的服务器软件。

虽然Ubuntu LTS不是一个服务器发行版,但它也提供了五年的支持周期。我目前使用Ubuntu 16.04 LTS来运行专用的Plex服务器以及Linux游戏服务器。LTS发行版可以很好地作为Linux服务器 *** 作系统。只需自己安装服务器软件即可。

谁应该使用它:

如果你刚接触Linux或服务器 *** 作系统,Ubuntu是一个优秀的选择。Ubuntu仍然是最流行的Linux发行版之一,而且它对用户友好。因此,Ubuntu Server是一个梦幻般的入门级Linux服务器 *** 作系统。它作为媒体服务器、游戏服务器或电子邮件服务器是一流的选择。更高级的服务器设置也适合Ubuntu服务器,但它绝对是一个基本的服务器和新手用户的选择。

2. openSUSE

SUSE Linux于1993年首次推出。直到2015年,开源版本的openSUSE迁移到SUSE Linux Enterprise(SLE)。提供了两个openSUSE衍生版:Leap和Tumbleweed。Leap具有更长的发布周期,而Tumbleweed则是滚动发布版。Tumbleweed更适合高级用户使用其最新的软件包,比如Linux内核和SAMBA等。Leap版则有更好的稳定性和成熟度。两者都支持更新 *** 作系统。

企业客户不能承受不稳定、不成熟和未经测试的包。一切都必须严格测试,以确保业务不会出现问题,并导致损失。故Leap版可以确保企业客户的需求。

openSUSE算是一个梦幻般的Linux服务器 *** 作系统。openSUSE包含了用于自动测试的openQA,用于在多个平台上进行Linux映像部署的Kiwi,用于Linux配置的YaST以及全面的软件包管理器Open Build Service。早些时期,SUSE并没有像Redhat和Canonical那样提供免费的企业发行版,如CentOS和Ubuntu,直到Leap版的发布。SUSE官方称,Leap是一个替代Ubuntu、CentOS和Debian的生产服务器的优秀选择。以前openSUSE遵循9个月的发布周期,即每9个月发布一个新的主要版本。而Leap则遵循SLE的发布周期。

谁应该使用它:

openSUSE更适合于像系统管理员这样的强大用户。它是一个伟大的Web 服务器、家庭服务器或家庭服务器/ Web服务器组合。系统管理员可以从诸如Kiwi,YaST,OBS和openQA之类的工具中获益。openSUSE的多功能性使其成为最好的Linux服务器 *** 作系统之一。除了稳固的服务器功能外,openSUSE还提供了一个漂亮的桌面环境。

3. Oracle Linux

如果你在考虑Oracle Linux,这很正常。oracle Linux是由数据库巨头Oracle提供的Linux发行版。它有两个内核。其中一个内核特性是红帽兼容内核RHCK(Red Hat Compatible Kernel),即提供了与Red Hat Enterprise Linux(RHEL)发行版相同的内核。Oracle Linux有认证,可以在联想、IBM和HP等大量硬件上工作。Oracle Linux提供了Ksplice特性,增强了内核的安全性。另外还支持Oracle、openstack、Linux容器和Docker。其品牌标识为Oracle企鹅。

Oracle Linux提供了技术支持,但需要付费。除非你在企业环境中运行Oracle Linux,否则不值得这么付出。如果需要构建公有云或私有云,Oracle Linux是一个优秀服务器 *** 作系统选择。

谁应该使用它:

Oracle Linux最适合数据中心或用于创建基于OpenStack的云。而更高级的家庭服务器用户和企业级设置也适合使用Oracle Linux。

4. 容器Linux(前身为CoreOS)

CoreOS于2016年更名为Container Linux。顾名思义,Container Linux是一个用于部署容器的Linux *** 作系统。它聚焦于简化容器的部署。容器Linux是提供了安全的、高可扩展的、支持容器部署的一流 *** 作系统。集群化的部署非常容易,其发行版包含了服务发现的方法。并提供了Kubernetes、docker和rkt的文档和支持。

但是,容器Linux没有提供包管理器。所有应用程序必须在容器中运行,因此容器化是强制必需的。然而,如果你正在使用容器,那么容器Linux是提供了容器及其集群等基础设施最好的Linux服务器。它提供了一个etcd工具,作为守护进程运行于集群中的每个计算机上。当然你也有安装的灵活性。除了内部部署安装外,您还可以在虚拟化介质(如Azure,VMware和Amazon EC2)上运行Container Linux。

谁应该使用它:

容器Linux最适合集群基础设施的服务器或容器化部署。这并不意味着它不是家庭服务器的选择。如果使用来自Plex的官方Docker镜像,Container Linux可以作为基本家庭媒体服务器或者是复杂集群设置的任何服务器。最终,如果你很喜欢容器,那么应该使用Container Linux。

补充:Linux服务器 *** 作系统如何选择

(1)Debian与Ubuntu的选择

Ubuntu是基于Debian所开发,可以简单地认为Ubuntu是Debian的功能加强版。与Debian相比,Ubuntu提供了更人性化系统配置,更强大的系统 *** 作以及比Debian更激进的软件更新。Ubuntu与Debian比较,可以认为Debian更趋向于保守一些,Ubuntu对新手友好度更高,上手更容易。用过Ubuntu的都会体会到它的易用,反之如果用过Ubuntu再换到别的系统,都会觉得不适应,Ubuntu真的很方便。

在此解释下Ubuntu的版本支持时间。Ubuntu普通版本只提供18个月的技术支持,过期则不管。LTS服务器版本提供长达五年的技术支持。Ubuntu 10.10是个普通版,现在已经过了支持周期了。如果你用了,很好,你会发现你安装不了任何软件,10.10的软件已经从Ubuntu软件源中被移除了。

所以建议大家选择12.04 LTS版,提供长达5年的技术支持,可以确保在静候相当长的一段时间内你的服务器可以继续收到系统升级补丁以及可用的软件源。

(2)Red Hat和Centos选择

Red Hat跟Centos就没那么多差别了。

Red Hat是付费 *** 作系统,你可以免费使用,但是如果要使用Red Hat的软件源并且想得到技术支持的话,是要像Windows那样掏钱的,所以大家可以理解为Linux中的Windows。这么做符合开源精神,免费使用,服务收费。

Centos是Red Hat的开源版本。一般在Red Hat更新之后,Centos会把代码中含有Red Hat专利的部分去掉,同时Red Hat中包含的种种服务器设置工具也一起干掉,然后重新编译就是Centos。

从某种意义上说,Centos几乎可以完完全全看成是Red Hat,这两个版本的rpm包都是可以通用的。

那么这样问题就简单了。如果你舍得花钱买技术支持,并且想得到完善的技术服务,请去买Red Hat的授权,你会得到如Windows一般强大的技术支持的。如果你只想用,什么付费技术支持什么专有软件都是浮云,那么用Centos吧。

首先说一下什么是数据流重定向,所谓数据流重定向简单来说就是一个过程,这个过程捕捉一个文件,或者命令,程序,脚本,甚至脚本中的代码块(code block)的输出,然后把捕捉到的输出,作为输入发送给另外一个文件,命令,程序,或者脚本。

谈到数据流重定向,我们首先需要了解文件描述符的概念。对于linux内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程等返回一个文件描述符。按照惯例,unix系统shell把文件描述符0与进程的标准输入关联,文件描述符1与标准输出关联,文件描述符2与标准错误关联。总结如下:

标准输入:文件描述符0,通常指键盘的输入 。使用符号<或<<

标准输出:文件描述符1,通常指命令执行所回传的正确信息 ,默认输出到屏幕u。使用符号>或>>

标准错误:文件描述符2,通常指命令执行失败后,所回传的信息,也是默认输出到屏幕。试用符号2>或2>>

默认情况下>和>>分别表示1>或1>>,<和<<与0<和0<<等价。

标准输出重定向: 

#ls

表示列出当前目录条目,并将结果输出到屏幕。

#ls 1>file1

以上命令会把命令的标准输出重新定向到一个文件file,而不是显示到屏幕上,如果不指明文件标识符,系统默认的就是1, 因此1可以省略。

即这个命令等同于

#ls >file1

如果file1不存在,则系统会自动创建。如果已经存在,那么系统首先会把这个文件清空,然后再将数据写入该文件。也就是说>输出到一个已存在的文件,那么会覆盖这个文件。如果不想覆盖,可以使用>>。表示将重定向数据追加到file1文件的末尾。

标准错误重定向:

#ls -qw 2>errorfile

表示将错误信息不输出到屏幕,而是写入errorfile。注意这里的2不能省略。因为>与1>等同,默认是标准输出重定向。所以这里要写成2>,表示标准错误重定向。-qw用来产生错误信息。

把标准错误和标准输出写入同一个文件:

#./a.out &>outfile

这个命令把./a.out的标准输出和标准错误重定向到outfile。&在这里表示标准错误和标准输出。下面是另一种写法:

#./a.out >outfile 2>&1

下面是一个错误的例子:

#./a.out >outfile 2>outfile

标准输入重定向:

#grep search-world <filename 或 grep search-world 0<filename

还有下面这种方式:

cat >catfile <~/.bashrc

它代表将~/.bashrc的内容作为输入,然后将这些内容写入catfile

关闭文件:

"&-"表示关闭文件标识符

有关关闭文件标识符的 *** 作请参考下面

n<&- 关闭输入文件标识符n

0<&-或<&- 关闭标准输入stdin

n>&- 关闭输出文件标识符n

1>&-或>&-关闭标准输出stdout

屏蔽标准输出或标准错误:

./a.out >/dev/null #等同于./a.out 1>dev/null 表示屏蔽标准输出

./a.out 2>/dev/null #表示屏蔽标准错误

./a.out >/dev/null 2>/dev/null#表示同时屏蔽标准输出和标准错误

打开文件:

#exec 3<>filename 把文件filename打开,并指定文件标识符为3

命令j<>filename表示把文件打开,并指明文件标识符为j

我们什么时候需要重定向:

1.屏幕输出的信息很重要,而且我们需要将它存下来的时候。

2. 后台执行中的程序,不希望它干扰屏幕正常的输出结果时。

3. 一些系统的例行命令。(例如写在/etc/crontab中的文件)的执行结果时,希望它可以存下来。

4. 一些执行命令的可能已知错误信息时,想以“2>dev/null"将它丢掉

5. 错误信息与正确信息需要分别输出时

常用重定向命令:

cmd >file 把 stdout 重定向到 file 文件中;

cmd >>file 把 stdout 重定向到 file 文件中(追加);

cmd 1>fiel 把 stdout 重定向到 file 文件中;

cmd >file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中;

cmd 2>file 把 stderr 重定向到 file 文件中;

cmd 2>>file 把 stderr 重定向到 file 文件中(追加);

cmd >>file 2>&1 把 stderr 和 stderr 一起重定向到 file 文件中(追加);

cmd <file >file2 cmd 命令以 file 文件作为 stdin,以 file2 文件作为 stdout;

cat <>file 以读写的方式打开 file;

cmd <file cmd 命令以 file 文件作为 stdin;

cmd <<delimiter Here document,从 stdin 中读入,直至遇到 delimiter 分界符。

>&n 使用系统调用 dup (2) 复制文件描述符 n 并把结果用作标准输出;

<&n 标准输入复制自文件描述符 n;

<&- 关闭标准输入(键盘);

>&- 关闭标准输出;

n<&- 表示将 n 号输入关闭;

n>&- 表示将 n 号输出关闭;

与重定向相关的题目:

此题来自《unix环境高级编程》(第3版)P73 3.5

在Bourne shell、Bourne-again shell 和Korn shell中,digit1>&digit2表示将描述符digit1的重定向至描述符digit2的同一文件。请说明下面两条命令的区别。

./a.out >outfile 2>&1

./a.out 2>&1 >outfile

答:因为shell从左到右处理命令行,所以:

./a.out >outfile 2>&1 等同于./a.out 1>outfile 2>&1

首先执行 >outfile 设置标准输出到outfile,然后执行2>&1,即调用dup将标准输出复制到描述符2(标准错误上),其结果是将标准输出和标准错误设置为同一个文件,即描述符1和2指向同一个文件表项。而对于命令行

./a.out 2>&1 >outfile

首先执行dup,所以描述符2成为终端(假设命令是交互执行的),标准输出重定向到outfile。结果是描述符1指向outfile的文件表项,描述符2指向终端的文件表项。

参考资料:

1.http://os.51cto.com/art/201003/187688.htm

2.http://blog.csdn.net/ljianhui/article/details/9262737

3.https://www.ibm.com/developerworks/cn/linux/l-iotips/

4.《unix环境高级编程》


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7163966.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存