FreeBSD cshrc tips

cshrc tips
作为csh/tcsh的配置文件,常用的包括系统级的/etc/csh.cshrc与用户级的~/.cshrc,后者的优先级高于前者。这里为便于描述,统称cshrc。

1. umask

umask称作用户权限屏蔽位,用于在创建文件或目录时设置默认权限。这里用一些操作来具体说明umask的用法:

> umask                                       # 查看当前umask值
22                                            # 22是csh的默认值
> touch file_umask22 && mkdir dir_umask22/
> ls -lod *_umask22
drwxr-xr-x  2 alphachi  alphachi  – 2 Oct 19 09:51 dir_umask22
-rw-r–r–  1 alphachi  alphachi  – 0 Oct 19 09:51 file_umask22

可以看到,当umask=22时,创建的文件默认权限为rw-r–r–(即644),创建的目录默认权限为rwxr-xr-x(即755)。
在这里,644和755这两个数字是根据“创建默认权限 = 系统默认权限 – umask取值”得出的:
644 = 系统默认权限(文件) – 22
755 = 系统默认权限(目录) – 22
也就是说,文件的系统默认权限为644 + 22 = 666(即rw-rw-rw-),目录的系统默认权限为755 + 22 = 777(即rwxrwxrwx)。这点可以通过将umask设置为0来验证:

> umask 0    # 将umask设置为0
> umask
0
> touch file_umask0 && mkdir dir_umask0/
> ls -lod *_umask0
drwxrwxrwx  2 alphachi  alphachi  – 2 Oct 19 09:52 dir_umask0
-rw-rw-rw-  1 alphachi  alphachi  – 0 Oct 19 09:52 file_umask0

因此可以根据需要在创建文件或目录前临时修改umask取值,例如:

> umask 2
> umask
2
A-desktop > touch file_umask2 && mkdir dir_umask2/
A-desktop > ls -lod *_umask2
drwxrwxr-x  2 alphachi  alphachi  – 2 Oct 19 09:56 dir_umask2     # 775 = 777 – 2
-rw-rw-r–  1 alphachi  alphachi  – 0 Oct 19 09:56 file_umask2    # 664 = 666 – 2

在cshrc中,默认会存在以下配置:

umask 22

需要注意的是,若在cshrc中无此条配置,umask的取值仍然为22,而不是0。

2. PAGER

PAGER是csh/tcsh的常见环境变量,用于设置默认的页面调度程序。以下为cshrc中的默认配置:

setenv PAGER more

将PAGER设置为more的缺点在于:页面输出完毕后若要重新阅读,必须重新调用页面或滚动终端。为了避免这些问题,可以将more更改为功能更为强大的less,即:

setenv PAGER less

与more相比,less的唯一“缺点”在于页面输出完毕后会高亮显示(END)标记,若要退出则需要额外多按一次q键。

3. autorehash

rehash是csh/tcsh的一条内部命令,可以重新计算与环境变量PATH相关的目录的哈希值;在这些目录中添加了新的可执行程序后,往往都需要执行此命令以刷新索引列表,否则系统将无法找到这些程序。
rehash经常在通过Ports安装了新的软件包后使用,例如:
# whereis zsh                          # 这里以通过Ports安装zsh为例
zsh: /usr/ports/shells/zsh
# cd /usr/ports/shells/zsh/
# make BATCH=yes install clean         # BATCH=yes表示使用默认配置编译而跳过编译选项的显示

# zs                                   # 输入zs后按Ctrl+d尝试补全
zstreamdump                            # 没有执行rehash前找不到zsh的相关命令
# rehash
# zs                                   # 再次输入zs后按Ctrl+d尝试补全
zsh         zsh-5.0.0   zstreamdump    # 执行rehash后即可找到相关命令

从版本6.18开始,csh/tcsh引入了新的特殊Shell变量autorehash,用于自动执行rehash操作。若要开启此功能,只需要在cshrc中添加:

set autorehash = always

取值always是指在命令补全和拼写校正时均自动执行rehash操作。若仅需在命令补全时自动执行,可将always更换为complete;若仅需在拼写校正时自动执行,可将always更换为correct。
需要注意的是,默认情况下此功能至少需要在FreeBSD 9.0-STABLE中才能开启,因为之前版本(如9.0-RELEASE)中tcsh的版本均低于6.18。

4. listjobs

listjobs是另一个有用的特殊Shell变量,用于控制任务挂起时的显示方式,以下举例说明:

> set | grep listjobs    # 命令无输出结果表示当前未设置listjobs
> ping www.freebsd.org
PING red.freebsd.org (69.147.83.34): 56 data bytes
64 bytes from 69.147.83.34: icmp_seq=0 ttl=49 time=332.853 ms
^Z                       # 按Ctrl+z挂起
Suspended
> set listjobs           # 仅开启变量listjobs(等于在cshrc中添加配置set listjobs)
> ping www.freebsdchina.org
PING www.freebsdchina.org (222.73.165.29): 56 data bytes
64 bytes from 222.73.165.29: icmp_seq=0 ttl=50 time=73.343 ms
^Z
[1]  – Suspended                     ping www.freebsd.org
[2]  + Suspended                     ping www.freebsdchina.org
> set listjobs = long    # 设置变量listjobs(等于在cshrc中添加配置set listjobs = long)
> ping www.google.com
PING www.google.com (74.125.128.106): 56 data bytes
64 bytes from 74.125.128.106: icmp_seq=1 ttl=45 time=35.502 ms
^Z
[1]    57930 Suspended                     ping www.freebsd.org
[2]  – 57946 Suspended                     ping www.freebsdchina.org
[3]  + 57951 Suspended                     ping www.google.com

