/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
#qq
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设备的更多相关文章

  1. Linux Shell脚本入门--(linux空设备文件和重定向)>/dev/null 2>&1

    linux空设备文件和重定向 输出/输入重导向 >      >>   <   <<   :>   &>   2&>   2< ...

  2. linux /dev 常见特殊设备介绍与应用[loop,null,zero,full,random]

    linux是文件型系统,所有硬件如软件都会在对于的目录下面有相应的文件表示.对于dev这个目录,我们知道它下面的文件,表示的是linux的设备.在windows系统中,设备大家很好理解,象硬盘,磁盘指 ...

  3. Linux字符设备驱动框架

    字符设备是Linux三大设备之一(另外两种是块设备,网络设备),字符设备就是字节流形式通讯的I/O设备,绝大部分设备都是字符设备,常见的字符设备包括鼠标.键盘.显示器.串口等等,当我们执行ls -l ...

  4. Linux /dev目录详解和Linux系统各个目录的作用

    Linux /dev目录详解(转http://blog.csdn.net/maopig/article/details/7195048) 在linux下,/dev目录是很重要的,各种设备都在下面.下面 ...

  5. linux块设备驱动之实例

    1.注册:向内核注册个块设备驱动,其实就是用主设备号告诉内核这个代表块设备驱动 sbull_major  =  register_blkdev(sbull_major, "sbull&quo ...

  6. Linux 视频设备驱动V4L2最常用的控制命令

    http://blog.csdn.net/shaolyh/article/details/6583226 Linux 视频设备驱动V4L2最常用的控制命令使用说明(1.02) 命令 功能 VIDIOC ...

  7. Linux 获取设备树源文件(DTS)里描述的资源

    Linux 获取设备树源文件(DTS)里的资源 韩大卫@吉林师范大学 在linux使用platform_driver_register() 注册 platform_driver 时, 需要在 plat ...

  8. Linux字符设备

    一.linux系统将设备分为3类:字符设备.块设备.网络设备. 字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据.字符设备是面向流的设备,常见的 ...

  9. 深入理解Linux字符设备驱动

    文章从上层应用访问字符设备驱动开始,一步步地深入分析Linux字符设备的软件层次.组成框架和交互.如何编写驱动.设备文件的创建和mdev原理,对Linux字符设备驱动有全面的讲解.本文整合之前发表的& ...

随机推荐

  1. 树&二叉树&哈夫曼树

    1.树 需要注意的两点:n(n>=0)表示结点的个数,m表示子树的个数 (1)n>0时,树的根节点是唯一的. (2)m>0时,子树的个数没有限制. 结点的度和树的度 (1)结点的度是 ...

  2. javascript数组&省市联动分别用js数组和JSON实现

    1.定义数组的三种方式: **数组可以存放不同的数据类型   第一种: var arr=[1,2,3];   var arr=[1,"2",true];   第二种: 使用内置对象 ...

  3. CSS 一些基础知识(优先级、行内元素的一些属性、font-size单位) 怎样不加载图片

    CSS大小写不敏感 选择器优先级如下所示: 在属性后面使用 !important 会覆盖页面内任何位置定义的元素样式. 作为style属性写在元素内的样式 id选择器 类选择器 标签选择器 通配符选择 ...

  4. 使用selenium监听每一步操作

    1.创建类LogEventListener.java, 如下: package com.demo; import org.openqa.selenium.By; import org.openqa.s ...

  5. badboy录制提示当前页面的脚本发生错误

    利用badboy录制时,发生了错误: 网上查了查,说badboy默认使用IE浏览器,打开Internet选项—>高级,图中的两个选项不要勾选即可 然鹅,然鹅,并没有作用... 请教了好心的同行, ...

  6. SELECTORS模块实现并发简单版FTP

    环境:windows, python 3.5功能:使用SELECTORS模块实现并发简单版FTP允许多用户并发上传下载文件 结构:ftp_client ---| bin ---| start_clie ...

  7. python学习_循环结构 and 类型判断

    # 循环结构 ### 循环结构(while) - 格式 ```python while 表达式: 语句块 ``` > 执行流程:当程序执行到while语句时,首先判断表达式的真假.若表达式的值为 ...

  8. CSS——(2)盒子模型与标准流

    上篇博客<CSS--(1)基础>中简单介绍了CSS的概念和几种使用方法,现在主要是介绍其的核心内容. 盒子模型 为了理解盒子模型,我们可以先从生活中的盒子入手.盒子是用来放置物品的,内部除 ...

  9. SimpleMDE编辑器 + 提取HTML + 美化输出

    开发步骤: 1. 安装和引入(npm或者bower都可以) $ bower install simplemde --save //css - debug目录下为开发版本 <link rel=&q ...

  10. 【bzoj4994】[Usaco2017 Feb]Why Did the Cow Cross the Road III 树状数组

    题目描述 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai<aj<bi<bj的对数 样例输入 4 3 2 4 4 1 3 2 1 样例输 ...