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字符设备驱动有全面的讲解.本文整合之前发表的& ...
随机推荐
- 8 Django 模型层(1)--orm简介
ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的 ...
- 12,nginx+uWSGI+django+virtualenv+supervisor发布web服务器
导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的框架 ...
- [记读书笔]python3.5实现socket通讯(UDP)
UDP连接: 无连接,从一个端向另一端发送独立的数据分组 使用UDP连接的客户-服务器程序: UDPServer.py import socket serverPort = 50009 serverS ...
- 03019_过滤器Filter
1.Filter的简介 (1)Filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理: (2)快速入门步骤 ①编写一个过滤器的类实现Filter接 ...
- python 10月30日复习
1.把一个数字的list从小到大排序,然后写入文件,然后从文件中读取出来文件内容,然后反序,在追加到文件的下一行中 import codecs list1 = [2,23,8,54,86,12] li ...
- 《数据结构与算法分析:C语言描述》复习——第八章“并查集”——并查集
2014.06.18 14:16 简介: “并查集”,英文名为“union-find set”,从名字就能看出来它支持合并与查找功能.另外还有一个名字叫“disjoint set”,中文名叫不相交集合 ...
- 剑指Offer - 九度1351 - 数组中只出现一次的数字
剑指Offer - 九度1351 - 数组中只出现一次的数字2013-11-23 01:23 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. ...
- appium-在页面点击一下处理(一般处理提示蒙层)
在写用例的时候,经常会发现某些第一次进去的页面会有一个蒙层提示.我们只有处理掉这个蒙层,才能继续我们的用例: 这边我们使用的是TouchAction的tap方法 TouchAction action ...
- python-使用unittest和ddt实现数据驱动
一.数据驱动的概念 相同测测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式成为数据驱动.测试框架使用unittest 和ddt模块相结合的方式 二.unittest ...
- 孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3
孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十天. 今天继续学习mongoDB的简单操作, ...