可以看到,对于未设置、仅开启、设置变量listjobs这三种情况,任务挂起时的显示信息依次会更加详细。

5. 关于alias

alias为csh/tcsh引入的别名功能非常强大,详见一切皆alias。
虽然alias一般仅出现在cshrc中,但实际上它是csh/tcsh自带的内部命令,因此可以单独使用,例如:
> alias                             # 不使用任何参数则列出所有的别名条目
h       (history 25)
j       (jobs -l)
la      (ls -a)
lf      (ls -FA)
ll      (ls -lA)
> unalias h                         # 删除指定的别名条目
> alias reboot ‘shutdown -r now’    # 添加新的别名条目:
                                    # 在这里系统自带的reboot命令将不再生效,因为alias的优先级更高
j       (jobs -l)
l       (ls -alo)
la      (ls -a)
lf      (ls -FA)
ll      (ls -lA)
reboot  (shutdown -r now)
> \reboot                           # 在命令前添加转义字符\可以忽略alias设置而直接运行原始命令

注意手动输入的alias/unalias仅对当前Shell进程有效,若要始终生效应将其写入cshrc。
无论是采用何种方式配置alias,为防止其可能被Shell曲解,应该为真实命令部分(如上例中的shutdown -r now)的两端添加单引号,若在真实命令部分中存在变量替换,则应将单引号改为双引号。

6. 关于complete

与alias类似,complete也是csh/tcsh自带的内部命令;因此既可以单独使用,也可以写入cshrc。
顾名思义,complete是用于命令补全的,但与普通补全相比其功能更加强大,可以称之为高级补全。
在cshrc中,可以配置以下的普通补全:

if ($?prompt) then            # 仅对交互式Shell生效
    set autolist              # 按下Tab键直接补全
    set complete = enhance    # 补全时忽略大小写,认为-与_相同,将.、-、_作为单词分隔符;
                              # 若将enhance更换为igncase则仅忽略大小写
    set autoexpand            # 补全时参考history命令的输出
endif

配置生效后,将其与complete设置的高级补全进行比较:

> su                                   # 输入su后按Tab键的结果如下
su      sum     suspend                # 注意机器不同可能会出现更多输出
> complete -su* ‘p/0/(su suspend)/’    # 对关键字su设置高级补全:
                                       # -su*表示仅作用于关键字su,例如输入su空格后按Tab键是没有效果的
                                       # p表示作用位置,例如p/0在这里表示作用于su本身
                                       # ()用于限定补全条目,例如这里将补全条目限定于su与suspend
> complete                             # 查看高级补全条目
-su*    ‘p/0/(su suspend)/’
> su                                   # 高级补全下,输入su后按Tab键的结果如下
su      suspend
> uncomplete -su*                      # 删除高级补全条目

可以看到,两者的最大区别在于:在普通补全的基础上,高级补全能够实现更多的条件输出。除此之外,高级补全还能够实现很多普通补全难以实现的补全操作,例如:

> complete man ‘p/*/c/’    # 针对man命令的高级补全:
                           # p表示作用位置,p/*表示对输入的man空格后的任意位置的参数执行补全
                           # c表示补全候选项为当前系统内存在的所有命令
> man a                    # 输入man a后按Tab键的结果如下(此时p/*/c中*为1)
ac          addr2line   amd         ar          at          audit
accton      adduser     amq         arp         atacontrol  auditd
acpiconf    adjkerntz   ancontrol   arpaname    ath3kfw     auditreduce
acpidb      afmtodit    apm         as          atmconfig   authpf
acpidump    alias       apply       asa         atq         awk
addftinfo   alloc       apropos     asf         atrm
> man -w p                 # 输入man -w p后按Tab键的结果如下(此时p/*/c中*为2)
pac           pfbtops       pkg_info      powerd        ps
pagesize      pfctl         pkg_updating  poweroff      psroff
passwd        pflogd        pkg_version   ppp           pstat
paste         pftp          pkill         pppctl        purgestat
patch         pgrep         pmcannotate   pr            pushd
pathchk       pic           pmccontrol    praliases     pw
pawd          ping          pmcstat       praudit       pwait
pax           ping6         popd          pre-grohtml   pwd
pc-sysinstall pkg_add       portaudit     printenv      pwd_mkdb
pciconf       pkg_cleanup   portmaster    printf
periodic      pkg_create    portsnap      procctl
perror        pkg_delete    post-grohtml  procstat

再看一个非常实用的高级补全范例:在csh/tcsh中快速ssh到已保存主机。
1)创建或编辑~/.ssh/config,此文件可以为多个SSH主机保存不同的配置参数(详见man ssh_config):

Host firewall
    HostName     192.168.0.1     # 主机地址
    User         froot           # 登录用户名
    Port         50000           # 连接端口
    IdentityFile ~/.ssh/id/fw    # 调用的私钥文件
    Compression  yes             # 开启压缩
Host router
    HostName            192.168.10.1
    User                root
    Port                51000
    IdentityFile        ~/.ssh/id/router
    ServerAliveInterval 60       # 每60秒发送一次alive包以防止空闲掉线
Host switch
    HostName 192.168.100.1
    User     admin
    Port     54321

