“csh”标签相关文章 »

四月 24

在雪豹下,有时候在往非本地硬盘(比如网络共享或者外挂移动硬盘等)拷贝文件的时候,会发生“不能完成此操作,因为您没有权限访问一些项目”的错误信息。

刚开始碰到的时候,我以为我家文件服务器的 Samba 配置出了问题(因为那几天刚好我做了一点小调整),后来发现和 Samba 没有关系,并且拷贝到外挂移动硬盘或者 U 盘也会有这个错误,但只限于那几个文件。

将出错的文件仔细定位后,发现是一个视频字幕文件,具体做了哪些操作也忘了,在终端下使用 "ls -al" 命令发现该文件的权限位最后多了一个 “@” 符号,类似以下形式:

-rw-r--r--@ 1 dirk staff 62584 somefile.srt

在网上搜搜后,说得最多的是关于隐藏属性的标志,但实际此文件在 Finder 中并没有被隐藏。几番搜索并试验后,发现和 xattr 这个命令相关。

可是,可是,为什么 xattr 没有 man page 呢?为什么?

还好,可以看看 "xattr -h":

[dirk@idesk:~]$ xattr -h
usage: xattr [-l] [-r] [-v] [-x] file [file ...]
       xattr -p [-l] [-r] [-v] [-x] attr_name file [file ...]
       xattr -w [-r] [-v] [-x] attr_name attr_value file [file ...]
       xattr -d [-r] [-v] attr_name file [file ...]

The first form lists the names of all xattrs on the given file(s).
The second form (-p) prints the value of the xattr attr_name.
The third form (-w) sets the value of the xattr attr_name to the string attr_value.
The fourth form (-d) deletes the xattr attr_name.

options:
  -h: print this help
  -r: act recursively
  -l: print long format (attr_name: attr_value and hex output has offsets and
      ascii representation)
  -v: also print filename (automatic with -r and with multiple files)
  -x: attr_value is represented as a hex string for input and output

最终的解决办法是分两步走:

  • 首先,使用 "xattr 文件名" 命令看看该文件附加了什么属性,比如我那个字幕文件多了 “com.apple.metadata:kMDItemWhereFroms” 这么一个属性。
  • 然后可以使用 xattr 删除此属性,文件就恢复正常了!(如果是多个属性,挨个删除即可)
[dirk@idesk:~]$ xattr -d com.apple.metadata:kMDItemWhereFroms somefile.srt

问题解决,打完收工!!!

dirk 发表于 2010-04-24 星期六
七月 31

一直以来,在 Solaris 和 Linux 下都习惯了 bash 的风格,比如命令补全、历史命令编辑、nohup 后台运行,等等。

现在基本上只使用 FreeBSD ,而 FreeBSD 默认的shell并不是 bash,bash 需要额外 ports 安装,而且 bash ports 是安装在 /usr/local/bin/bash 的,我一般都把 /usr/local 从根分区分离出去,这样的话,如果系统有问题需要进入单用户模式的时候,bash 是不可用的。

研究了一下,如果csh经过一定的设置,也是很好用的: 1、设置命令补全,修改 /etc/csh.cshrc 文件:

set autolist

2、显示类似 [dirk@trinity /usr/local/etc]# 这样的提示符,修改 /etc/csh.cshrc 文件:

set prompt = '[%B%n@%m%b %B%~%b%] #'

3、让 ls 命令显示目录的时候带 / 斜杠区分普通文件,修改 /etc/csh.cshrc 文件:

alias ls ls -F

4、让 csh 具有历史命令编辑功能,还是 /etc/csh.cshrc 文件:

bindkey "^W" backward-delete-word
bindkey -k up history-search-backward
bindkey -k down history-search-forward

5、最后,使用 script 命令替代 nohup 命令:

script -a script.log "command"
dirk 发表于 2009-07-31 星期五
七月 31

FreeBSD 默认的 shell 是 /bin/csh,相对于 Linux 下广泛使用的 /usr/ports/shell/bash 来说,默认设置的 /bin/csh 使用起来不太友好。比如命令补全功能,需要这样的设置。 /bin/csh 的历史命令功能是非常强大的:

For example, consider this bit of someone's history list:

     9  8:30    nroff -man wumpus.man
    10  8:31    cp wumpus.man wumpus.man.old
    11  8:36    vi wumpus.man
    12  8:37    diff wumpus.man.old wumpus.man

The commands are shown with their event numbers and time  stamps.   The
current  event,  which we haven't typed in yet, is event 13.  `!11' and
`!-2' refer to event 11.  `!!' refers to the previous event, 12.   `!!'
can  be  abbreviated  `!'  if  it  is followed by `:' (`:' is described
below).  `!n' refers to event 9, which begins with `n'.  `!?old?'  also
refers  to event 12, which contains `old'.  Without word designators or
modifiers history references simply expand to the entire event,  so  we
might  type  `!cp'  to redo the copy command or `!!|more' if the `diff'
output scrolled off the top of the screen.

默认的 /bin/csh 只保存 100 条历史命令,并且当你使用同一个账号开启多个连接到同一台服务器的时候,最终保存的历史命令可能只有最后退出那次会话的命令,其他连接中使用的命令没有保存起来。通过设置以下参数可以让 /bin/csh 合并多连接状态的历史命令:

set history = 2000
set savehist = 2000 merge

可以将以上设置保存到 /etc/csh.cshrc 或者 ~/.cshrc。(更多信息请参考“man csh”)

dirk 发表于 2009-07-31 星期五