我的Thinkpad X20E的回车键坏掉了,但是手头很紧,不想换键盘,而且也不常用,干脆就把回车键映射到其它的键上吧。 考虑了一番,大写键(CapsLock)就是这次的牺牲品了。 当然,目前这台计算机运行的(还)是DragonFlyBSD 4.2。 下面要开始实施计划。当然,你还需要一个外接的键盘。 由于控制台(console)界面下和X(图形界面)下键映射的负责程序不同,需要分别来做。 1. 命令行下 根据网络搜索结果和命令手册,命令行下键的映射由kbdcontrol程序来控制。 首先,导出目前键盘映射表到一个文件(需要在控制台界面下操作,SSH不行(?)): kbdcontrol -d > /root/no_enter.map 然后编辑此文件。我的键盘映射表中,大写键编码为058 (找文件的2-8列中clock对应的编码)。 然后将058那一行的第二列的clock改为cr(Carriage Return)。参看下面我修改过的文件。 第一个带有#的058的行是kbdcontrol命令导出的数据,被我注释掉了。 [acheng@violet ~]$ cat /root/no_enter.map # alt # scan cntrl alt alt cntrl lock # code base shift cntrl shift alt…
我的Thinkpad X120E上安装的是DragonFlyBSD 4.2.3,当通过内置的HDMI连接到我的坚果家用投影仪上来播放电影时,声音却依然通过电脑自己的音响来播放。 折腾了半天,才知道DragonflyBSD上默认不启用HDMI的声音播放功能。还需要自己重新编译内核。 需要改动的文件为(假定源文件是放在/usr/src目录下):/usr/src/sys/dev/drm2/radeon/radeon_drv.c 需要的改动: 将 int radeon_audio=0中的0改为1(意为启用radeon的声音输出功能) 然后: cd /usr/src make clean make buildkernel make installkernel 然后在/etc/sysctl.conf文件中加入下面一行: hw.snd.default_unit=0 然后重启即可。 当需要临时使用计算机内置音响时,可以使用下面的命令切换: sysctl hw.snd.default_unit=1 本文参考了: http://www.freebsdwiki.net/index.php/Hardware_Configuration,_Audio/Video
当然我说的是SHELL,不是其它的编程语言。 在看<学习KSH》中看到,把’;&’字串放在case语句中,会让case语句“fall through”(暂时没想到如何翻译,看下面的脚本输出来看看fall through是怎么回事)。实际 测试了一下发现,OpenBSD (5.8)以及DragonFly BSD (4.2)中的KSH不支持这个功能。因为他们的KSH所谓的pdksh衍生版(public domain korn shell),而Ubuntu (15.04)中通过apt-get安装的ksh是原始的Korn Shell,支持’;&’的fall through功能。 BASH shell则是从4.0版以后开始支持。 脚本: A=2 case $A in 1) echo “QUICK” ;& 2) echo “BROWN” ;& 3) echo “FOX” ;& 4) echo “JUMPED” ;; esac Ubuntu: acheng@cactus:~$…
在上一篇介绍AUFS的文章中,大家可以看到,Docker的分层镜像是怎么通过UnionFS这种文件系统做到的, […]
在DragonflyBSD 4.2上,网卡的配置是写在/etc/rc.conf文件里面的。 比如要为某个网卡(我这里是re0)配置为使用dhcp获取ip地址,那么在rc.conf文件里写上这么一行即可: ifconfig_re0=”DHCP” 如果你不知道接口的名称,可以使用“ifconfig -a”命令查看: [acheng@violet ~]$ ifconfig -a re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=1b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING> inet6 fe80::ea9a:8fff:fe12:e1fd%re0 prefixlen 64 scopeid 0x1 inet 192.168.3.18 netmask 0xffffff00 broadcast 192.168.3.255 ether e8:9a:8f:12:e1:fd media: Ethernet autoselect (100baseTX <full-duplex>) status: active faith0: flags=8002<BROADCAST,MULTICAST> mtu 1500…
AUFS是一种Union File System,所谓UnionFS就是把不同物理位置的目录合并mount到同 […]
这是一个有特殊用途的组播地址,主要用于重复地址检测和获取邻居节点的链路层地址(相当于IPv4中的ARP解析)。这个组播地址的前104位是固定的,为 FF02::1:FF/104, 后24位由接口的单播地址的最后24位构成。假设某个接口的单播地址为2001:3234::1:253F,那么该接口就会自动归属于组播地址FF02::1:FF01:253F。 由于IPv6地址每16位划为一段,共8段,因此前面104位(FF02::1:FF/104)中最后的8位(也即FF)要和接口的单播地址中最后24位的前8位组合在一起形成一段。我们例子中单播地址的最后24位为01:253F(示例单播地址中倒数第二段的1其实是0001的简写),因此被请求节点组播地址为FF02::1:FF01:253F。 当此链路上其它网络接口需要给此IP发送数据时,它就会先给这个组播地址发送数据,请求它的链路层地址;而我们示例接口如果收到发往此组播地址的数据时也会进行处理和响应。同样,当某一个接口给自己配置IP地址的时候,也会使用这个组播地址来进行重复地址检测;也就是说如果这个新分配的IP地址的最后24位是01:253F,那么它也会发送数据报到这个组播地址,看看是否已经有其它接口配置了相同的IP地址,如果没有收到应答,则表示没有重复地址;如果收到应答,则会比对应答数据包的源地址来判断是否重复。
今天需要使用find命令来查找一些文件,需要找到15天前创建的文件。究竟该用哪个参数呢,ctime,mtime还是atime? 那就再来复习一下这三个参数具体的意义吧。 不过,在谈论这三个参数之前,你得先了解inode(索引节点)的概念,不然是说不清的。inode是干嘛用的?它是用来存储文件属性的一个数据结构,比如文件的权限,所有者,大小,指向本文件的连接数等,当然也包括文件的更新时间等信息(但不包含文件名以及文件的内容)。在表现形式上,inode是一个数字,每个文件都对应一个唯一的inode。可以使用ls命令的‘-i’参数来查看文件或目录的inode: root@kali:/data/dbbak# ls -li total 0 2494398 -rw-r–r– 1 root root 0 Aug 19 20:09 test 当新建一个文件时,系统会自动分配一个inode号码。 更具体的inode信息,大家可以网上搜索一下。今天不再详细介绍。 ok,有了这些背景信息,我们可以介绍这三个参数了。 ctime ctime是文件属性更新的时间。比如更新了文件的所有人,更改了文件的读/写/执行权限等。也可以理解为,任何对inode数据结构里的信息进行的更新都会引起ctime的更新(但下面atime的测试说明这个说法需要进一步考证) mtime 文件内容更新的时间。 这个是最直观的。你打开文件,编辑了其中的内容,在你保存时,系统会更新文件的mtime属性。 要注意的是,更新mtime时,通常也会需要更新ctime;有时候更新ctime却未必需要更新mtime(比如为文件添加可执行权限)。 atime 文件最后访问时间。 每次打开一个文件时,或者使用grep/sort等命令访问文件时系统也会更新文件的atime。 那么系统更新文件的atime,意味着文件的属性发生了改变,应该同时更新ctime。但下面的测试表明不是这样的。 $ stat test File: ‘test’ Size: 332 Blocks:…
考虑到移动网络的出现以及以后的物联网,IPv6中对IP地址的配置做了许多改进,以适应漫游节点越来越多的情况。 其中一个特性就是IPv6地址的自动配置功能,它可以在网络没有DHCP服务器的情况下自行为接入的节点配置IPv6地址,从而让节点可以与网络中的其它节点(也可能包括互联网上的其它节点)进行通讯。 IPv6的地址自动配置分为两种情况: 无状态自动配置(网络中有路由器,但无DHCPv6服务器),有状态自动配置(有DHCPv6服务器,可能有路由器)。 有人可能会想,如果一个网络中既没有路由器,也没有DHCPv6服务器,那是什么情况?这种情况就相当于几台电脑接入到一个交换机或者集线器上,这时各个节点只需要一个链路本地地址就可以互相通讯。而链路本地地址的配置无需任何网络,一个支持IPv6的节点自己就可以完成链路本地地址的配置了。所以这里我们说的IPv6地址的自动配置,说的是全球单播地址(相当于IPv4公网IP)的配置。 当一个支持IPv6的节点启动时,它首先会尝试为自己配置一个链路本地地址(link-local address),这个地址是根据链路本地地址的网络前缀FE80::/64以及接口的MAC地址来生成的,既不需要路由器也不需要DHCPv6服务器。有了这个地址以后,节点会以组播方式发送RS(Router Solicitation )报文,看看本地有没有路由器(有没有设备应答RS报文)。此时链路上的路由器会以RA(Router Advertisement)报文应答,应答报文中携带了网络前缀等相关信息,节点通过这些信息来配置自己的全球单播地址。注意,在无状态自动配置中无法为节点配置DNS服务器等一些选项。 如果节点没有收到路由器的RA报文,或者路由器RA报文中通知节点此网络中有DHCPv6服务器,则节点发送相应报文来请求DHCPv6服务器发送网络前缀等相关的网络配置信息。这种方式称为有状态自动配置。 大家也可以参考这个(英文的)PDF文件: https://www.6diss.org/tutorials/autoconfiguration.pdf
就像IPv4一样,IPv6也有一些特殊的地址。见下表: IPv4 地址 IPv6 地址 互联网地址类 (Internet address classes) 不适用于 IPv6 组播地址 (Multicast addresses 224.0.0.0/4) IPv6 组播地址 (multicast addresses (FF00::/8)) 广播地址(Broadcast addresses) 不适用于 IPv6 未指定地址 (Unspecified address is 0.0.0.0) 未指定地址 :: 环回接口地址 (Loopback address is 127.0.0.1) 环回接口地址 ::1 公网IP地址 (Public…