2)在cshrc中添加以下内容:

if (-e ~/.ssh/config) then     # 若~/.ssh/config存在则执行以下命令:
                               # 变量sshlist为由~/.ssh/config获取并格式化的主机列表
                               # p/1/($sshlist)将ssh空格后的第一个参数的补全内容限制在($sshlist)中
    set sshlist = `grep Host\  ~/.ssh/config | cut -d \  -f 2`
    complete ssh "p/1/($sshlist)/"
endif

3)通过source cshrc命令使编辑后的cshrc即时生效,然后查看补全效果:

> ssh                       # 输入ssh空格后按Tab键的结果如下
firewall router   switch    # 选择所需补全即可开始连接至对应主机
                            # 若在~/.ssh/config中添加了新的主机,也需要通过source cshrc命令即时生效

当然,complete命令的功能远不止于此,详见man tcsh中REFERENCE > Builtin command > complete一节。
注意与alias相同,手动输入的complete/uncomplete仅对当前Shell进程有效,若要始终生效应将其写入cshrc,此外引号的使用规则也是一样的。

7. 快捷键绑定

csh/tcsh中的快捷键设置实际上也是通过内部命令实现的,例如:

> bindkey -a    # 列出已绑定的快捷键("^"表示Ctrl,"^["表示Alt)
> bindkey -v    # 按照vi方式绑定快捷键
> bindkey -e    # 按照emacs方式绑定快捷键
> bindkey -h    # 显示所有帮助信息

与所有内部命令相同,bindkey既可以手动配置也可以写入cshrc中。
在控制台下,若需使用左Alt作为快捷键前缀,除了根据bindkey命令配置外,还应执行以下操作:
1)编辑/usr/share/syscons/keymaps/us.iso.kbd,将056行的首个lalt修改为meta;
2)执行kbdcontrol -l us.iso.kbd,也可在/etc/rc.conf中添加keymap=“us.iso.kbd”以使其永久生效。
注意此设置会带来一些“副作用”,例如无法再通过左Alt配合F功能键切换控制台,不过可以使用Ctrl+左Alt或右Alt替代。
8. 个性化提示符

提示符一节中已经对此做了详细的描述,这里仅说明如何针对X与控制台设置不同的提示符。
在cshrc中添加以下内容:

if ($?prompt) then
    if ($?DISPLAY) then    # 针对X:
                           # 特殊字符串%{\e]0;加\a%}的组合可以将两者中间的字符发送至终端模拟器
                           # 其他的%相关含义详见man tcsh中REFERENCE > Special shell variables > prompt一节
        set prompt = "%{\e]0;%l = %~\a%}%B%m %# %b"
    else                   # 针对控制台
        set prompt = "%B%m:%l%b %~ %B%# %b"
    endif
endif

以上设置生效后,在X下类似于XTerm的终端模拟器里,csh/tcsh的提示符中被发送的字符会显示于窗口标题栏,而在控制台下则会全部显示。

附:更多的cshrc范例

在Ports中提供了一个关于cshrc的包,位于/usr/ports/shells/tcshrc;安装之后,可以学到一些更高级的配置写法。

原文链接:https://wiki.freebsdchina.org/doc/c/cshrc_tips

FreeBSD Ports 之间的依存关系及其管理

FreeBSD Ports 之间的依存关系及其管理

用过 FreeBSD 的朋友对 FreeBSD 的 ports 管理认识颇深,它让我们从来不苦恼于“装软件”。FreeBSD 会自动地下载所需的 ports 并安装它们,这是为什么很多使用 GNU/Linux 的朋友在了解到 FreeBSD 后义无反顾地加入 FreeBSD 阵营,包括我。

本 wiki 还要说一说不仅如此,FreeBSD 让我们从来不纠结于“不干净的卸载”。

ports 间的复杂关系

各种各样的 ports 之间可以有复杂的依存关系,如果用有向图画出来,它一定是 DAG (有向无圈图)。拿随机模拟软件 mcmc-jags-3.2.0 为例,安装它必须安装它的子孙节点。

FreeBSD Ports 之间的依存关系-1

如何干干净净地删除一个 port?

如何删除 ports?通常的做法是去那个 port 执行 make deinstall clean。可是,如果那个 port 还关联着一些“不再有用的” ports。举个例子,卸载了 jags 后,如果你同时也想卸载 “孤零零的” lapack,该如何做呢?总不至于去搞清除所安装的 ports 之间的复杂关系吧?拿随机模拟软件 jags 和 fbm 为例,它们的依存关系是这样的。

FreeBSD Ports 之间的依存关系-2

两个 ports 及其关联 ports 的关系就可以如此复杂,何况你安装的如此众多的 ports!苍天啊,大地啊,哪位天使姐姐能帮我一把啊?

有一个 port 可以帮助你,它就是 pkg_cutleaves!这是一个小巧的工具,它能生成你所安装 ports 中所有的“终极节点”,只需命令

# pkg_cutleaves -lxg

有关这些节点的信息存放在文件 /usr/local/etc/pkg_leaves.exclude 之中。一旦你不喜欢其中某个节点,可以在文件 pkg_leaves.exclude 中将之删除,然后运行

# pkg_cutleaves -Rxg

你猜怎么着?系统删除了该节点及其所有与之关联的“孤零零”的 ports,而不影响其他“终极节点”及其关联的 ports。pkg_cutleaves 催马过去,把敌人及其孤立党羽杀了个干干净净!

