linux dev设备
/dev目录的文件都是设备,我们可以像操作文件一样操作设备。但是究竟什么才是设备文件哪?作为程序员不能用代码敲出来的概念我们都是不喜欢的,所以本文用shell来操作体验什么才是/dev文件。
我们执行命令的时候,必须有输入设备和输出设备。输入设备对应于/dev/stdin 输出设备对应于/dev/stdout,/dev/stderr。我们通过输出设备来描述/dev的用法。

harvey@ubuntu:/$ ls -l /dev/stdin /dev/stdout /dev/stderr dev/null
crw-rw-rw- root root , 3月 dev/null
lrwxrwxrwx root root 3月 /dev/stderr -> /proc/self/fd/2 #shell用2>和2>>表示标准错误输出的元字符
lrwxrwxrwx root root 3月 /dev/stdin -> /proc/self/fd/0 #shell使用<和<<表示标准输入的元字符
lrwxrwxrwx root root 3月 /dev/stdout -> /proc/self/fd/1 #shell用>和>>表示标准输出的元字符
直接上代码:重定向
harvey@ubuntu:~$ ls #查看文件夹发现存在只是cunzai.txt
cunzai.txt 公共的 模板 视频 图片 文档 下载 音乐 桌面
harvey@ubuntu:~$ ls -l cunzai.txt bucunzai.txt bcz2.txt #查找存在正确信息和不存在的错误信息都输出到屏幕上
ls: 无法访问bucunzai.txt: 没有那个文件或目录
ls: 无法访问bcz2.txt: 没有那个文件或目录
-rw-rw-r-- harvey harvey 3月 : cunzai.txt
harvey@ubuntu:~$ ls -l cunzai.txt bucunzai.txt bcz2.txt >right >err #为了验证说法,把正确的信息称定向到right文件,错误信息重定向到err文件
harvey@ubuntu:~$ cat right #看出发现right文件中确实是正确的提示
-rw-rw-r-- harvey harvey 3月 : cunzai.txt
harvey@ubuntu:~$ cat err #看出err文件中确实为错误的提示
ls: 无法访问bucunzai.txt: 没有那个文件或目录
ls: 无法访问bcz2.txt: 没有那个文件或目录
harvey@ubuntu:~$ ls -l cunzai.txt bucunzai.txt bcz2.txt >/dev/null #把正确信息重定向到空设备,让结果只输出错误信息
ls: 无法访问bucunzai.txt: 没有那个文件或目录
ls: 无法访问bcz2.txt: 没有那个文件或目录
harvey@ubuntu:~$ ls -l cunzai.txt bucunzai.txt bcz2.txt >/dev/null #把错误信息都称定向到空设备,让结果只输出正确信息
-rw-rw-r-- harvey harvey 3月 : cunzai.txt
harvey@ubuntu:~$ ls -l cunzai.txt bucunzai.txt bcz2.txt >/dev/null >/dev/null #把正确和错误的信息都输出到空设备就不再输出信息
用tcp设备进行socket通讯
harvey@ubuntu:~/sh.donotdel$ exec <>/dev/tcp/www.baidu.com/80 #打开端口www.baidu.com:80 给该文件一个文件描述符为&6
harvey@ubuntu:~/sh.donotdel$ echo -e "HEAD / HTTP/1.1\n\n\n\n\n">&6 #输入"HEAD /..."信息定向到socket文件&6
harvey@ubuntu:~/sh.donotdel$ cat <&6 #导入数据到cat命令
HTTP/1.1 Moved Temporarily
Date: Thu, Mar :: GMT
Content-Type: text/html
Content-Length:
Connection: Keep-Alive
Location: http://www.baidu.com/search/error.html
Server: BWS/1.1
BDPAGETYPE:
Set-Cookie: BDSVRTM=; path=/
Set-Cookie: H_PS_PSSID=; path=/; domain=.baidu.com harvey@ubuntu:~/sh.donotdel$ exec <&-; #关闭端口
harvey@ubuntu:~/sh.donotdel$ exec >&- #关闭端口
shell脚本:
#!/bin/bash
#dev socketdemo
if($#<);then
echo "请输入两个参数,参数输入有错误!";
exit ;
fi exec <>/dev/tcp/$/$ >/dev/null; if($?!=);then
echo "服务器Socket打开失败,请检查!";
echo ;
fi echo -e "HEAD / HTTP/1.1\n\n\n\n\n">&; cat <&;
exec <&-;
exec >&-;
资料拓展:Linux Shell 通配符、元字符、转义符使用实例介绍
linux shell 脚本实现tcp/upd协议通讯(重定向应用)
linux /dev 常见特殊设备介绍与应用[loop,null,zero,full,random]
linux shell数据重定向(输入重定向与输出重定向)详细分析
linux dev设备的更多相关文章
- Linux Shell脚本入门--(linux空设备文件和重定向)>/dev/null 2>&1
linux空设备文件和重定向 输出/输入重导向 > >> < << :> &> 2&> 2< ...
- linux /dev 常见特殊设备介绍与应用[loop,null,zero,full,random]
linux是文件型系统,所有硬件如软件都会在对于的目录下面有相应的文件表示.对于dev这个目录,我们知道它下面的文件,表示的是linux的设备.在windows系统中,设备大家很好理解,象硬盘,磁盘指 ...
- Linux字符设备驱动框架
字符设备是Linux三大设备之一(另外两种是块设备,网络设备),字符设备就是字节流形式通讯的I/O设备,绝大部分设备都是字符设备,常见的字符设备包括鼠标.键盘.显示器.串口等等,当我们执行ls -l ...
- Linux /dev目录详解和Linux系统各个目录的作用
Linux /dev目录详解(转http://blog.csdn.net/maopig/article/details/7195048) 在linux下,/dev目录是很重要的,各种设备都在下面.下面 ...
- linux块设备驱动之实例
1.注册:向内核注册个块设备驱动,其实就是用主设备号告诉内核这个代表块设备驱动 sbull_major = register_blkdev(sbull_major, "sbull&quo ...
- Linux 视频设备驱动V4L2最常用的控制命令
http://blog.csdn.net/shaolyh/article/details/6583226 Linux 视频设备驱动V4L2最常用的控制命令使用说明(1.02) 命令 功能 VIDIOC ...
- Linux 获取设备树源文件(DTS)里描述的资源
Linux 获取设备树源文件(DTS)里的资源 韩大卫@吉林师范大学 在linux使用platform_driver_register() 注册 platform_driver 时, 需要在 plat ...
- Linux字符设备
一.linux系统将设备分为3类:字符设备.块设备.网络设备. 字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据.字符设备是面向流的设备,常见的 ...
- 深入理解Linux字符设备驱动
文章从上层应用访问字符设备驱动开始,一步步地深入分析Linux字符设备的软件层次.组成框架和交互.如何编写驱动.设备文件的创建和mdev原理,对Linux字符设备驱动有全面的讲解.本文整合之前发表的& ...
随机推荐
- PHP.27-TP框架商城应用实例-后台4-使用Gii生成品牌表的代码
Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字 ...
- 斐波那契数列(递归)&求100以内的素数
Java 5 添加了 java.util.Scanner 类,这是一个用于扫描输入文本的新的实用程序.它是以 前的 StringTokenizer 和 Matcher 类之间的某种结合.由于任何数据都 ...
- 成员变量和属性区别(@property那点事儿)
历史由来: 接触iOS的人都知道,@property声明的属性默认会生成一个_类型的成员变量,同时也会生成setter/getter方法. 但这只是在iOS5之后,苹果推出的一个新机制.看老代码时,经 ...
- C# 6.0/7.0 的新特性
转眼C#语言都已经迭代到7.0版本了,很多小伙伴都已经把C# 7.0 的新特性应用到代码中了,想想自己连6.0的新特性都还很少使用,今天特意搜集了一下6.0和7.0的一些新特性,记录一下,方便查阅. ...
- codebolocks 中文使用手册1.1
Code::Blocks手册 使用篇 中文翻译版- 原手册下载:http://www.codeblocks.org/docs/manual_en.pdf 译者:JGood 译者言:工欲善其事,必先利其 ...
- PCA学习笔记
主成分分析(Principal Component Analysis,简称PCA)是最常用过的一种降维方法 在引入PCA之前先提到了如何使用一个超平面对所有的样本进行恰当的表达? 即若存在这样的超平面 ...
- JavaWeb笔记(四)Cookie&Session
Cookie 客户端会话技术,客户端保存,用于存储少量不太敏感的数据,在不登陆的情况下完成服务器对客户端的身份识别 简单使用步骤 创建Cookie对象,绑定数据 new Cookie(String n ...
- 再理一下prerouting和postrouting等插入点
这些地方的准确翻译是hook点(hook点是一个土的说法,学名叫rule chain,规则链)这些规则链是内核netfilter架构布置在内核里面的,然后iptables是利用了这套基础架构,想起了内 ...
- RabbitMQ-Java客户端API指南-下
RabbitMQ-Java客户端API指南-下 使用主机列表 可以将Address数组传递给newConnection().的地址是简单地在一个方便的类com.rabbitmq.client包与主机 ...
- 【Luogu】P3228数列(数学题)
题目链接 考虑我们把所有的增加量拿出来做成一个序列b. 那么在所有n中开头中$1~\sum\limits_{i=1}^{k-1}b[i]$是合法的 也就是说我们枚举所有b[i],然后答案就是$n*m^ ...