Solaris命令大全

查看系统的版本
uname -a
uname -X
cat /etc/release

查看内核位数
isainfo -v


如何查看版本号和linux一样

cat /etc/release ; Solaris版本
uname -a ; Kernel版本





1.看物理内存用prtconf,在x86和sparc都通用的:
# prtconf -vp | grep Mem
Memory size: 1015 Megabytes
2.用vmstat看使用情况:
# vmstat 1
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr cd s0 s1 -- in sy cs us sy id
0 0 0 1016848 587012 36 117 73 1 3 0 121 11 -0 11 0 475 2930 936 7 2 91
0 0 0 963184 522692 11 27 0 0 0 0 0 0 0 0 0 393 848 273 1 1 98
0 0 0 963184 522732 0 0 0 0 0 0 0 0 0 0 0 399 328 281 0 0 100
0 0 0 963184 522732 0 0 0 0 0 0 0 0 0 0 0 402 1368 283 1 0 99
0 0 0 963184 522732 0 0 0 0 0 0 0 0 0 0 0 387 772 258 0 1 99
0 0 0 963184 522732 0 0 0 0 0 0 0 0 0 0 0 400 1801 274 1 0 99
3.Solaris 9开始,可以使用mdb来查看内存:
# echo ::memstat |mdb -k
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 26350 102 10%
Anon 78852 308 31%
Exec and libs 13812 53 5%
Page cache 8400 32 3%
Free (cachelist) 39009 152 15%
Free (freelist) 91239 356 35%

Total 257662 1006

以上三中方法查看内存大小及使用情况。


CPU:psrinfo -v
MEMORY:prtconf |grep size
prtdiag -v
机器的部件信息及PN号
prtfru -x



查看所以硬盘及分区使用情况df -h
查看某个文件夹 某个目录的大小du path
查看cpu 内存使用状况vmstat
动态查看进程CPU使用状况以及内存使用状况 比如1秒更新一次prstat -a 1


SPARC



通常的“uname -a"命令就可以知道Solaris的版本:
想知道是哪一个Solaris Update版本,可以查看/etc/release文件。
对于曾经使用过Opensolaris的BFU升级的用户,应该查看/etc/motd文件。


showrev

showrev -p
showrev -a



#pkginfo -l


cat /etc/release




isainfo -v





1、首先,需要找到该进程的进程ID(以DSLMgrDm为例)
$ ps -ef | grep DSLMgr
root 416 375 0 Jun 19 ? 4:08 /opt/n2000/server/conf/../bin/DSL
MgrDm
n2kuser 1846 1823 0 16:53:00 pts/3 0:00 grep DSLMgr

2、之后便可以查询该进程的资源占用情况了
$ prstat -p 416
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
416 root 67M 26M sleep 59 0 0:00.19 0.0% DSLMgrDm/33

3、还可以查询该进程的各个线程的资源占用情况
$ prstat -Lp 416
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/LWPID
416 root 67M 26M sleep 59 0 0:00.08 0.0% DSLMgrDm/24


416 root 67M 26M sleep 59 0 0:00.01 0.0% DSLMgrDm/23
416 root 67M 26M sleep 59 0 0:00.00 0.0% DSLMgrDm/21
416 root 67M 26M sleep 59 0 0:00.00 0.0% DSLMgrDm/20
... ...

1、首先,要取得该进程的core文件(如果该进程的进程ID是416)
# gcore -o DSLMgrCore_06221701 416
gcore: DSLMgrCore_06221701.416 dumped

2、然后将此core文件转换一下即可
# pstack DSLMgrCore_06221701.416 | c++filt
(由于信息太多,下面只列出了线程1和线程2的堆栈信息,该命令与前面介绍的prstat命令相结合即可查看CPU占用率最高的线程的工作情况)
----------------- lwp# 1 / thread# 26 --------------------
fd19f428 lwp_sema_wait (fa40fe60)
fe0c96dc _park (fa40fe60, fe0ec000, 0, fa40fd98, 2234c, 0) + 114
fe0c90d8 _swtch (fa40fd98, fa40fd98, fe0ec000, 5, 1000, fe0cc910) + 158
fe0cc97c _sema_wait (1413658, fe0f785c, 10000, 1, 1413678, 1413660) + b0
fe0ccbb0 _libthread_sema_wait (1413658, 0, 14f6fd0, fe4f6000, 110e8, fe0ccb70)
+ 40
fe4e4e7c sem_wait (1413658, 0, fa40f660, 0, 216d4, fda62e64) + 20
fda6474c int ACE_OS::sema_wait(ACE_sema_t*) (1413440, 0, fa40f87c, 0, 0, 0) + 3
4
fda5edc0 int iMapTaskMgr::WaitThreadEnterCond(ACE_Time_Value&) (14133e8, fa40f8
7c, 0, 1, 0, 0) + 120
fda5e8d0 iMapTask*iMapTaskMgr::AcquireIdleTask() (14133e8, 14f6fd0, 0, 1, 1, 0)
+ 78
fda5e48c int iMapTaskMgr::svc() (14133e8, 14133e8, 1a, 0, 0, 14f6fd0) + dc
fd90bc30 void*ACE_Task_Base::svc_run(void*) (14133e8, 1, 0, 0, 1a, 14133e8) + b
0
fd831cbc void*ACE_Thread_Adapter::invoke_i() (14143d8, 1198068, 14143d8, fd90bb
80, 14133e8, 0) + bc
fd831bac void*ACE_Thread_Adapter::invoke() (14143d8, 0, 1198068, 14143d8, 0, 11
efc20) + e4
fd7c094c ace_thread_adapter (14143d8, fe0f2708, 0, 5, 1, 14143d8) + 3c
fe0db01c _thread_start (14143d8, 0, 0, 0, 0, 0) + 40
----------------- lwp# 2 / thread# 2 --------------------
fd19ed78 signotifywait ()
fe0ce950 _dynamiclwps (fe0ec000, ffbef618, 2, ffbef644, 0, 7efefeff) + 1c
fd19a220 thr_errnop (0, 0, 0, 0, 0, 0) + 20