我多么希望我的大脑里也有一个这样的工具,把不美好的记忆删除得干干净净,然后更新一下,重新开始生活。

如何重建 ports 间的依存关系?

用 portmaster 重建 ports 间的依存关系,只需

# portmaster –check-depends

见识某些 ports 的依存图

最后分别见识一下 zh_cn-freebsd-doc,emacs 和 maxima 的依存图,感受一下 FreeBSD ports 的复杂关系,顺便惊叹一下 FreeBSD 在这些复杂关系上纵横驰骋的强大。FreeBSD 是位有内涵的美女,处之愈久,就愈爱她,但愿她能陪我到老。我还不了解她的姊妹 OpenBSD 和 NetBSD,虽然传说中她们也很美。

FreeBSD Ports 之间的依存关系-3

 FreeBSD Ports 之间的依存关系-4

FreeBSD Ports 之间的依存关系-5

原文链接:http://wiki.freebsdchina.org/software/p/pkg_cutleaves

FreeBSD 9.0 安装入门教程

FreeBSD 9.0 安装入门教程

在 ftp 中看到了 9.0 的 release 安装镜像于是没事 down 过来捣腾一下。貌似安装过程有了新的变化,于是又了这个入门的东东,水平有限,欢迎指正,谢谢。

所有测试没有使用物理机安装,采用的是 VirtualBox 4.1.8 ,本人机器上面的 VM 版本过老,无法安装。
硬件配置 内存分配了 512M 硬盘分配了 4G
CPU 是 intel 的 所以下载的是 I386 版本的

安装开始
1、 安装 log 界面换了

image

PS:实话说 那个东东我看了半天都木有分清楚是猫科类动物还是什么生物。

2、 选择【1】安装 10 秒默认安装

3、 安装界面确实不同了,开始估计会不习惯,不过没关系,新的安装其实更加简单的。

image

3 个选项 第一安装,第二个是shell 估计也可以用来安装吧,水平有限木有尝试,最后一个
是光盘镜像系统,估计用来处错使用的。
选择【install】回车即可

4、询问选择键盘

image

无特殊要求 选择【yes】

5、选择键盘语言种类

image

默认吧

6、设置hostname

image

可以按 【esc】 跳过,建议设置

7、选择需要安装的资源
第一个是 doc 文档估计是帮助文档,说明文档之类的
第二个是 games
第三个是ports 树(建议不要选择,安装比较耗时,我用虚拟机安装到最后报错)
第四个是 src 源代码呗。

image

按空格选择 上下键移动

8、硬盘分区设置
第一个是安装他的步骤引导操作
第二个应该是专家模式的
第三个是shell 模式

image

选择【Guided】

9、配置分区
第一个是整个硬盘
第二个是选择分区(木有尝试成功)

image

选择 【entire disk】

10、分区设置
若是以前安装过早期版本的freebsd 估计这个懂的
你若是需要配置硬盘分区大小就在这里设置
一般是 auto 然后 finish

image

这个是数据提醒

image

配置好后 选择 【finish】

11、选择 提交 【commit】

image

12、格式化完就好开始验证文件 然后 就开始安装了
若是在 第7 步没有选择 games 和port 就只有两项

image

开始安装 比较耗时 如果选择了 ports

image

13、安装完开始系统配置

设置密码

image

14、配置网卡

image

是否配置IPv4

image

是否DHCP 看个人需求配置

image

配置IP 地址

image

image

有配置IPV6 的选项

15、时间配置
在国内要配置时区

image

image

16、用户配置
可以以后进行配置。

image

好差不多完成了
若是刚配置的有问题可以在这里可以进行综合一点的配置。

image

如服务配置
可以开启鼠标。

image

基本完成重启吧。

image

附安装后的图片

image

提示若是不习惯使用新版本的安装向导完全可以使用原来的安装配置

只要 root 用户输入 sysinstall 即可

image

若是大牛说,新版本安装方式很烂啊,完全不习惯怎么办呢?
很简单啦,在第3 部直接选择 【shell】
然后输入 sysinstall 嘿嘿,老的方式安装,
水平有限,大家若是想用鸡蛋砸我,真心请不要那样。

By Ndk 2012-1-8
谢谢。
PS:哪天有时间折腾一个FreeBSD 9.0 + Gnome 的入门教程

FreeBSD下如何使用移动硬盘

FreeBSD下如何使用移动硬盘

摘要

这个Wiki页面主要介绍如何在FreeBSD系统下面使用USB接口的移动硬盘。

FreeBSD使用移动硬盘的不同方式

严格的说FreeBSD系统只提供了一种使用移动硬盘的方式,但是很多桌面用户都会运行X。

X系统同样提供挂载移动硬盘的方法,比如我用Xorg+GNOME,我也可以使用HALD来挂载移动硬盘。

在这里,我们只介绍如何使用FreeBSD系统提供的方法来挂载移动硬盘。

基本步骤

在FreeBSD系统下面使用移动硬盘并不复杂,只需要几个基本的配置即可实现。

添加内核支持

很显然,不论你使用什么设备,你都需要将其添加进入内核(直接进内核或编译成模块)。

这里我们使用的是USB接口的硬盘,所以就需要添加对USB设备的支持。

简单的说,你需要在内核的配置文件里面添加下述内容:

device scbus
device da
device pass
device uhci
device ohci
device ehci
device usb
device umass

