apr 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
问题解决,打完收工!!!
jul 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"
jul 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”)
Recent Comments