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代码审计5-实战漏洞挖掘-cms后台登录绕过
cms后台登录绕过 练习源码:[来源:源码下载](数据库配置信息有误,interesting) 注:需进行安装 1.创建数据库 2.设置账号密码,连接数据库 3.1 正常登录后台,抓包分析数据提交位置 ...
- 《Cracking the Coding Interview》——第18章:难题——题目4
2014-04-29 01:05 题目:数数从0到n总共有多少个数字‘2’? 解法:数位动态规划,可以O(log10(n))时间内解决. 代码: // 18.4 Count the number of ...
- 《Cracking the Coding Interview》——第17章:普通题——题目3
2014-04-28 22:18 题目:计算N的阶乘尾巴上有多少个零? 解法:计算5的个数即可,因为2 * 5 = 10,2的个数肯定比5多.计算5的个数可以在对数时间内搞定. 代码: // 17.3 ...
- 《Cracking the Coding Interview》——第8章:面向对象设计——题目7
2014-04-23 23:38 题目:你要如何设计一个聊天服务器,有什么技术难点? 解法:这是基于工作经验的面试题吗?否则,一个new grad碰上这种题目能打点草稿也就算不错了. 代码: // 8 ...
- Python 3基础教程12-常见的错误
本文来介绍几种常见的错误,任何人在刚开始接触一个新的语言,即使照着代码抄写,也可能会犯错误,这里我们就介绍几种常见的错误,看看你是否遇到过. 1. NameError: name 'xxx' is n ...
- Python处理Sqlite3数据库
sqlite3比较小众 本章主要通过Python Code表述如何增.查.改.删 sqlite3 DB 一.直接上代码 #!/usr/bin/env python # -*- coding: utf- ...
- Linux认知之旅【04 进一步了解目录】!
一.目录是什么? 二.不得不提的文件系统! 三.绝对路经,相对路径
- winform小知识
1.得到控制台或者winform程序在debug目录下生成的exe路径 建议使用:AppDomain.CurrentDomain.BaseDirectory或者Assembly.GetExecutin ...
- cloud-init代码调试方法
新做的centos7.4镜像的cloud-init安装好之后,修改密码失败,但是同样的配置文件在7.2上的是正常的,对比了一下版本,centos7.4上的是0.7.9,7.2上的是0.7.5,经过调试 ...
- php中普通方法和静态方法的区别以及抽象类和接口
实例化类产生对象.class fenbi{ //普通成员,属于对象 public $length = "10cm"; //静态成员,静态变量,属于类. public static ...