使用默认内核的用户可以无视这个操作,因为默认内核是提供对USB设备的支持。

详细情况可参考FreeBSD Handbook。

完成上述操作之后你的系统就能识别你的移动硬盘了。

对移动硬盘进行分区

如何分区是用户的问题了,这里只介绍如何使用UFS文件系统。

插入移动硬盘,然后用root用户运行sysinstall。
Condigure → Fdisk → 然后设定你喜欢的Slice分区方式,比如我整个移动硬盘都是用UFS,我就直接选择Use Entire Disk;然后,选择Write Changes;然后,选择Do not install a boot manager;然后退出sysinstall。

再次运行sysinstall,注意我说的是再次运行sysinstall。
Condigure → Label → 然后设定你喜欢的Partition分区方式,最后选择Write。

需要注意的是,在这个步骤中,你需要设定新建Partition的挂载位置,你最好选在挂载在/tmp下面,如果你选在挂载在root目录下面,系统就会在root下面创建目录,当然你可以自己删除那个没用的目录。

如果你的rc.conf里面有下述内容,系统开机时会自动清理/tmp目录:

clear_tmp_enable="YES"

我的分区方式是整个移动硬盘只有一个Slice,然后这个Slice里面有3个Partition。

对应/dev目录下面的

da0
da0s1
da0s1d
da0s1e
da0s1f

普通用户挂载

多数情况下,没有人使用root用户进行日常的操作,所以我们必须使用普通用户来挂载以及卸载移动硬盘。

把下述内容添加进入/etc/devfs.rules:
[localrules=5]
add path ‘da*’ mode 0660 group operator

告诉系统operator组可以挂载。

注意是/etc/devfs.rules,不是/etc/devfs.conf。后者用于控制开机就存在的设备,前者用于控制可插拔的设备。

把下述内容添加进入/etc/rc.conf:
devfs_system_ruleset="localrules"

告诉系统使用/etc/devfs.rules中设定的规则。

把下述内容添加进入/etc/sysctl.conf:
vfs.usermount=1

告诉系统普通用户可以挂载。

设定移动硬盘分区的权限
设定权限比较简单,你可以在/mnt目录下面建立自己的文件夹用于挂载自己的移动硬盘,比如我的/mnt目录下面有5个文件夹:

> ls /mnt/
fender_01    fender_02    fender_03    fender_04    fender_05

首先你需要使用root用户来手工挂载移动硬盘分区到fender_01,fender_02,fender_03。

# cd /mnt/
# mount /dev/da0s1d fender_01
# mount /dev/da0s1e fender_02
# mount /dev/da0s1f fender_03

然后你需要设定fender_01,fender_02,fender_03这三个目录的权限。

# cd /mnt/
# chown fender:operator *

注意,fender这个用户在operator组里面。

# pw group mod operator -m fender

完成上述操作你就可以使用fender这个用户来挂载移动硬盘了。

防止HALD挂载移动硬盘

既然本文开始就说明了使用FreeBSD系统提供的基本方法来挂载移动硬盘,我们就需要防止HALD来挂载移动硬盘。

屏蔽方法如下,在/usr/local/share/hal/fdi/preprobe/20thirdparty目录,

建立da.fdi文件并写入:
<?xml version="1.0" encoding="UTF-8"?>

<deviceinfo version="0.2">
  <device>
    <match key="freebsd.driver" string="da">
      <match key="freebsd.unit" int="0">
        <merge key="info.ignore" type="bool">true</merge>
      </match>
    </match>
  </device>
</deviceinfo>

这个文件用于防止HALD挂载移动硬盘。

建立acd.fdi文件并写入:
<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
  <device>
    <match key="freebsd.driver" string="acd">
      <match key="freebsd.unit" int="0">
        <merge key="info.ignore" type="bool">true</merge>
      </match>
    </match>
  </device>
</deviceinfo>

这个文件用于防止HALD挂载我的光驱(和移动硬盘关系不大)。

如果你没有按照X,那么你可以直接无视这个步骤。

弄一个自动挂载和卸载的脚本

都弄好了就在弄一个脚本吧,省着天天敲命令,一方面是比较麻烦,另外一方面是周围人看着比较奇怪(你看那个变态,用个移动硬盘还得得瑟着敲半天键盘,真能装,)。

> cd
> cd bin/
> cat mount_rhd.sh
#! /bin/sh
mount /dev/da0s1d /mnt/fender_01;
mount /dev/da0s1e /mnt/fender_02;
mount /dev/da0s1f /mnt/fender_03;
> cat umount_rhd.sh
#! /bin/sh
sync;
umount /mnt/fender_01;
umount /mnt/fender_02;
umount /mnt/fender_03;

当然了这个脚本应该放在你的shell能找到的地方了,比如我就放在自己home下面的bin里面,然后把这个bin加到自己shell程序的搜索目录就行了。

最后开个小玩笑,不要以为最后那段代码里面第一个cd命令是多余的,那个cd命令是用于会到自己home的。

原文链接:http://wiki.freebsdchina.org/doc/b/removable_disk_usage

其它基于FreeBSD的各类BSD发行版

