Skip to content

OpenBSD上的服务管理程序rcctl

rcctl 是OpenBSD系统上的后台进程(daemon)管理程序,功能上类似于以前redhat Linux上的chkconfig或新版中的systemctl。 它其实是一个shell脚本程序,最早见于OpenBSD 5.7。需要有root权限才可以使用。 它的原理主要是通过在/etc/rc.conf.local文件中设置相应进程的配置来完成。被管理的进程需要在/etc/rc.d/目录下有相应的控制脚本文件。 主要功能及示例 (下面的内容主要是根据rcctl的man手册翻译而来,我再加上一些范例。愿意的朋友可以自己阅读man手册) 启用或禁用后台进程(包括系统自带进程如httpd以及通过软件包安装的进程如mysqld/nginx等,下同) rcctl enable httpd ## 启用 rcctl disable httpd ## 禁用 启动或停止后台进程 rcctl start httpd rcctl stop httpd 也可以根据需要传入 -d (开启debug)或 -f (强制)参数 列出进程相关的参数 # rcctl get httpd httpd_class=daemon httpd_flags= httpd_timeout=30 httpd_user=root…

Read more

更改键盘映射

我的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…

Read more

DragonFlyBSD 4.2与radeon HDMI

我的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

Read more

case语句的fall through

当然我说的是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:~$…

Read more

DragonflyBSD – 配置有线网卡

在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…

Read more

IPv6中的被请求节点组播地址

这是一个有特殊用途的组播地址,主要用于重复地址检测和获取邻居节点的链路层地址(相当于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地址,如果没有收到应答,则表示没有重复地址;如果收到应答,则会比对应答数据包的源地址来判断是否重复。

Read more

unix文件中的ctime, mtime和atime

今天需要使用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:…

Read more

IPv6地址的自动配置

考虑到移动网络的出现以及以后的物联网,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

Read more

特殊IPv6地址

就像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…

Read more

IPv6中的常见地址类型

IPv6中的地址类型相对与IPv4有一些明显的变化。IPv4中有三种类型: 单播地址、组播地址和广播地址。而IPv6中则是单播地址、组播地址和任播地址(Anycast)。IPv6中取消了广播地址(因为v6地址多,子网一般可包含更多的节点,这个时候用广播方式发送数据很容易形成网络风暴),而增加了任播地址。 先上图,看起来更直观一些: (via http://1.bp.blogspot.com/-D86FInU1mdY/UjqoFkWarBI/AAAAAAAAATY/9hPoD99J1UM/s1600/Untitled.png) 单播地址 顾名思义,单播地址就是用于标识网络中某一个特定接口的地址,对应于IPv4中的IP地址。 同样,就像IPv4中的地址又分为公网地址、私有地址(如192.168.0.0/16 …)等不同子类一样,IPv6的单播地址也分为很多种,比IPv4的种类更多 。下面简单的一一介绍一下。 1. 全球唯一单播地址 对应IPv4中的公网地址,以2000::/3开头 2. 站点唯一单播地址 对应于IPv4中的私有地址,以FEC:: ~ FFF::开头,用于标识本地站点上一个唯一的接口(可以想象为一个公司的局域网) 3. 链路唯一单播地址 对应于IPv4中的私有地址网段,以FE8:: ~ FEB::开头,用于标识本地链路上一个唯一的接口(可以想象为接入一个交换机上的接口) 组播地址 这个类型和IPv4中的组播地址功能一样,用于定义一组接口,发往组播地址的数据会被转发到组中的每个接口上 任播地址 任播地址也是用于标识一组接口地址。发往任播地址的数据会被转发给组中距离接收接口最近的一个地址(而不是组中所有的地址)。 当然,IPv6中还有用于标识本机的环回接口地址(::1,对应于IPv4的127.0.0.1),被保留的地址段,一起其他一些特殊地址(比如::,对应IPv4中的0.0.0.0),但主要用的就是上面三种地址类型。  

Read more
Sidebar