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字符设备驱动有全面的讲解.本文整合之前发表的& ...
随机推荐
- Python logging 模块简介
Table of Contents 1. Logging 模块 1.1. 简介 1.2. 简单输出日志 1.3. 输入日志到文件 1.4. 几个基本概念 1.4.1. loggers 1.4.2. h ...
- 1,Python常用库之一:Numpy
Numpy支持大量的维度数组和矩阵运算,对数组运算提供了大量的数学函数库! Numpy比Python列表更具优势,其中一个优势便是速度.在对大型数组执行操作时,Numpy的速度比Python列表的速度 ...
- MAC中mongodb的连接遇到的问题及调试
今天在MAC环境下连接mongodb,遇到了一些报错,最终调试全部搞定.在此特做记录! 首先,mongod启动失败 上面有一句话是 exception in initAndListen: 20 Att ...
- 《Cracking the Coding Interview》——第17章:普通题——题目8
2014-04-28 23:35 题目:最大子数组和问题. 解法:O(n)解法. 代码: // 17.8 Find the consecutive subarray with maximum sum ...
- 《Cracking the Coding Interview》——第14章:Java——题目2
2014-04-26 18:44 题目:在java的try-catch-finally语句块里,如果catch里面有return语句的话,finally还会被执行吗? 解法:会. 代码: // 14. ...
- 《Cracking the Coding Interview》——第11章:排序和搜索——题目1
2014-03-21 20:35 题目:给定已升序排列的数组A和数组B,如果A有足够的额外空间容纳A和B,请讲B数组合入到A中. 解法:由后往前进行归并. 代码: // 11.1 Given two ...
- 【Spiral Matrix II】cpp
题目: Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. ...
- 解决windows文件名过长无法删除的问题
删除windows文件时,系统提示如下错误: 从网上找到下面的一种方法,顺利解决(原理不清楚),现记录删除方法如下: . 在要删除的文件夹(delete_dir)同级新建一个空文件夹(empty_di ...
- MVC3使用Area解耦项目
源代码 1.增加AreasChildRegistration类,类继承PortableAreaRegistration 2.增加引用MvcContrib 3.主项目中Area文件夹下增加Web.con ...
- 存储 磁盘大于2TB 大数据存储一个盘 解决方法
1.vmware虚拟机环境下可以做裸映射 但是一个存储 只能对应一个虚拟主机裸映射 我已经在一个10TB的存储上做好多个主机,就不适用了 2.在虚拟机上添加5个2TB磁盘,磁盘管理中新建 带区卷 可以 ...