名称 网址 简述
PC-BSD http://www.pcbsd.org/ 专注于桌面,KDE 环境。
GhostBSD http://www.ghostbsd.org/ 专注于桌面,Gnome 环境。
DragonFly BSD http://www.dragonflybsd.org/ FreeBSD 的分支版本。
FreeNAS http://freenas.org/ 基于 FreeBSD 的开源 NAS 系统。
VirtualBSD http://www.virtualbsd.info/ 构建于 VMware 中的 FreeBSD 发行版,也可安装到硬盘,专注桌面,使用 XFCE4 环境,主要是为了让你不用安装就可马上体验 FreeBSD 。
FreeSBIE http://www.freesbie.org/ FreeBSD Live CD
PFsense http://www.pfsense.com/ 基于 FreeBSD 构建的防火墙系统。
m0n0wall http://m0n0.ch/wall/ 基于 FreeBSD 构建的防火墙系统。
TinyBSD http://www.tinybsd.org/tinybsd 方便开发嵌入式系统的 FreeBSD 分支。
MiniBSD https://www.minibsd.org/  
FreeBSD LiveCD http://livecd.sourceforge.net/  
MaheshaBSD http://www.freebsd.nfo.sk/maheshaeng.htm 基于 FreeBSD 的 Unix 发行版,a (LiveCD/DVD/USB) modular toolkit!
DesktopBSD http://desktopbsd.net/ 基于 FreeBSD 的桌面 BSD 发行版,KDE 环境。
MirOS http://www.mirbsd.org MirOS的重点是制作一种简洁和稳定的服务器 操作系统

 

原文链接:http://wiki.freebsdchina.org/os/other

FreeBSD下添加新硬盘

FreeBSD下添加新硬盘

第一种方法:使用 sysinstall

在使用 sysinstall 来设定新的硬盘之前,请先确定您是以 root 身份执行。接下来,您就可以依照下列步骤来新增硬盘:

进入 sysinstall

进入 sysinstall 的主选单后,首先请选择 [Configure],进入后,再选择 [Fdisk] 项目以进入 Fdisk 选单。第一次进入 Fdisk 时,sysinstall 会要求您选择所要设定的硬盘,请选择 ad1。

使用 Fdisk

相信您对于 Fdisk 的画面应该很熟悉,我们在安装 FreeBSD 时就使用过它。如果您要让 FreeBSD 使用整个硬盘,请按 [A],接下来请按 [W] 以将设定写入硬盘。在按了 [W] 后,会出现一个确认的窗口,选 [Yes] 即可。最后会出现要您选择所要使用的 Boot Manager,因为这一个硬盘不是要用来开机用的,所以我们选 [None]。写入后,请按 [Q] 离开 Fdisk 的画面,并回到 Configure 画面。接着请离开 sysinstall,再重新执行 sysinstall 以让 sysinstall 重新侦测硬盘设定。

使用 Disk Label Editor

重新执行 sysinstall 后,请选择 [Configure] -> [Label] 以进入 Disk Label Editor。Disk Label Editor 会帮我们在 Slice 下切割 Partition 并格式化硬盘。在 Disk Label Editor 中,我最多可以建八个分割区 (Partition),编号从 a 到 h。不过有的代号有特殊用途。例如,分割区 a 通常会保留给根目录使用,所以我们开机时所使用的分割区代号会是 a。而代号 b 表示是 swap partition,我们可以在多个硬盘中都有 swap partition。代号 c 是用来表示整个硬盘或是整个 Slice。所以最后 d-h 才是一般我们会使用到的分割区代号。

我们要让 FreeBSD 使用整个硬盘,所以必须将整个 Slice 切成一个 Partition。所以一进入 Disk Label Editor 后,请按 [C],在画面上会显示整个 Slice 的大小,直接按 Enter 即可建立一个分割区。接下来,我们必须选择所要挂入本分割区的目录,请选择 FS 后,再输入您所要挂入的目录,例如 /volume1。如果是在安装 FreeBSD 时,我们所设定的挂入点会被写到 /etc/fstab 中,开机后就会自动将磁盘挂入该目录。但是我们这里所指定的挂入点并不会被写入 /etc/fstab 中,最后我们还是必须再设定 /etc/fstab。

最后请按 [W]以进行分割及格式化。完成后,系统会将该才所建立的磁盘挂入您所指定的目录下。接着请离开 sysinstall 回到命令列。

设定 /etc/fstab

为了让系统在开机时可以自动将此分割区挂入,我们必须再设定 /etc/fstab。请在 /etc/fstab 中增加下列数据:

# Device Mountpoint FStype Options Dump Pass#
/dev/ad1s1d /volume1 ufs rw 2 2

第二种方法: 使用命令列

您不一定要使用 sysinstall 来分割及格式化硬盘,sysinstall 只是提供一个比较容易使用的界面,最后还是会呼叫命令列的指令以完成硬盘的设定。使用命令列的方式比较复杂,而且较容易出错,但却可以让您有更灵活的应用。看了如何从命令列新增一个硬盘可以让您对 sysinstall 所做的事更了解。

我们一样假设要新增的硬盘为 ad1,并且将整个硬盘切成一个扇区给 FreeBSD 使用。第一步要做的就是先使用 dd 这个指令来清除硬盘上旧的设定:

# dd if=/dev/zero of=/dev/ad1 bs=1k count=1

上述指令的意思是从 /dev/zero 这个装置读出数据写到 /dev/ad1 中,每次写入的 block size (bs) 为 1KB,做一次写入的动作即可 (count)。我们知道 FreeBSD 各动硬件装置当做档案来看待,/dev/zero 这个档案其实是一个虚拟的档案,我们从这个档案读出来的数据都是 0。上述指令的动作的目的就是要将硬盘 ad1 的开头 1024KB 清成 0,而硬盘开头的部份存放的就是一些分割区设定的数据 (Partition Table)。

