SmartOS 与 Linux 不同点总结

在SmartOS用户中最常见的问题之一就是,既然说SmartOS和Linux类似,那除了那些看不见的技术细节,在使用时到底有什么不同呢?如果已经熟练操作Linux,那SmartOS能快速上手么?答案是当然能,其实常用的不同之处并不多。这篇文章将回答Linux与SmartOS在操作上的不同之处。

原文链接:http://wiki.joyent.com/wiki/display/jpc2/The+Joyent+Linux-to-SmartOS+Cheat+Sheet
原文标题:The Joyent Linux-to-SmartOS Cheat Sheet

SmartMachine和其他类Unix系统不同之处主要在于两类:

  • 命令类似,但在SmartOS中用不同的名字
  • 完成类似的任务,但在SmartOS中有不同的实现过程

这里列出一个命令列表,用来帮助Linux用户找到在SmartOS中与Linux对等的命令。

  • Linux 和 SmartOS 命令对比列表
  • 不同使用语境(Use Context)的例子
    • 检查进程和内存
    • 启动和停止服务

Linux and SmartOS 命令对比列表

任务 / 操作系统 Linux SmartOS
表中某些键值的含义
(rh) = Red Hat, Mandrake, SUSE,…
(deb) = Debian, Libranet,…
(fed) = Fedora
(gen) = Gentoo
(md) = Mandrake/Mandriva
(SUSE) = SUSE
Joyent SmartOS

开源版本可参见链接 http://smartos.org