我照下面做不行:

1)修改了/etc/system中的定义,并重新启动了机器。
set rlim_fd_max = 4096
set rlim_fd_cur = 1024

2)在用户的.cshrc里面设置了
limit descriptors 1024

3)用命令 ulimit -Sn已经能看到改为了1024

但运行程序时,打开文件数目到256以后,再想打开文件,就提示
fopen出错了,为什么?

代码如下:int main(){
int size=0;
size=getdtablesize();
FILE *fp[1024];
printf("max file descriptors = %d\n",size);
int i;
char filename[256];
strcpy(filename,"./test.txt";
for(i=0;i<1024;i++){
if ((fp=fopen(filename, "r")==NULL){
printf("fopen() error\n";
return -1;
}
printf("cur fd num:%d\n",i+

1);
}
return 0;




solaris下的单个进程打开的最大文件数要设置到最大,如何做?
ulimit -n
man ulimit




# svcs -a |grep network |egrep "pfil|ipf"
disable 4:36:25 svc:/network/pfil:default
online 23:41:33 svc:/network/ipfilter:default
(查看IP Filter服务是否启动)

# ifconfig -a inet
lo0: flags=2001000849 mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
pcn0: flags=1000843 mtu 1500 index 3
inet 10.4.128.226 netmask ffffff00 broadcast 10.4.128.25
(查看网卡设备名)

#vi /etc/ipf/pfil.ap
.......
#dnet -1 0 pfil
#pcelx -1 0 pfil
#spwr -1 0 pfil
pcn -1 0 pfil
.......
(将网卡设备名前注释去掉)

#vi /etc/ipf/ipf.conf
block in log quick proto tcp from 10.4.128.0/24 to any port = ftp
(编辑防火墙规则)

#svcadm enable svc:/network/ipfilter:default
(启动服务)

#svcs -a |grep -i ipf
(再次查看服务是否启动)

#autopush -f /etc/ipf/pfil.ap
(生效pfil.ap配置,此步骤只需要做一次,以后更改防火墙规则就不需要再做)

#ifconfig pcn0 down unplumb
(禁用网卡)

#ifconfig pcn0 plumb 10.4.128.226 netmask 255.255.255.0 broadcast 10.4.128.255 up
#ifconfig pcn0 plumb 192.168.0.6 netmask 255.255.255.0 broadcast 192.168.0.255 up
(启用网卡)

这时候防火墙已经生效,大家可以试着FTP配置好的服务器,若以后需要更改规则请参照以下步骤:
#vi /etc/ipf/ipf.conf
block in log proto tcp from 10.4.128.0/24 to any port = ftp
block in log proto tcp from 10.4.128.0/24 to any port = telnet

#ipf -Fa -f /etc/ipf/ipf.conf
#ipfstat -io
#ipfstat
#ipmon

更改完以后可以再次试着FTP。

大家可能比较迷茫的就是规则方面了,其实它的规则很好懂,配置起来也很简单:
禁止就是block
通过就是pass
进来就是in
出去就是out

那么配合起来使用就行了,再加上可以指定在哪个网卡上使用,也就是再加个on pcn0,另外还有一个关键字就是all,这是匹配(禁止或者通过)所有的包,组合起来的例子就是:
block in on pcn0 all
(禁止所有的包进入)

还可以针对网段、IP以及端口的配置,就是在包的后面加如from .... to .... port = ..就可以,等号的地方可以改成其他运算符,如<、>
网段:block in log proto tcp from 10.4.128.0/24 to any port = ftp
地址:block in log proto tcp from 10.4.128.163/32 to any port = ftp

对于协议的控制,它一样可以做的很好。协议的关键字有4种(icmp、tcp、udp、tcp/udp),启用对协议的控制就是在协议的关键字前加proto关键字如:
block in on pcn0 proto icmp from any to any

在使用ICMP协议控制的时候,可以使用icmp-type关键字来指定ICMP协议的类型,类型的值有4种:
ICMP Type Value Keyword
Echo reply 0 echorep
Echo request 8 echo
Router advertisement 9 routerad
Router solicitation 10 routersol

例如:
block out quick proto icmp

from any to 10.4.128.163/32 icmp-type 0
(禁止对PING的响应)

在这里要解释一下quick的用法,这是个很好用的关键字,假如你的防火墙有100条规则,最有用的可能只有前10条,那么quick是非常有必要的。

pass in log quick proto tcp from 10.4.128.163/32 to any port = telnet
block in log all from any to any

假如你希望禁止服务器的所有包而只希望一个IP只能够telnet的话,那么就可以加上quick关键字,quick的作用是当包符合这条规则以后,就不再向下进行遍历了。如果没有quick的情况下,每一个包都要遍历整个规则表,这样的开销是十分大的,但是如果滥用quick也是不明智的,因为它毕竟不会产生日志。




添加用户时要有一个登陆根目录,这个目录属于该用户。所以我一般先用:

useradd -g xxg xxuser

然后创建一个目录xxdir

chown -R xxg:xxuser xxdir

userdel xxuser

useradd -g xxg -d xxdir xxuser

passwd xxuser

这样就可以用该用户登陆了.





useradd -g mysql mysql

7)验证:
>groups mysql
mysql




:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1

:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1

:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1

:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1

:g/str1/s//str2/g 功能同上








相关文档
最新文档