接下来呢我们就必须使用 fdisk 这个指令来切割 slice 了:

# fdisk -BI ad1
******* Working on device /dev/ad1 *******
fdisk: invalid fdisk partition table found

上述 fdisk 指令表示我们要将 ad1 切割成一个 slice (参数 -I),并清除放开机信息的第 0 个 sector。您可以忽略「invalid fdisk partition table found」的警告,因为我们一开始并没有任何分割区。接下来我们就可以使用下列 bsdlabel 指令来建立预设的 partition label,再使用 bsdlabel 加参数 e 以修改建立的 lable:

# bsdlabel -B -w ad1s1 auto
# bsdlabel -e ad1s1

接着会使用您预设的文书编辑软件跳出一个窗口,请将 a: 改成 d: 后存档离开,因为我们新增加的分割区不是要给根目录使用,所以不用代号 a,而是使用第一个不具特别意义的代号 d。

# /dev/ad1s1:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
d: 78156146 16 unused 0 0
c: 78156162 0 unused 0 0 # "raw" part, don’t edit

将 a: 改成 d: 后,存档离开即可。接下来我们就可以格式化这一个分割区了。FreeBSD 中用来格式化 UFS 档案系统的指令为 newfs:

# newfs /dev/ad1s1d

以上即为新增一颗硬盘所要做的事。请注意,bsdlabel 这个指令是 FreeBSD 5.1 以后才有的,在 5.1 以前,请使用 disklabel。

接下来您就可以将新的硬盘挂入了,假设您要挂入的目录是 /volume1,则请使用下列指令:

# mkdir /volume1
# mount /dev/ad1s1d /volume1

最后,如果您希望一开机就将此分割区挂入,请修改 /etc/fstab,并加入此分割区的设定。

原文链接:http://juven.blog.51cto.com/749867/181724

FreeBSD挂载光驱、U盘、ISO以及NTFS

挂载光驱

mount -t cd9660 /dev/acd0 /mnt

卸载光驱

umount /mnt

挂载U盘

mount -t msdos /dev/da0s1 /mnt

卸载U盘

umount /mnt

挂载ISO镜像文件

mount -t cd9660 /dev/`mdconfig -f cdimage.iso` /mnt

这一命令将使用第一个md设备来加载cdimage.iso所指明的iso文件,并将该md设备挂载在/mnt上。

卸载ISO镜像文件

umount /mnt

挂载NTFS文件系统

mount –t ntfs /dev/ad0s1 /mnt

卸载NTFS文件系统

umount /mnt

FreeBSD用户和用户组管理

FreeBSD用户和用户组管理

一、添加/删除用户

添加用户

# adduser
Username: jru
Full name: J. Random User Uid (Leave empty for default):
Login group [jru]:
Login group is jru. Invite jru into other groups? []: wheel Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: zsh Home directory [/home/jru]:
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username   : jru
Password   : ****
Full Name  : J. Random User
Uid        : 1001
Class      :
Groups     : jru wheel
Home       : /home/jru
Shell      : /usr/local/bin/zsh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (jru) to the user database.
Add another user? (yes/no): no Goodbye!
#

或者

# pw useradd username -d homedir -g usergroup

删除用户

# rmuser username

或者

# pw userdell username
# pw userdell uid

也可以手工编辑 /etc/passwd 文件添加或删除用户:

# vipw

二、添加/删除用户组

添加

# pw groupadd groupname

删除

# pw groupdel groupname

也可以手工编辑 /etc/groups 文件添加或删除用户组。

三、切换用户

使用 su 命令可以切换用户身份。

su username
完全模拟用户登陆(比如获得用户自定的一系列环境变量等等)

su – username
或者
su -l username

四、修改用户密码

passwd 是更改用户口令最常用的命令。
此外如果有root身份,pw也可以用来更改用户口令。

修改当前用户口令
$ passwd

如果是root,方法也一样

# passwd

身为root修改用户口令

# passwd 用户名

跟上面的效果一样

pw user mod 用户名 -h0

或者 用给定字符串更改用户口令

echo “新口令”|pw user mod 用户名 -h 0

再或者 用随机字符串更改用户口令

pw user mod 用户名 -w random

五、获取用户信息

用这个命令

$id 用户名

如果要获得当前用户信息,直接输id,后面不用加用户名。

六、如何知道有那些用户登录到系统

用这个命令

users

如果需要了解更多的信息:

who

系统会吐出类似下面的输出

username1             ttyp1    11 23 23:50  (192.168.0.1)
username2             ttyp2    11 24 1:53  (192.168.0.2)

这行输出表明了当前登入的用户,使用的终端号,登入时间以及来源地址。

还可以看更详细的信息:

w

系统会吐出类似下面的输出

2:27上午  up 123 days,  6:53, 2 users, load averages: 0.43, 1.02, 0.20
USER             TTY      FROM              LOGIN@  IDLE WHAT
username1              p0       192.168.0.1      2:20上     – w
username2              p1       192.168.0.2     六08下?    2 -csh (csh)

这次输出的内容中包含了系统的一般状态(运行时间,活动用户数量,负载情况)和用户的详细情况(比who多出了用户在做什么的信息)。