管理用户
managing users
useradd
usermod
userdel
adduser
chage
getent
useradd
userdel
usermod
getent
logins
/usr/sadm/bin/smuser
groupadd
列举硬件配置信息
list hardware configuration
arch
uname
dmesg (if you’re lucky)
cat /var/log/dmesg
/proc/*
lshw
dmidecode
lspci
lspnp
lsscsi
lsusb
lsmod
(SUSE) hwinfo
/sys/devices/*
prtconf -v
arch -k
psrinfo -v
isainfo -v
dmesg
iostat -En
prtfru
cfgadm -l
/etc/path_to_inst
read a disk label fdisk -l prtvtoc
label a disk cfdisk
fdisk
e2label
format
prtvtoc
磁盘分区
partition a disk
parted (if you have it)
cfdisk
fdisk
pdisk (on a Mac)
(deb) mac-fdisk (on a Mac)_
(md) _diskdrake
format
fmthard
kernel /boot/vmlinuz*
/boot/bootlx
(see /etc/lilo.conf or /boot/grub/menu.lst)
/kernel/genunix
/platform/`uname -m`/
kernel/unix
show/set kernel parameters /proc/*
/proc/sys/*
sysctl
/etc/sysctl.conf
sysdef
getconf
cat /etc/system
ndd
adb -k
loaded kernel modules lsmod modinfo
load module modprobe
insmod
modload
unload module rmmod
modprobe -r
modunload
启动脚本
startup scripts
/etc/rc* (but may vary)
/etc/init.d/
/etc/rc*
/etc/init.d/
svcadm
svcs
启动/停止/配置 服务
start/ stop/ config services
(rh) _service
(rh) _chkconfig
(deb) _sysv-rc-conf
svcs
svcadm
终止或关机
shutdown (& power off if possible)
shutdown -Ph now
shutdown -y -g0 -i0
halt
poweroff
shutdown -y -g0 -i5
run levels
*=normal states 
更多细节可参见
www.phildev.net/runlevels.html
(set in /etc/inittab)
0: halt
s,S,1: vendor-dependent
1: single-user
2-5*: multiuser
6: reboot
0: firmware monitor
s,S: single-user
1: sys admin
2: multiuser
3*: share NFS
4*: user-defined
5: power-down if possible
6: reboot
show runlevel  /sbin/runlevel who -r
时区信息
time zone info
/usr/share/zoneinfo/
/etc/localtime
/usr/share/lib/zoneinfo/
检查交换空间
check swap space
swapon -s
cat /proc/meminfo
cat /proc/swaps
free
swap -s
swap -l
bind process to CPU taskset (sched-utils) pbind
“正常”的文件系统
“normal” filesystem
ext2
ext3
ReiserFS
zfs (OpenSolaris)
文件系统描述
file system description
/etc/fstab /etc/vfstab
创建文件系统
create filesystem
mke2fs
mkreiserfs
mkdosfs
mkfs
zfs
文件系统调试和恢复
file system debugging and recovery
fsck
debugfs
e2undel
fsck
fsdb
clri
create non-0-length empty file dd if=/dev/zero of=filename
bs=1024k count=desired
mkfile
创建/挂载 ISO 镜像
create/mount ISO image
mkisofs
mount -o loop pathToIso
mountPoint
mkisofs;DEVICE=`lofiadm -a /absolute_pathname/image.iso` ; mount -F hsfs -o ro
$DEVICE
ACL management getfacl
setfacl
getfacl
setfacl
NFS share definitions /etc/exports /etc/dfs/dfstab
dfshares
NFS share command /etc/init.d/nfs-server reload_(rh)__ _exportfs -a share
shareall
NFS information cat /proc/mounts showmount
nfsstat
name resolution order /etc/nsswitch.conf
/etc/resolv.conf
/etc/nsswitch.conf
getent
显示网络接口信息
show network interface info
ifconfig
ethtool
dladm
ndd
ifconfig -a
netstat -in
dladm
修改IP
change IP
Joyent 公共云IP地址在云管理平台中设置 Joyent 公共云IP地址在云管理平台中设置
ping one packet ping -c 1 hostname ping hostname  packetsize 1
监听网络
sniff network
etherfind
tcpdump
wireshark (formerly _ethereal)
etherape
snoop
route definitions route
(rh) /etc/sysconfig/network
(rh) /etc/sysconfig/static-routes
(deb) /etc/init.d/network
(deb) /etc/network
/etc/defaultrouter
/etc/notrouter
/etc/gateways
in.routed
netstat -r
route add
telnetd, ftpd banner /etc/issue.net (telnet)
(ftp varies; can use tcp wrappers)
/etc/default/telnetd
/etc/default/ftpd
设置日期/时间
set date/time

(from net: ntp or other)
ntpdate
rdate
netdate
ntpdate
rdate
auditing auditd
/var/log/faillog
audit
auditd
auditreduce
praudit
加密后的密码在
encrypted passwords in
/etc/shadow (may vary) /etc/shadow
最小密码长度
min password length
/etc/pam.d/system-auth /etc/default/passwd
允许/禁止 root 登录
allow/deny root logins
/etc/securetty /etc/default/login
防火墙配置
firewall config
iptables
ipchains
ipfwadm
(rh) redhat-config-
securitylevel
/etc/ipf/ipf.conf
显示已安装的软件
show installed software
(rh) _rpm -a -i
(rh) _rpm -qa
(rh) yum list installed
(deb) dselect
(deb) aptitude
(deb) dpkg -l
(gen) _ls /var/db/pkg/*
(gen) _eix -I
pkgin list
安装/添加软件
add software
(rh) _rpm -hiv
(rh) yum install pkg
(deb) dselect
(deb) _apt-get install _pkg
(deb) dpkg -i
pkgin install
预编译的二进制版本
(GPLware and freeware)
www.linux.org
linux.tucows.com
sourceforge.net
rpmfind.net
(deb) ftp.debian.org
(deb) packages.debian.org
(gen) packages.gentoo.org
(gen) gentoo-portage.com;
(md) easyurpmi.zarb.org
pkgsrc.joyent.com/sdc6/
www.sunfreeware.com
www.blastwave.org
C 编译器
C compiler
cc
gcc
/opt/SUNWspro/
bin/cc
configure/show  runtime linking ldconfig
ldd
lsmod
crle
ldd
pldd
modinfo
LD_PRELOAD
链接库路径
link library path
$LD_LIBRARY_PATH
/etc/ld.so.conf
$LD_LIBRARY_PATH
跟踪工具
tracing utility
strace
ltrace
truss
sotruss
dtrace
定义用户默认配置
define user defaults
/etc/profile
/etc/security/
/etc/skel/
/etc/profile.d/*
/etc/default/login
/etc/profile
/etc/security/
csh global .login /etc/csh.login /etc/.login
默认的 syslog 和 信息
default syslog and messages
/var/log/syslog
/var/log/messages
/usr/adm/messages
/var/log/maillog
/var/adm/messages
/var/log/syslog
softpanorama.org/Logs/solaris_logs.shtml
system error reporting tool dmesg_(deb)_ reportbug prtdiag
性能监测
performance monitoring
vmstat
procinfo -D
top
htop
pstree
prstat
ostat
kstat
mpstat
netstat
nfsstat
trapstat
vmstat
ptree
match process to file or port lsof
netstat -atup
fuser
pfiles
维基百科
Wikipedia
Linux Illumos

 

 

 

不同使用语境(Use Context)的例子

比如,一些常见的Linxu命令的工作过程有些不同。, here are some common Linux commands that work differently.

命令 在SmartMachine上有何不同
df 在大多数SmartOS镜像,它是使用的 GNU 版本。可以用 /usr/bin/df 来运行 native 版本
lsof SmartMachine 使用不同的命令集来检查进程,下面会谈及。
ping 返回host主机是否有响应,使用 ping -s 返回持续的响应
top top 在 /opt/local/bin 里面,但 prstat -Z 提供比 top 有关资源池更多且更准确的信息

Rosetta Stone for Unix 是一个有用的资源,可以帮你看看你经常使用的UNIX版本和其他的UNIX版本(包括Mac)有何不同,并如何对应。

检查进程和内存


在旧的SmartOS镜像中,这些命令提供了端口和相关资源的信息,使用root或sudo可运行它们。
新的镜像使用的是 SmartMachine 工具包(Tools Package)

命令 描述 例子
pcp 显示被进程使用的端口们,或者进程们使用哪个端口 /root/bin/pcp -p 80 显示所有使用80端口的进程
/root/bin/pcp -P 28068 显示进程28068使用的所有端口
/root/bin/pcp -a 显示所有端口的端口及进程信息
jinf 显示你的SmartMachine正如何使用它的资源 /root/bin/jinf -c 显示CPU的使用信息
/root/bin/jinf -m 显示内存使用信息
/root/bin/jinf -s 显示交换空间使用信息

SmartOS 提供了一个工具套件来检查进程,可以在 proc 的 man page 中学习到更多内容。

工具 描述
prstat 这个工具显示活动的进程列表,类似Linux中的 top 命令
prstat -Z 将为提供你的SmartMachine状态的摘要信息
pgrep 根据指定的条件或模式返回进程的进程ID(PID)列表,一般是用来判断程序是否正在运行。
pkill 根据指定的条件或模式中止进程
pfiles 返回属于某个进程的所有打开文件列表
pstack 显示指定进程所有的线程的调用栈
ptree 显示所有进程或指定进程的进程树
ls /proc 列举所有正在运行的进程ID

你可以将 pgrep 的结果和其他 proc 工具合并显示。比如,显示与 http 进程相关的所有文件,可以使用如下命令来替代 lsof:

$ sudo pfiles $(pgrep http)

若要限制 prstat 显示 http 进程,可以使用命令:

$ prstat $(pgrep -d , http)
注意:如果 prstat 显示改变了你的终端设置,可以使用 reset 命令返回到正常状态

对于 vmstatmpstat 和 psrinfo 命令,主要显示物理机中处理器和内存的统计信息。这些输出一般来说对于SmartMachine的管理员才有用。

 

启动和停止服务

在其他系统中,你也许习惯使用命令在 /etc/init.d 来启动或停止服务。
SmartMachines 使用 Service Management Facility 来做到这些。

命令 svcs 和 svcadm 是你经常会使用到的。有些命令把 service identifier 叫做FMRI(Fault Management Resource Identifier)。
你可以使用 svcs 命令列举一个服务所有的 identifier 。

命令 描述
svcs 列举所有已启用的服务
svcs -a 列举所有服务,即使有些已经被禁止或offline
svcadm enable apache 使用apache FMRI 启用所有进程
svcadm disable apache 使用apache FMRI 禁止所有进程
svcadm restart apache 使用apache FMRI 重启所有进程

比如,如果你想更改 /etc/ssh/sshd_config 后重启SSH,可以这样做:

$ sudo svcadm restart ssh

Linux设置只能特定用户su到root

对于服务器来说,安全永远都是放在首位的,今天记录下只允许特定用户ssh到服务器,这样子可以防止某些人对你的服务器扫密码.禁止rootssh登录,只能让这个普通用户su到root,下面看操作
系统centos5

新建用户test,并设置密码
[root@vmunix ~]# useradd test
[root@vmunix ~]# passwd test
加入wheel组
[root@vmunix ~]# usermod -G wheel test
编辑pam的su设置
[root@vmunix ~]#vi /etc/pam.d/su

去掉auth required pam_wheel.so use_uid 的#注释
在密码策略里进行设置,追加参数到文件末尾

[root@vmunix ~]# echo “SU_WHEEL_ONLY yes” >> /etc/login.defs
禁止root登录
[root@vmunix ~]#vi /etc/ssh/sshd_config
PermitRootLogin no (把后面的yes改为no)

重启sshd服务
[root@vmunix ~]#services sshd restart
退出root,可以验证下,使用root登录失败,使用test登录su到root,OK!

————————–
另外一种方法看着很方便,但是wesley还没有试验,可以借鉴下
只能允许单个用户登录
编辑/etc/ssh/sshd_config
AllowUsers sshuser1 sshuser2
只能允许某个组登录
AllowGroups sshgroup

DotA2限区直连教程

目前,由于V社的中国战略,所有发放的邀请函都变成了限区码,不可以在中国大陆地区激活和使用。如果在中国大陆地区想要启动DotA2的话会得到这样的错误:

DotA2-1

这时候我们必须要挂VPN再连接Steam才能进入游戏。但是如果使用了VPN,则会导致在游戏中延迟非常高,丢包率同样很高,甚至会断线,导致完全无法游戏。

不过经过分析,我们可以发现Steam只有在启动DotA2的时候才会去验证所在地区,而且是通过Steam客户端验证的。在验证通过之后,DotA2的客户端并不会再次验证地区而是可以直接连接服务器。于是我们就可以用这样的办法来只让Steam走VPN而DotA2则直接连接服务器。这样的好处不仅是延迟低丢包低,还不用担心VPN断线导致游戏断开连接。

首先,我们需要设置一下VPN连接。大部分现成的VPN客户端都有一个“发送所有流量”类似的选项,如果把这个选项去掉的话就可以让VPN只是连接上但是并不更改路由表从而更改流量的指向。如果没有客户端而是手动创建的VPN连接的话,则要进行如下设置:

1.右击VPN连接选择属性

DotA2-2

2.切换到“网络”选项卡

DotA2-3

3.双击Internet协议版本4,打开设置选项卡

DotA2-4

4.选择高级,打开高级选项卡,将“在远程网络上使用默认网关”的勾去掉

DotA2-5

保存退出。这时我们连接一下VPN来看看效果。连接之后访问一下www.ip.cn发现我们的IP还是自己的IP则设置成功。

接下来把下面这一段代码保存为.bat脚本

@echo off
for /F "tokens=4" %%* in ('route -p print ^| findstr "\<255.255.255.255\>"') do (set routeadd=%%*)
echo %routeadd%
@echo 清理路由表,避免在多网卡上添加发生错误
pause
route delete 68.142.91.0
route delete 68.142.116.0
route delete 69.28.145.0
route delete 72.165.61.0
route delete 81.171.115.0
route delete 103.28.54.0
route delete 146.66.152.0
route delete 205.185.220.0
route delete 208.64.200.0
route delete 208.111.133.0
route delete 208.111.171.0
route delete 209.197.6.0
route delete 209.197.20.0
route delete 209.197.30.0
route delete 209.197.26.0
route delete 209.197.29.0

@echo 请确认您已连接上VPN!
pause

route add 68.142.91.0 mask 255.255.255.0 %routeadd%
route add 68.142.116.0 mask 255.255.255.0 %routeadd%
route add 69.28.145.0 mask 255.255.255.0 %routeadd%
route add 72.165.61.0 mask 255.255.255.0 %routeadd%
route add 81.171.115.0 mask 255.255.255.0 %routeadd%
route add 146.66.152.0 mask 255.255.255.0 %routeadd%
route add 205.185.220.0 mask 255.255.255.0 %routeadd%
route add 208.64.200.0 mask 255.255.255.0 %routeadd%
route add 208.111.133.0 mask 255.255.255.0 %routeadd%
route add 208.111.171.0 mask 255.255.255.0 %routeadd%
route add 209.197.6.0 mask 255.255.255.0 %routeadd%
route add 209.197.20.0 mask 255.255.255.0 %routeadd%
route add 209.197.30.0 mask 255.255.255.0 %routeadd%
route add 209.197.26.0 mask 255.255.255.0 %routeadd%
route add 209.197.29.0 mask 255.255.255.0 %routeadd%

或者直接下载:

http://pan.baidu.com/share/link?shareid=458196&uk=1023678707

这是同一个文件。

此时确保你已经连上了VPN,然后以管理员模式运行这个脚本:

DotA2-6

此时左上角应该能正常的显示出你VPN连接的IP地址。确认正确之后按任意键继续:

DotA2-7

此时会先删除原来残留的限区直连路由表。如果本次开机之后没有运行过脚本的话应该会提示删除失败。这是正常情况。

然后再按任意键继续:

会看到添加成功的提示。此时我们再打开Steam

就可以正常的启动DotA2了。

DotA2-8

DotA2-9