- 论坛徽章:
- 0
|
哥们,看帖要推荐啊,点这里
第二章:命令差别
- 绝大多数linux命令都有两种类型的选项:简洁式(short form,比如-v)和长格式(long form,比如--version)。
- 而Solaris的命令,除非是GNU版本的以外,通常都没有长格式。
- Linux命令可使用"--help"查看简要帮助,Solaris部分新命令可使用"-?"达到同样的效果,比如pkginfo -?
如果从linux移植脚本到solaris,就必须注意这点区别,用GNU版本的命令来替代或把这些Solaris没有的选项替换成对应的简洁式选项。inux和Solaris之间相互匹配的命令清单,可到网站查看:http://bhami.com/rosetta.html。本文仅列出一些常见命令的区别点:
awk | basename | cat | chown | df | du | ps | setfacl | getfacl | tar | uesradd | groupadd |
作者保留版权,转载请注明出处,来自cu-yuhuohu.
awk
Linux使用的是GNU版本的awk命令。
Solaris默认使用System V版本的awk,GNU的awk有一些System V不具备的扩展功能。但Solaris也提供了其他几种版本的awk命令,分别放置在以下几个目录中:
/usr/bin/awk
| 标准的System V版本的awk
| /usr/bin/nawk
| 新版的System V awk,比前者多了许多扩展特性
| /usr/xpg4/bin/awk
| XPG4的awk.当从Linux移植脚本到Solaris时,可使用XPG4 awk。
| /opt/sfw/bin/gawk
| GNU awk.配套CD上的awk.和其他版本相比,gawk和Linux的awk的兼容性最高。Solaris 10配套CD中的GNU awk版本为3.0.6
|
basename
Linux和Solaris上的basename命令的基本功能都相同。
Solaris提供两个basename命令:
cat
Linux和Solaris的cat命令非常类似,有些选项有细微差别,如下所示:
Linux | Solaris | -a,--show-all | -vet
| --number-nonblank | -b | -e
| -ve | -E,--show-ends | -ve | -s,--squeeze-blank | 无
| -t | -vt | -T,--show-tabs | -vt | -u(ignored) | -u(输出不使用缓冲,默认为缓冲输出) | --show-nonprinting | -v | --help | 无
| --version
| 无
|
chown
两个操作系统都支持-f和-R这两个基本选项。若指定的文件是指向到目录的符号链接均需使用扩展选项
- -f(强制执行,不报告错误)
- -R(递归,遇到符号链接仅改变链接的目标,符号链接自身不会改变,不会遍历符号链接的目标目录)
Solaris提供了两个版本的chown命令,/usr/bin/chown和/usr/ucb/chown.
- /usr/ucb/chown只支持两个选项:-f和-R
- /usr/bin/chown除了-f和-R外,还支持-h,-H,-L,-P这些扩展选项(要和基本选项-f,-R一起使用).
- 除非使用-h,-P选项,否则符号链接自身的拥有者不会改变
Solaris的/usr/bin/chown的-h,-H,-L,-P
- Solaris的-h等同于Linux的-h or --no-dereference.比如lncht是指向到cht目录的符号链接
# chown -R solaris lncht 仅改变目标目录cht的所有者,符号链接自身不会改变,不会遍历符号链接的目标目录
# chown -Rh solaris lncht 与仅使用-R相比,-Rh把符号链接lncht自身的所有者也改了,其他相同
- -H 如果是指向到目录的符号连接,则目录和其下的文件的所有者发生改变。但若目录下的文件也是个符号链接,则目标文件的所有者被改变,但不会再次进行递归操作。
- -L 和-H类似,但更彻底,在遍历时遇到指向到目录的符号链接,不仅改变目标目录的所有者,同时还会继续遍历目标目录进行改变操作。
- -P 指定的文件或在遍历各级目录时遇到的文件是符号链接,则改变符号链接的所有者。-P不会对符号链接的目标目录进行遍历。-P类似于--no-dereference
- -P>-L>-H
Linux的chown命令的扩展选项:
- -c or --changes 类似于详细模式,但仅报告被改变的部分
- --dereference 命令对符号链接起效,这是solaris的默认行为。移植脚本时需注意此项
- --from= 仅改变符合指定的属主/属组的文件的所有者。solaris没有对应的选项,可用find命令的-ower or -group选项把查找结果传递给chown。
作者保留版权,转载请注明出处,来自cu-yuhuohu.
df
Solaris支持df命令的多种实现方式,比如
- /usr/ucb/df 可使用-v选项,-v选项除了大小以(每个文件系统所支持的最小的)块的为单位显示外其他都和df -k相同。
- /usr/xpg4/bin/df 可使用附加的-P标记,大小以512字节为单位,其他与-k选项相同。
du
Solaris提供了多个du命令,其中-H选项的含义和Linux的du命令不同.
- Linux的du的-H和-si选项作用相同,表示以1000为单位而不是1024,
- Solaris的-H选项这是表示处理符号链接所指向的实际目标文件,类似于Linux du的-L.
其他的差别如下所示(减号"-"表示无对应选项):
Linux | solaris | solaris | solaris | 可匹配的选项 | /usr/bin | /usr/xpg4/bin | /usr/ucb | -a,--all | -a
| -a-
| -a
| --block-size=SIZE
| - | - | - | -b,--bytes | - | - | - | -c,--total | - | - | - | -D,--dereference-args | -L | -L
| -L | -h,--human-readable | -h | -h | -h | -H,-si | - | - | - | -k,--kilobytes | -k | -k | -k | -l,--count-links | - | - | - | -L,--dereference | -L | -L | -L | -m,-megabytes | -
| -
| -
| -S,-separate-dires | -o
| -
| -
| -s,-summarize | -s | -s | -s | -x,-one-file-system | -d | -x | -d | -X FILE,-exclude-from=FILE
| - | - | - | --exclude=PAT | - | - | - | --max-depth=N | - | - | - | --help | - | - | - | --version | - | - | - |
部分选项简要说明:
- -b,-block-size=SIZE 以字节为单位显示大小
- -c produce a grand total
- -l 统计链接
- -L 处理符号链接实际指向的目标
- -m 以MB为单位显示
作者保留版权,转载请注明出处,来自cu-yuhuohu.
ps
Solaris的/usr/ucb/ps是BSD风格的命令,和Linux的ps命令相当,但命令输出可能会有所不同
setfacl
/usr/bin/setfacl用来管理文件的访问控制列表。两个系统上的这个命令的语法和选项不同。
Solaris的setfacl语法:
- setfacl [-r] -s acl_entries file
- setfacl [-r] -md acl_entries file
- setfacl [-r] -f acl_file file
- -s 设置ACL,旧的ACL会被新指定的清空或覆盖
- -m用于添加ACL或修改现有的ACL,也会覆盖现有的ACL条目.
两个系统的ACL条目的格式很相似,Linux支持Solaris的ACL条目格式,但Solaris不支持某些Linux特有的ACL条目格式。
- Linux接受在other和mask关键词之后使用一个附加的冒号":",但Solaris不行。
- 权限由rwx或数字组成,比如"r-x"表示读和执行权限.Linux支持缩写成"rx",而Solaris不行
- Solaris的setfacl能够使用另外一个文件的ACL来设置指定文件的ACL(使用-f选项,Linux版本的setfacl没有这个选项)
下表列出了Linux的setfacl命令独有的一些选项:
Linux独有的setfacl选项 | 解释 | -b,--remove-all | 删除所有的ACL
| -k,--remove-default | 删除默认的ACL
| -n,--no-mask | 不重新计算有效权限掩码,等于solaris中不使用-r选项的setfacl命令
| --mask | 重新计算有效权限掩码,等于solaris的-r选项
| -d,--default | 所有的操作作用于默认的ACL
| --restore=file | 从"getfacl -R"创建的权限备份中恢复权限
| --test | 测试模式
| -R,--recursive | 递归模式,应用到所有的文件和目录
| -L,--logical | 与-P现对,对符号链接有效(follow the symbolic links)
| -P,--physical | 忽略所有的符号链接
| --version | 查看命令版本
| --help | 查看命令的简要使用帮助
| -- | 命令行结束 | - | 如果文件名参数是一个单破折号"-",表示从标准输入读取文件列表 |
作者保留版权,转载请注明出处,来自cu-yuhuohu.
getfacl
/usr/bin/getfacl用来查看文件的访问控制列表。虽然Linux和Solaris的getfacl命令的功能相同且输出格式也很类似,但它们的可用选项有区别。
- solaris的getfacl命令不支持长格式选项。
- Linux的getfacl支持,而Solaris的getfacl不支持的简洁式选项:-R,-L,-P,以及-。
tar
Linux的tar命令是GNU tar,Solaris的tar是System V版本.
这两种版本的tar命令有很大的不同,最好参考它们各自的命令帮助手册.
- solaris的tar不支持使用外部压缩程序,因此没有-Z,-z,-j这些压缩选项
- Solaris的GNU tar命令为/usr/sfw/bin/gtar,安装包为SUNWgtar
如果脚本中有使用tar命令,在移植时有两种方法
- 重新编辑tar命令的用法,采用等价的tar选项,或者使用管道符把结果传递给压缩或解压程序。
- 如果solaris安装了SUNWgtar,则可以在脚本中使用gtar来代替tar.
useradd
两个系统的useradd命令非常相似,很多选项的作用几乎完全一致,主要区别如下:
- Solaris版的useradd有额外的选项以支持RBAC。
- 另外一个明显的区别是-p选项。
- linux中,这个选项用来指定账号的密码,这是一种不安全的做法。
- Solaris中-p选项用来指定账号所属的项目(project),指定账号所开启的所有进程将都属于这个项目.
另外一些具体的区别如下表所示:
Linux | Solaris | 命令解释 | -e expire_date
| -e expire_date | 指定过期时间,日期的格式有所不同
| -f inactive
| -f inactive | Linux中,指过期后多久变成永久禁用
Solaris中,指到账号无效为止的最大天数
| -M
|
| 不创建用户的家目录
|
| -m
| 如果家目录不存在,就创建
| -n
|
| 创建一个和账号同名的组
| -o
| -o
| 允许使用非唯一性uid
| -p passwd
|
| 指定加密后的密码串(用crypt加密)
|
| -p profile
| 指定用户属于哪个项目
| -r
|
| 创建一个系统账号(默认使用一个比UID_MIN小的uid,UID_MIN在/etc/login.defs中定义)。这个是redhat专用选项
|
| -K key=value
| (RBAC使用)设置key/value对
|
| -A authorization
| (RBAC使用)设置授权 |
| -P profile[,profiles...]
| (RBAC使用)设置权力配置 | -D -e default_expire_date
| -D -e default_expire_date | 设置账号的默认过期时间,日期格式有所不同
|
作者保留版权,转载请注明出处,来自cu-yuhuohu.
groupadd
再来第二篇,天黑该休息了。
PS:这次坑挖大了,填死我啦!!
作者保留版权,转载请注明出处,来自cu-yuhuohu.
[ 本帖最后由 yuhuohu 于 2007-10-30 14:34 编辑 ] |
|