原文链接:http://wiki.freebsdchina.org/faq/user_and_group/add_or_delete_user
http://wiki.freebsdchina.org/faq/user_and_group/add_or_delete_group
http://wiki.freebsdchina.org/faq/user_and_group/change_user
http://wiki.freebsdchina.org/faq/user_and_group/change_password
http://wiki.freebsdchina.org/faq/user_and_group/query_user
http://wiki.freebsdchina.org/faq/user_and_group/query_login_users

FreeBSD Shell的操作和使用

FreeBSD Shell的操作和使用

一、常见sh介绍

sh

sh是系统标准的shell.系统里面的许多脚本(例如/etc/rc.subr,./configure)都是sh脚本。能看懂sh脚本,才能自己独立解决问题。

tcsh

tcsh随发行版一起提供给用户,属于系统默认的root用户使用的shell。

tcsh是一个非常好用的 shell,合理地配置能够极大地提高工作效率,并减少出错的机会。但是需要注意的是,tcsh在很多方面与 sh 并不兼容。

bash

FreeBSD上面的bash和linux上面的是一样的。如果你没入门的话,linux论坛里面能能找到中文资料。bash和sh是兼容的。

bash不作为FreeBSD的一部分提供给用户。如果需要使用bash,需要到ports下进行安装。

二、如何查看当前用户的默认shell

用这个命令

echo $SHELL

三、如何更改用户的默认shell

1,作为root改变别人的默认shell

vipw

或者

chsh 用户名

2,改变自己的shell

chsh

四、如何设置环境变量

1,Csh

临时使用:

bsdx64# setenv CVSROOT /opt/cvsroot
bsdx64# env|grep CVSROOT
CVSROOT=/opt/cvsroot

写到.cshrc,永久生效

setenv CVSROOT  /data/cvsroot

2,Sh/Bash

临时使用:

bsdx64$ export CVSROOT=/opt/cvsroot
bsdx64$ env|grep CVSROOT
CVSROOT=/opt/cvsroot

写入 .profile 可以永久生效

CVSROOT=/data/cvsroot
export CVSROOT

或者

export CVSROOT=/data/cvsroot

原文链接:http://wiki.freebsdchina.org/faq/shell/about
http://wiki.freebsdchina.org/faq/shell/query_login_shell
http://wiki.freebsdchina.org/faq/shell/change_login_shell
http://wiki.freebsdchina.org/faq/shell/setenv

FreeBSD下文件和目录操作

FreeBSD下文件和目录操作

一、目录操作

新建目录

如果是当前路径下

mkdir 目录名

如果是在别的已有目录下

mkdir 目标路径/目录名

如果目标路径不存在

mkdir -p 目标路径/目录名

重命名目录/移动目录

本质上,重命名目录和移动目录是一样的,都可以这样实现:

#移动
mv 源目录 目标目录
#重命名
mv 原名 目标名

删除目录

有两个办法:

rmdir 目录名

或者

rm -r 目录名

二、文件操作

新建文件

如果是当前路径下

touch 文件名

如果是在别的已有文件下

touch 目标路径/文件名

如果目标路径不存在,需要先创建目录:

mkdir -p 目标路径

请注意,这时候生成的文件本身为空,请选择工具对文件进行处理

重命名文件/移动文件

本质上,重命名文件和移动文件是一样的,都可以这样实现:

#移动
mv 源文件 目标文件
#重命名
mv 原名 目标名

删除文件

rm 文件名

复制文件

cp 源文件 目标文件

三、更改所有者

针对文件而言,很简单:

# 语法
# chown 用户名 目标文件
# 例子:
chown playername /usr/local/www/data/index.html

如果是目录

# 语法
# chown -R 用户名 目标文件
# 例子:
chown -R playername /usr/local/www/data

如果你想改一个目录的用户组也不难:

# 语法
# chgrp 组名 目标文件
# 例子:
chgrp playername /usr/local/www/data/index.html

如果是目录

# 语法
# chgrp -R 组名 目标文件
# 例子:
chgrp -R playername /usr/local/www/data

如果想用户和组起改,哪么使用chown一次就可以:

# 语法
# chown 用户名:组名 目标文件
# 例子:
chown playername:playername /usr/local/www/data/index.html

如果是目录

# 语法
# chown -R 用户名:组名 目标文件
# 例子:
chown -R playername:playername /usr/local/www/data

四、更改权限

在了解如何更改文件/目录的权限之前,您需要先行了解FreeBSD下文件权限的相关概念,点击这里[URL:http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/permissions.html]。

用于改变文件/目录权限的文件的命令是:

chmod

chmod 有两种风格,数字化(使用0~8)的和字符方式(使用 a,u,g 标识)的,如下: 给所有用户加上读权限:

chmod a+r 目标文件
chmod 444 目标文件

给所有用户加上执行权限

chmod a+x 目标文件
chmod 777 目标文件

让所有用户完全控制

chmod 777 目标文件

更加复杂的文件权限分配请参看man page

需要注意的是: 对于普通用户而言(也就是对root无效),
目录的x权限一旦去除,用户将无法进入目录;
目录的r权限一旦去除,用户将无法列出目录清单

原文链接:http://wiki.freebsdchina.org/faq/file_and_directory/directory_management
http://wiki.freebsdchina.org/faq/file_and_directory/file_management
http://wiki.freebsdchina.org/faq/file_and_directory/change_owner
http://wiki.freebsdchina.org/faq/file_and_directory/change_mode