2008-02-25

The Second Chapter:Read the Code.

  事实上,作为一个初学者,我们需要从读懂源代码开始。这里涉及了另外的一些基本知识。
一个最简单的C++代码将给予我们这方面的提示:


#include<string>
using namespace std;

int main()
{
char c1;
char c2;
string s1;
string s2;

c1='A';
c2=c1;

s1="This is a test";
s2="and so is this.";

return 0;
}

  第二行“using namespace std;”在很多程序中都能见到,实际上,C++中采用的是单一的全局变量命名空间。在这单一的空间中,如果有两个变量或函数的名字完全相同,就会出现冲突。为此,就出现了namespace的应用,我们也可以定义自己的namespaces,C++标准类库中的所有标识符都属于std命名空间,当我们使用了“using namespace std;”的时候,我们在整个程序中使用std中的名称就会被当作使用了标准库中的名称,如用cout就相当于std::cout此时如果我们要用自己定义的变量cout的话就需要用::cout。同理,当我们没有使用“using namespace std;”的时候要使用标准类库中的cout的话就必须使用std::cout才行。

  接下来是int main()这一句,int是函数的返回类型,,C++语言规定main()必须返回int类型,所以这里别无选择。main()是个特殊的函数,作为主函数,它告诉编译程序从哪里开始执行代码,C++标准规定,通常从main开始执行程序。
  关于主函数有一些需要辨析的地方:
  对于C语言在C99标准中,main函数只有如下两种格式可以被接受:
  int main ( void )
  int main ( int argc, char *argv[] )
  如果我们不想在命令行下对程序输入参数,可以选择第一种形式。其实第二种形式的两个参数argc,argv的名称是可以改变的,但保持原样是更明智的选择。main()函数的返回类型必须为int;返回的整形值作为传递给调用者的一个返回码。
-------------------------------
  对于C++在C99标准中,main函数只有如下两种格式可以被接受:
  int main ( int argc, char *argv[] )
  int main ()
  第一种格式遵从C99标准;第二种格式在不需要通过命令行向程序传递参数时使用,与C99标准中规定的格式int main(void)效果相同。
-------------------------------
  关于main函数我们还应该注意的是:

  •   一个不接受任何返回值的主函数应该写作int main(void)
  •   如果不希望一个函数返回任何东西可以使用void func(),但是这个规则不能在main函数上使用。

  http://users.aber.ac.uk/auj/voidmain.shtml这个链接提供了一些更详细的资料。

---------------------------------

流程控制语句:

1.判断语句:

  •  单分支选择:if...else....
     语法:if (条件表达式) 语句1;
        else 语句2;
        其中条件表达式为逻辑表达式,条件成立时为true/非0,条件不成立时为false/0,
        如果条件为null或undefined则被当作false
        把 statement1 和 statement2 括在大括号 ({}) 内通常是一个好习惯,
        这样就更清楚,并可以避免无意中造成错误。
  •  多分支选择:switch
     语法:switch (整型表达式)
        {
        case 整型常量表达式1:语句1;break;
        case 整型常量表达式2:语句2;break;
        ……
        default:语句;
        }
        其中default:语句表示若switch获得值没有对应的case的话就执行的语句。
        每个case语句的结尾不要忘了加break,否则将导致多个分支重叠
        
        相同case可以对应同一个语句如:
        case 'a':case'e':case'i':case'o':case'u':
        cout<<endl<<"这是元音字母" <<endl;

2。循环语句:

  •  指定次数循环:for
     语法:for(初始表达式;继续表达式;修改表达式)
        {
        语句
        }
        执行时先执行一次初识表达式,之后执行继续表达式,若继续表达式为true
        则执行语句块之后再执行修改表达式,否则跳过受控语句块。
  •  先判断后执行:while
     语法:while(条件)
        {
         语句
        }
        wihle循环先判断条件后执行循环。
  •  先执行后判断:do...while;
     语法:do
        {
        语句
        }
        while(条件);
        do...while循环先执行内容再判断条件

3.其他控制语句:

  •  无条件转移:goto
     语法:goto 标签;
     其中,语句标签是用来标记某一行的标识符,比如
     MyLabel:x=1;
     goto MyLabel;
  •  中止语句:break
     break将是程序离开当前循环区块,进入下一个语句,这样将使当前循环停止。
  •  跳转语句:continue
     continue的作用是跳过本轮循环直接执行下轮循环。比如:

    #include<iostream&rt;
    using namespace std;

    int main()

    {

    short i;

    for(i=0;i<10;i++)

    {

    cout<<i<<endl;

    if (i==5) continue;

    }

   输出的值是12346789没有5,而如果continue被替换成break的话输出的值就只有1234了。

  •  返回语句:return
     结束当前函数。并返回到调用出

2008-02-23

Solaris10管理开始-用户和用户组

用户管理:
Solaris系统的每个用户都有一组惟一的标识号和特征参数来区别不同的用户,并在逻辑上形成一些相关的用户组。

  • 用户账号可以用于下列目的:
  • 生成Shell
  • 交互执行应用;
  • 调度应用以按照制定的日期或时间运行;
  • 访问数据库应用和其他系统服务。

除了用户账号之外,Solaris还有一些用于各种日常维护的系统账户,如rootdaemonbinsyslpadmuucp,它们的作用如下:

  • 执行特定任务的系统资源分配;
  • 运行mail服务器;
  • 运行web服务器;
  • 执行进程管理。
用户还有许多其他特征:
  • 用户IDUID):这是标记用户的一个整数编号。它从root用户开始编排(UID=0),其他UID顺序分配。但系统会保留1023以前的UID号用于系统账号。普通用户的UID1024开始分配。
  • 用户组:这是区分不同用户类型的一种灵活的分组机制。用户组不只是一组相关用户集合的概念,Solaris文件系统除了可以按照个别用户和全体用户来授予权限,还可以按照用户组指定文件访问的读、写和执行权限。每个UID都与一个基本组IDGID)相关联,但它同时还可以与一个以上的辅助用户组关联。Solaris10引进了细分权限,一反过去UNIX的“非全有即全无”的权限模型给我们提供了更加灵魂的用户分配。
  • 主目录:它是用户所创建的所有文件的默认存储位置。
  • 登录Shell:这是用户交互调用命令或编写程序的地方。Solaris提供各种不同的shell,包括Bourne shell(sh)C shell(csh)Bourne again shell(bash)cornell shell(tcsh)Shell的选择在很大程度上取决于用户的个人喜好,以及对类C编程结构和终端操作系统的熟练程度。
  • 用户注释:它通常为用户的全称。但系统账户的注释可以用来描述它们的作用。如一个Apache系统账户的注释就可以采用“Webserver”
使用useradd命令可以增加用户账号,命令格式如下:

useradd [-u uid -g group] -d dir -s shell -c comment -m [-k skel_dir] ] login

u指定用户ID号;g制定所在组;d指定用户目录;s制定用户Shellc用户的注释;m建立用户目录;
login用户的登录名。

注意:

  • 注释中不能包含有特殊字符,如双引号“”、感叹号“!”或斜杠“/”
  • Shell必须存在
passwd username可以设定用户的密码
usermod命令来修改用户账号参数同useradd如:usermod -u 1005 XXXX
userdel -r username可以删除帐号
passwd -l username用于锁定帐号

##########################
用户组管理:

Solaris系统中,有关组的信息都存储在组数据库中(/etc/group),但本地的组数据库也可以由NIS/NIS+LDAP数据库加以补充,这是我机子上的组构成:
[root@Solaris10 /]#cat /etc/group
root::0:
other::1:root
bin::2:root,daemon
sys::3:root,bin,adm
adm::4:root,daemon
uucp::5:root
mail::6:root
tty::7:root,adm
lp::8:root,adm
nuucp::9:root
staff::10:
daemon::12:root
sysadmin::14:
smmsp::25:
gdm::50:
webservd::80:
postgres::90:
nobody::60001:
noaccess::60002:
nogroup::65534:
sasl::100:
site::101:

使用cat /etc/group可以查看全部内容,要查看某个用户所属的组可以使用
groups username
要查看某个组拥有的用户则还可用
getent group groupname

管理用户组时有用的命令:

增加组:groupadd [-g gid] group

-g,设置组的ID号;

gid,组的ID号(不能与现有的组ID号重复);

group,组名。


删除组:groupdel group
另外,当一个多组属的用户需要切换基本组的时候用newgrp groupname
用id命令可以查看结果

######################################
还有更高级的角色管理,这里我用不到暂时,把搜到的文章贴出来:

对于传统的安全性模型,超级用户拥有完全的超级用户特权,而其他的用户没有足够的权限解决他们自己的问题。有了基于角色的访问控制(RBAC),便可以取代传统的安全模型。

有了RBAC,可以将超级用户的能力分成不同的包,并将它们分别分配给分担管理任务的个体。当使用RBAC划分超级用户特权时,用户可以拥有不同程度的访问权限,可以控制对其他用户特权操作的授权。

RBAC包括了如下特性。

 角色:一种特殊类型的用户账号,可以用来执行一套管理任务。

 特征文件(profile):一种打包机制,用特殊的属性将授权和命令分组。例如,使用用户和组的ID

 授权:一种用来授予对受限功能的访问权限的权利。

下面我们来分别介绍它们。

7.3.1 角色管理概述

1.角色

实现RBAC功 能的第一步就是对准备指派给每个用户的角色进行定义。另外,不同资源的访问权限也必须与具体的角色名联系在一起。对于管理者来说,角色的变化,以及用户与 角色关系的调整都是不可避免的。因此,这种变化的角色和用户列表的实现方法应尽可能的简单。另外,单一的任务并不容易实现与单一角色的关联。

比如,一个被定义为“备份操作员”的角色会涉及到ufsdump命令的运行,而这又需要对磁带设备进行写访问操作。此时,备份操作员角色本身就决定了它对这种文件访问的必然性。因此,我们不需要单独为它定义一个新角色。

又如,一个“设备管理员”可能使用命令tapes来对磁带设备执行写访问操作。所以,这些写操作也不能定义为一个新的角色,它自然成为“设备管理员”角色的一部分。

如果一个用户承担某个角色,他的结果要么承担该角色的全部权限,要么就丧失该角色的全部权限。

在默认情况下,Solaris 支持3种不同的系统管理角色。

 主管理员(PAPrimary Administrator):负责为其他用户分派权限,并负责系统的安全问题。

 系统管理员(SASystem Administrator):负责与安全无关的日常管理工作。

 操作员(Operator):执行备份和设备维护操作。

PASA之间的区别主要取决于本地的安全策略。例如,尽管默认的PA角色具备添加用户和修改口令的权限,而默认的SA角色并不具备修改口令的权限,但在很多地方,禁止SA的口令访问可能是不现实的。RBAC的一个最大的好处就是它可以按照本地的需求非常方便地分配权限。

2.权限配置文件(Profile

特征文件是用于授权的一个或一组特定的命令。这些授权连接在一起形成某个角色,并随后与某个用户或某些不同的用户建立关联关系。它们之间的关系如图7-1所示。

我们可以为每个角色创建一个新的用户账号,这些账号拥有自己的主目录和口令。当执行特征文件中的命令时,用户必须使用su命令进入角色账户,因为这种角色用户是不允许直接登录的。

通过su命令访问角色账户与通过su命令访问普通账户的一个不同之处在于它们的审计功能,即在通过su命令访问某个角色时,它执行的所有操作,连同用户的原始UID都会被记入日志。这样,每个访问角色的用户操作都会被明确地记入日志并进行审计。

3.授权

所谓授权,就是赋予某个角色执行某项操作的特权,它是在/etc/security/auth_attr文件中定义的。授权的定义形式与Internet的域名非常相似,它的最左边为企业名称,随后是依次细化的软件包和功能内容。

例如,net.cassowary.*就是一个由厂商cassowary.net提供的任何功能授权。

在默认情况下,所有Solaris提供的软件包都是由前缀Solaris来加以识别的。比如,修改口令的授权就是Solaris.admin.usermgr.pswd,而不是com.sun.Solaris.admin.usermgr.pswd

许多授权的划分都是十分细致的,它可能只允许读访问,而不允许写访问,反之也是如此。比如,主管理员(PA)可能拥有Solaris.admin.usermgr.readSolaris.admin.usermgr.write的授权,因而可以对用户配置文件分别进行读访问和写访问操作。而系统管理员(SA)虽然可能拥有Solaris.admin.usermgr.read授权,但他并没有Solaris.admin.usermgr.write的授权,因此他可以读用户配置文件,但不能写。

下面是一些Solaris的基本授权:

Solaris.profmgr.read

Solaris.jobs.users, Solaris.mail.mailq

Solaris.admin.usermgr.read

Solaris.admin.logsvc.read

Solaris.admin.fsmgr.read

Solaris.admin.serialmgr.read

Solaris.admin.diskmgr.read

Solaris.admin.procmgr.user, Solaris.compsys.read

Solaris.admin.printer.read

Solaris.admin.prodreg.read

Solaris.admin.dcmgr.read, Solaris.snmp.read

Solaris.project.read, Solaris.admin.patchmg.read

Solaris.network.hosts.read, Solaris.compsys.read

Solaris.admin.volmgr.read

从这里我们看到,Solaris.admin已经定义了一些授权,它们包括文件系统管理(fsmgr)、日志系统管理(logsvc)、端口管理(serialmgr)和用户管理(usermgr)等。

我们还可以利用关键字grant将权限传递给其他用户。一旦关键字grant被附加在一个授权字符串的末尾,即表明该授权可以委托给其他用户。例如,如果Solaris.admin.usermgr. grant授权与Solaris.admin.usermgr.pswd授权配合在一起,则表示口令修改的操作可以由受委托的用户来执行。

4 角色、权限配置文件和授权的关联

如图7-2所示,授权和命令的定义关联起来构成了权限配置文件,该权限配置文件再分派给不同的角色用户来使用。

Solaris共有四个RBAC数据库用于角色的管理。

 扩展的用户属性数据库(/etc/user_attr):将用户、角

色、授权和权限配置文件相关联。

 授权属性数据库(/etc/security/auth_attr):定义了授权及其授权的属性,标识了相关的帮助文件。

 权限配置文件数据库(/etc/security/prof_attr):定义权限配置文件,列出权限配置文件分配的授权,标识了相关的帮助文件。

 权限执行属性数据库(/etc/security/exec_attr):定义了分配给一个权限配置文件的特权操作。

另外,policy.conf文件提供将应用于所有用户的默认属性。

RBAC的几个数据库的相互关系如图7-3所示。

例如,如果“打印机管理”权限配置文件被指定给一个用户或角色,则该用户或角色的user_attr 项包含关键字/值对:

profiles=Printer Management.

prof_attr 文件使用下行定义该配置文件(该文件也指定了帮助文件和授权):

Printer Management:::Manage printers, daemons,

/ spooling:help=RtPrntAdmin.html;auths=Solaris.admin.printer,

/ Solaris.admin.printer.modify,Solaris.admion.printer.delete

exec_attr文件中,下行在“打印机管理”配置文件中给命令/usr/sbin/accept指定了一个有效的用户ID = lp

Printer Management:suser:cmd:::/usr/sbin/accept:euid=lp

数据库user_attr是惟一需要的数据库,其他数据库的使用取决于实现哪种安全功能。

/etc/user_attr数据库补充了passwdshadow数据库。它包含了扩展的用户属性,例如,授权和执行profile。它也帮助你将角色分配给一个用户。

一个角色是一种特殊类型的用户账号,允许一个用户执行一组管理任务。它与一个普通的用户账号类似,只是不通过登录窗口访问角色,只能用su命令来访问他们的角色。

举个user_attr数据库项的实例:

默认的user_attr数据库中的项在下面给出。

root::::type=normalauths=Solaris.*Solarisgrantprofiles=All

这一项为root分配了做任何事情的权限,使root可以使用系统中所有的命令。它还分配了两项授权。Solaris.*通配符授权为root分配了所有的Solaris授权。Solarisgrant授权使root可以给其他用户分配的任何Solaris授权的权利。

2.授权属性数据库(auth_attr

授权就是对一种受限的访问给予的权限。它的表现形式是个字符串,标识着授权者和被授权者。

特定的特权程序能够查看授权,并确定用户是否能够执行受限功能。例如,一个要编辑另一个用户的crontab文件的用户需要有Solarisjobsadmin授权。

所有的授权都被存储在/etc/security/auth_attr数据库中。当直接将授权分配给用户或角色时,授权被输入user_attr数据库中。也可以为执行profile指定授权,这些授权接下来就被分配给用户。

下面的例子给出了默认的auth_attr数据库的一部分。

Solaris.admin.usermgr.:::UsersGroups Mailing Lists::help=UserMgrHeader.html

当授权在auth-attr数据库中定义时,就可以将其分配给一个user-attr数据库中的用户。下面的例子为用户duanf分配了授权Solaris.admin.usermgr.。

duanf::::type=normalauths=Solaris.admin.usermgr.roles=sysadminprofiles=All

3.权限配置文件数据库(prof_attr

有了权限配置文件,就可以使用特殊的属性将授权和命令分组,并将其分配给用户或角色。特殊的属性包括真正有效的UIDGID。最常见的属性是将真正有效的UID设置为root。权限配置被存储在prof_attr数据库中。

下面的例子给出了默认的prof_attr数据库的设备管理部分。所有以Solaris.device字符串开头的授权都被分配给设备管理配置文件。

Device Management:::Control Access to Removable Media:auths=Solaris.device.*help=DevMgmt.html

prof_attr数据库中定义的设备管理配置文件被分配给user_attr数据库中的advanced角色,如下所示:

advanced::::type=roleprofiles=Device ManagementPrinterManagement

而授权在auth_attr数据库中定义的则如下面的摘要所示:

Solaris.device.:::Device Allocation::help=DevAllocHeader.htm l

Solaris.device.allocate:::Allocate Device::help=DevAllocate.htm l

Solaris.device.config:::Configure Device Attributes::help=DevConfig.htm l

Solaris.device.grant:::Delegate Device Adm inistration::help=DevGrant.htm l

4.权限执行属性数据库(exec_attr

与权限配置文件相联系的执行属性就是命令。命令能够使被赋予了配置文件的用户或角色运行特殊的安全属性。Exec_attr文件包括了与权限配置文件相关联的一个基本命令列表。

下面的例子给出了在prof_attr 数据库中定义的打印机管理配置文件。

Printer Management:::ControlAccess to Printer:helpPrinterMgmt.html

打印机管理配置文件有13 项执行属性,在exec_attr 数据库中为它指定了合适的安全属性,如下所示:

Printer Management:suser:cm d:::/etc/initd/lp:euid=0

Printer Managem ent:suser:cm d:::/usr/bin/cancel:egid=0

Printer Managem ent:suser:cm d:::/usr/bin/lpset:euid=14

Printer Managem ent:suser:cm d:::/usr/bin/enable:euid=lp

Printer Managem ent:suser:cm d:::/usr/bin/disable:euid=lp

Printer Managem ent:suser:cm d:::/usr/sbin/accept:euid=lp

Printer Managem ent:suser:cm d:::/usr/sbin/reject:euid=lp

Printer Managem ent:suser:cm d:::/usr/sbin/lpadm in:egid=14

Printer Managem ent:suser:cm d:::/usr/sbin/lpfilter:euid=lp

Printer Managem ent:suser:cm d:::/usr/sbin/lpform s:euid=lp

Printer Managem ent:suser:cm d:::/usr/sbin/lpm ove:euid=lp

Printer Managem ent:suser:cm d:::/usr/sbin/lpshut:euid=lp

Printer Managem ent:suser:cm d:::/usr/sbin/lpusers:euid=lp

7.3.3 RBAC命令

以下这些RBAC命令可以用来对各种不同的RBAC数据库进行操作。

1smexec

smexec命令可以用来创建、更新,以及删除exec_attr命令数据库的行。该命令在执行时必须提供如下三个选项之一:

add,添加一个数据库行;

delete,删除一个数据库行;

modify,更改一个数据库行。

为了执行smexec命令,用户必须具备Solaris.profmgr.execattr.write授权。根据不同的命令选项,smexec可以有两组参数:授权参数和指定参数。

授权参数对于每个选项都是通用的,它们用于指定如下特性:

-domain 管理的域

-hostname:port 执行操作的主机名和端口(默认端口是898

-rolepassword 角色的认证口令

-password 用户口令(不是角色口令)

-rolename 角色名

-username 用户名

我们可以利用smexec add命令在exec_attr数据库添加行。在命令行中,可以指定如下参数:

-c 指定要添加的新命令名的完整路径

-g 指定执行该新命令的有效GID

-G 指定执行该新命令的实际GID

-n 指定与该命令相关联的特征文件名称

-t cmd 指定该操作为一个命令

-u 指定执行该新命令的有效UID

-U 指定执行该新命令的实际UID

下面是smexec add命令操作的一个例子:

# smexec add -hostname localhost -password xyz123 -username root -- -n

Print Manager -t cmd -c /usr/sbin/lpsched -u 0 -g 0

该命令为Printer Manager特征文件添加了一个启动打印服务的能力,它的有效UIDGID都是0(即root)。

我们可以利用smexec delete命令在exec_attr数据库删除行。在命令行中,可以指定如下参数:

-c 指定要删除的命令名的完整路径

-n 指定当前与该命令相关联的特征文件名称

-t cmd 指定该操作为一个命令

如果需要删除exec_attr数据库中lpsched的相应行,可以使用如下命令:

# smexec delete -hostname localhost -password xyz123 username root -- -n

Print Manager -t cmd -c /usr/sbin/lpsched

我们可以利用smexec modify命令修改exec_attr数据库中的行。在命令行中,可以指定如下参数:

-c 指定要修改的命令名的完整路径

-g 指定执行修改后命令的有效GID

-G 指定执行修改后命令的实际GID

-n 指定与该命令相关联的修改特征文件的名称

-t cmd 指定该操作是一个命令

-u 指定执行修改后命令的有效UID

-U 指定执行修改后命令的实际UID

以下是smexec modify命令的一个操作例子:

# smexec modify -hostname localhost -password xyz123 username root -- -n

Print Manager -t cmd -c /usr/some/new/path/lpsched -u 0 -g 0

该命令将Print Manager特征文件的启动打印服务的命令路径从/usr/sbin/lpsched修改为/usr/some/new/path/lpsched

2smmultiuser

smmultiuser命令用来执行批处理操作,诸如添加或删除大量的用户。当需要指定的所有用户数据已经存在于文件中时,该命令会非常有用。例如,一个备份系统可能需要建立一个类似于当前生产系统的设置(setup),此时,我们不仅可以直接复制文件系统,而且可以执行所有涉及新账户创建的操作,诸如主目录的创建等。另外,指定用户数据的文件也可以根据路径名的改变进行更新。例如,如果原始系统的主目录利用NFS被导出,并被挂接到新系统的lexport挂接点下,则相应的用户说明文件的数据也会在处理前执行相应的更新。或者,如果挂接点后来有所改变,系统的用户数据也同样可以利用smmultiuser命令进行修改。

smexec命令一样,smmultiuser命令在执行时也必须选择如下三个选项:(1add,添加多个输入项;(2delete,删除一个或多个输入项;(3modify,修改一组现有的输入项。为了利用Smmultiuser命令来修改口令,用户必须具备Solaris.profmgr.execattr.write授权。按照Solaris.profmgr.execattr.write授权命令的不同选项,它存在两组参数:授权参数和操作参数。

授权参数对于每个选项都是通用的,它们用于指定如下特性:

-domain 要被管理的域,它可以是本地数据库(file)、NISnis)、NIS+(nisplus)DNSdns)或LDAPldap)。例如,为了利用LDAP对主机foxtrot. cassowary.net进行管理,我们需要将该域指定为ldap://foxtrot/ cassowary.net

-hostname:port 执行操作的主机名和端口(默认端口是898

-password 用户口令(不是角色口令)

-rolename 角色名

-rolepassword 角色的认证口令

-trust 在批模式下操作时需要用到

-username 用户名

在利用smmultiuser命令进行添加、删除和修改操作时,可以在命令中传递如下的参数:

-i 指定需要读取的输入文件。该文件包含要添加、修改和删除的所有数据项

-L 指定用于记录批作业中每个操作成败的日志文件名称

在下面的例子中,我们从/home/paul/newaccounts.txt中读取一组记录并添加到系统中:

# smmultiuser add –hostname localhost –p xyz123 username root -- -I

/home/paul/newaccounts.txt

3smuser

smuser命令可以用来执行对用户账户的操作,无论是从本地用户数据库还是从NIS/NIS+检索数据,它和smmultiuser类似。但是该命令通常只用来添加单个用户,而不是在批模式下添加一组用户。除了添加、删除,以及修改用户条目,也可以检索并列出现存的用户数据。执行该命令时必须提供四个选项中的一个;add用于添加一个条目;delete用于删除一个条目;list用于列出所有现存的条目;modify用于更新一个条目。要使用Smuser的选项adddeletemodify,用户必须有Solaris.profmgr.execattr.write授权。但是,只需要Solaris.admin.usermgr.write授权就可以列出条目。

有两套参数可以传递给Smuser(取决于选择了哪个选项):授权参数和每个选项的具体参数。授权参数对每个选项都是通用的,它们确定了如下特征:

-domain 要被管理的域,它可以是本地数据库(file),NISnis),NIS+(nisplus)DNSdns)或LDAPldap)。为了利用LDAP对主机foxtrot.cassowary. net进行管理,我们需要将该域指定为ldap://foxtrot/cassowary.net

-hostname:port 执行操作的主机名和端口(默认端口是898

-password 用户口令(不是角色口令)

-rolename 角色名

-rolepassword 角色的认证口令

-username 用户名

在利用smuser add命令添加项时,它的参数与我们讨论的利用useradd命令添加用户的参数类似,以下是我们可以在命令行中传递的参数:

-c 指定账户的说明,例如:“Joe Bloggs”

-d 指定用户的主目录

-e 指定账户的有效日期

-f 指定账户过期前的非活动天数限制

-F 指定账户全名,该名称不允许与域中其他账户相同

-g 指定账户的GID

-n 指定账户的名称

-P 指定账户的口令

-s 指定默认Shell

-u 指定账户的UID

下面是smuser add命令的一个例子:

# smuser add –H localhost –p xyz123 –u root -- -F Paul Watters” –n walrus –c “Paul A Watters Director” –p jimmy123 –g 10 –u 1025

该命令在系统中为Paul Watters添加了一个账户walrus,该账户的口令为jimmy123,账户UID1025GID10

当利用smuser delete命令删除账户时,我们只需要在命令行中通过-n参数来指定要删除的账户名称。例如,在下面的命令中,我们将从localhost中删除账户warus

# smuser delete -H localhost -p xyz123 -u root -- -n walrus

smuser list命令可以用来显示一个不带任何参数的用户列表,该命令形式如下:

# smuser list -H localhost -p xyz123 -u root -

当利用smuser modify命令修改用户账户时,命令行的参数与smuser add命令的参数相同,命令中的任何新参数值都会导致相应字段的更新。例如,如果需要将某个用户的默认Shell修改为Korn shell,可以使用如下命令:

# smuser update -H localhost -p xyz123 -u root -- -n walrus -s /bin/ksh

4smprofile

smprofile命令可以用来创建、列出、更新及删除prof_attr数据库中的特征文件,它们所对应的命令分别为smprofile addsmprofie listsmprofile modifysmprofile delete。命令所使用的授权参数和smusersmexec命令的参数类似。在利用smprofile add来添加特征文件时,可以在命令行上传递如下参数:

-a 添加单一授权或一组授权

-d 为新的特征文件添加说明

-m 指明与该特征文件相关联的HTML帮助文件的路径

-n 指定该特征文件的名称

以下是smprofile add命令的一个例子:

# smprofile add -H localhost -p xyz123 -u root -- -n Password Manager\

-d Change user passwords-a Solaris.admin.usermgr.pswd \

-m PasswordManager.html

该命令为Password Manager添加了一个特征文件,使它拥有Solaris.admin.usermgr.pswd授权,可以执行口令修改的操作。

当我们希望利用smprofile list列出特征文件的列表时,只要不在命令行中指定-n参数就可以了。如果指定-n参数,则意味着指定列出的特征文件名字。下面是smprofile list命令的一个例子:

# smprofile list -H localhost -p xyz123 -u root -

当利用smprofile modify命令来修改特征文件时,命令行的参数与smprofile add命令的参数相同,命令中的任何新参数值都会导致相应字段的更新。下面是smprofile modify命令的一个例子:

# smprofile modify -H localhost -p xyz123 -u root -- \

-n Password Manager-d Modify user passwords

该例子通过-d参数修改了Password Manager特征文件的说明文字内容。

为了利用smprofile delete命令来删除某个特征文件,我们可以在命令行利用-n参数来指定要删除的特征文件名称。下面是smprofile delete命令的一个例子:

# smprofile add -H localhost -p xyz123 -u root -- \

-n Password Manager

5smrole

smrole命令可以执行有关角色账户的操作,它通常只是用来添加单个角色,而不是以批模式的方式来添加一组角色。Smrole命令除了执行添加、删除和修改角色账户的操作外,还可以对现有角色数据执行提取和列出操作。为此,该命令在执行时必须指定如下四个选项之一:(1add,添加一个角色账户;(2delete,删除一个角色账户;(3list,列出现有的所有角色账户;(4modify,修改某个现有角色账户。为了执行smrole adddeletemodify操作,用户必须拥有Solaris.role.write授权。但是,如果只是执行smrole list操作,则用户只需要Solaris.admin.usermgr.read授权。根据不同的命令选项,Smrole命令共有两种参数:授权参数和指定参数。Smrole命令的授权参数与smuser命令的授权参数相同。

在利用smrole add命令添加角色时,可以在命令行中传递如下参数:

-c 指定角色账户的说明,例如“System Manager”

-d 指定角色账户的主目录

-G 指明该角色账户的辅助GID,因为这里的基本GID总是sysadmin

-n 指定角色的名称

-P 指定账户的口令

-s 指定默认Shell

-u 指定账户的UID

下面是一个使用smrole add命令的例子:

smrole add -H localhost -p xyz123 -u root -- -F ”System Manager” \

-n bofh -P abc123 -G 10 -u 666

这个命令在系统中为System Manager添加了一个名为bofh的账户,该账户的口令为abc123,账户UID666,辅助GID10

当利用smrole delete命令删除角色账户时,我们只需要在命令行中通过-n参数指定要删除的角色账户名称即可。例如,在下面的命令中,我们将从localhost中删除角色账户bofh

smrole delete -H localhost -p xyz123 -u root -- -n bofh

smrole list命令可以用来显示一个不带任何参数的角色列表,该命令如下:

smrole list -H localhost -p xyz123 -u root --

当我们利用smrole modify命令修改角色账户时,命令行的参数与smrole add命令的参数相同,命令中的任何新参数值都会导致相应字段的更新。例如,如果需要将某个角色的默认Shell修改为Bourne Shell,则可以使用如下命令:

smrole update -H localhost -p xyz123 -u root -- -n walrus -s /bin/sh

#########################
另外在/usr/sadm/bin目录下运行smc可以开启Solaris Management Console这个强大的图形管理工具

Solaris10 初次使用

第一次使用Solaris10,作为一个完全新入门的新手,马上遇到了不少问题,即使使用的是SAID来安装的。
第一大问题:驱动
我的网卡和声卡连WINDOS XP 都没有内建驱动,更不用说Solaris10了。所以装驱动就是个必须的过程。我的网卡是Realtek 8169 声卡是SB600内建的那个HD什么。。。
总之,google了一下找到一个比较多驱动下载的地方:http://solaris-x86.org/software/drivers/
这里可以找到不少驱动,我需要的驱动那里连接到http://homepage2.nifty.com/mrym3/taiyodo/eng/,这个地方,于是就过去下载了。自然,接下来按照readme开始安装。。值得注意的是,/usr/ccs一开始被我看错成/usr/css了。。。无奈死。。
安装好之后使用桌面上的ip设置工具就可以了。
一些比较有用的命令:

prtconf -D可以查看硬件信息
-----------------------------------------------------------
还有个/usr/sbin/ffbconfig命令,不过我这里提示找不到文件没法运行,

据说这个命令可以查看显示器可用分辨率。
-----------------------------------------------------------
ifconfig | -a[ 4 | 6 | D ][ u | d ][ Z ]

ifconfig | -a[ 4 | 6 | D ] [ u | d ]
使用ifconfig -h查看详细信
ifconfig 网卡名 plumb up可以启用网卡。
-----------------------------------------------------------

而声卡驱动可以使用OSS

OSS,Open Sound System

是UNIX及其兼容平台的音效设备的驱动程序,起源于Linux Kernel的声卡驱动.
能支持大多数音效设备,支持UnixWare、BSD、Solaris、Linux等系统.
OSS包含一个开源的版本
和一个零售的版本
OSS 4.0官方Linux设备支持列表(*注:OSS 4.0并不支持MIDI功能,MIDI将在以后的版本提供支持) :

Devices supported both by the open source the retail OSS versions

ALI M5451
ALI M5455
AMD 786
AMD 8111
ATI High Definition Audio (SB450)
ATI High Definition Audio (SB600)
ATI IXP200
ATI IXP300
ATI IXP400
Aureal Vortex (AU8820)
Aureal Vortex Advantage (AU8810) *** NOT SUPPORTED ***
Aureal Vortex2 (AU8830)
Avance Logic ALS300
Avance Logic ALS300+
Avance Logic ALS4000
C-Media USB audio adapter
CMedia CM8338A
CMedia CM8338B
CMedia CM8738/CM8768
CMedia CMI8788
Creative Audigy2 NX USB (BETA)
Creative AudioPCI (ES1370)
Creative AudioPCI97 (ES1371/ES1373)
Creative Ectiva EV1938
Creative Sound Blaster 5.1 (Dell)
Creative Sound Blaster Audigy Platinum
Creative Sound Blaster Audigy/Audigy2
Creative Sound Blaster Audigy2 Value/Audigy4
Creative Sound Blaster Audigy2 ZS Notebook
Creative Sound Blaster Extigy (BETA)
Creative Sound Blaster Live
Creative Sound Blaster Live 1024/Platinum
Creative Sound Blaster Live 5.1/Platinum IR
Creative Sound Blaster Live family
Creative Sound Blaster MP3+ USB (BETA)
Creative Sound Blaster PCI128 (5880A)
Creative Sound Blaster PCI128 (5880B)
Creative Sound Blaster PCI128 (CT5880)
Crystal CS4280
Crystal CS4281
Crystal CS4610
Crystal CS4615
EGO SYStems RoMI/O USB MIDI interface (BETA)
ESS Allegro ES1988
ESS Canyon 3D ES1990
ESS Canyon 3D-2 ES1992
ESS Maestro-1
ESS Maestro-2
ESS Maestro-2E
ESS Maestro3 ES1998
ESS Maestro3 ES199A
ESS Solo-1
ForteMedia FM 801
Generic M Audio USB MIDI interface (BETA)
Generic USB audio/MIDI device (BETA)
Genius Sound Maker Live
Guillemot Maxi Sound MUSE
Hercules Game Theater XP
Hercules Game Theater XP+
Hercules Gamesurround MUSE Pocket (BETA)
Intel 440MX (440MX)
Intel AC97 (ESB)
Intel AC97 (ICH)
Intel AC97 (ICH1)
Intel AC97 (ICH2)
Intel AC97 (ICH3)
Intel AC97 (ICH4)
Intel AC97 (ICH5)
Intel AC97 (ICH6)
Intel AC97 (ICH7)
Intel High Definition Audio (ESB2)
Intel High Definition Audio (ICH6)
Intel High Definition Audio (ICH7)
Intel High Definition Audio (ICH8)
Intel High Definition Audio (ICH9)
Labtec LCS1040 Speaker System (BETA)
Logitec Quickcam Pro 4000 (mic) (BETA)
Logitec USB Headset 20 (BETA)
M Audio OmniStudio USB (BETA)
M Audio Oygen8 MIDI keyboard
M Audio Sonica Theater USB (BETA)
M Audio Sonica USB (BETA)
M Audio USB AudioSport Duo (BETA)
M Audio USB AudioSport Quatro (BETA)
M Audio USB MIDISPORT 1x1 (BETA)
M Audio USB MIDISPORT 2x2 (BETA)
M Audio USB MIDISPORT 8x8 (BETA)
MIDIMan DiO 2448
MSI K7T266
MSI KT3 Ultra
National Semiconductor Geode CS5530
National Semiconductor Geode SC1200
Neomagic NM2200AV
Nvidia CK8
Nvidia CK8S
Nvidia High Definition Audio (MCP51)
Nvidia High Definition Audio (MCP55)
Nvidia High Definition Audio (MCP61)
Nvidia High Definition Audio (MCP65)
Nvidia High Definition Audio (MCP67)
Nvidia MCP51
Nvidia nForce
Nvidia nForce2
Nvidia nForce3
Nvidia nForce4
OSS Input Multiplexer
OSS Transparent Virtual Mixing Architecture
OSS Virtual mixer/synth driver
OSS loopback audio driver (BETA)
Philips ToUcam Pro (mic) (BETA)
RME Digi32
RME Digi32 Pro
RME Digi32/8
RME Digi96
RME Digi96/8
RME Digi96/8 PAD
RME Digi96/8 PRO
S3 Sonic Vibes
SiS 7012
SiS 7018
SiS High Definition Audio
Sound Blaster Audigy LS / Live7.1
Terratec DMX Xfire 1024
Trident 4DWave-CX
Trident 4DWave-DX
Trident 4DWave-NX
TurtleBeach SantaCruz / VideoLogic SonicFury
ULI High Definition Audio
VIA High Definition Audio
VIA VT5432B
VIA VT8233/8235/8237
VIA VT8233A
VIA VT82C686
Yamaha DS-XG YMF724
Yamaha DS-XG YMF724F
Yamaha DS-XG YMF734
Yamaha DS-XG YMF740
Yamaha DS-XG YMF740C
Yamaha DS-XG YMF744
Yamaha DS-XG YMF754
Yamaha PSR-1K USB MIDI Keyboard (BETA)
Yamaha UX16 USB MIDI interface (BETA)

Devices supported only by retail version of OSS

Audiotrak Prodigy 7.1
Conexant Riptide
Conexant Riptide
Ego Systems Juli@ (NOT SUPPORTED YET)
Generic ENVY24 based device
Generic ENVY24HT based sound card
Lynx AES16 Studio Interface
Lynx AES16-SRC Studio Interface
Lynx-L22 Studio Interface
LynxONE Studio Interface
LynxTWO-A Studio Interface
LynxTWO-B Studio Interface
LynxTWO-C Studio Interface
M Audio Audiophile 192
M Audio Audiophile 2496
M Audio Delta 1010
M Audio Delta 1010LT
M Audio Delta 410
M Audio Delta 44
M Audio Delta 66
M Audio Delta DiO 2496
M Audio Delta TDIF
M Audio Revolution 5.1
M Audio Revolution 7.1
RME Hammerfall (not supported yet)
Sonorus STUDI/O
Terratec Aureon 7.1 Sky
Terratec Aureon 7.1 Space
Terratec Aureon 7.1 Universe
Terratec DMX 6Fire
Terratec EWS88D
Terratec EWS88MT
Terratec EWX 24/96
Terratec PHASE 28


因为是pkg打包的文件,所以这个非常容易安装,一句话ok:pkgadd -d oss-solaris-v4.0-123-i386.pkg



装好之后我们自然得试试效果,所以就挂载windows的分区吧。
Solaris10默认就能够支持fat32文件系统。所以先cd /dev/dsk
之后ls一下。
能看到硬盘的详情:
c0d0p0 c0d0s15 c1t0d0p3 c1t0d0s4 c2t0d0s1 c2t0d0s7 c3t0d0s12
c0d0p1 c0d0s2 c1t0d0p4 c1t0d0s5 c2t0d0s10 c2t0d0s8 c3t0d0s13
这里c:控制器号 t:控制器地址 d:磁盘号 s:片号 p:分区号,
所以windows下的分区肯定不会有片号,于是我们就可以从中简单的查到要挂载的名称,之后:
mount -f pcfs /dev/dsk/c0d0p0:1 /mountdir
-f 背后是文件系统类型。pcfs就是我们要挂载的fat32分区, 最后那个/mountdir是挂载点。
而如果要挂载ntfs的话需要装软件
第一个连接是说明:
http://www.genunix.org/distributions/belenix_site/binfiles/README.FSWfsmisc.txt
http://www.genunix.org/distributions/belenix_site/binfiles/FSWfsmisc.tar.gz
http://www.genunix.org/distributions/belenix_site/binfiles/FSWpart.tar.gz
要查看信息用prtpart /dev/dsk/c0d0p0 -ldevs就可以
挂载的话同样mount -F ntfs /dev/dsk/c0d0p0 -ldevs
卸下的话用/usr/bin/xumount <mountpoint>
其实测试了以后发现声卡虽然有了但是还是没声音,也就是说那个驱动没起作用。
另外。因为显卡没有有效的驱动,所以播放视频也效果不佳,最后还是决定放弃尝试,Solaris看起来不大适合多媒体娱乐。。。

----------------------------------------------------------------------------------------
更新:
当时其实并不是没有声音,只是奇怪我用mplayer播放只有2秒钟的声音测试,但是不出声,现在换成音乐就没问题了。
另外,上面给出的命令不标准使得我这次使用查看的时候还真不能立马可以用上,更新一下:
对于需要挂载NTFS分区,我们可以运行prtpart /dev/dsk/c0d0p0 -ldevs
来查看,在我这里这个命令会列出分区信息:
Fdisk information for device /dev/dsk/c0d0p0

** NOTE **
/dev/dsk/c0d0p0 - Physical device referring to entire physical disk
/dev/dsk/c0d0p1 - p4 - Physical devices referring to the 4 primary partitions
/dev/dsk/c0d0p5 ... - Virtual devices referring to logical partitions

Virtual device names can be used to access EXT2 and NTFS on logical partitions

/dev/dsk/c0d0p1 WIN95 Extended(LBA)
/dev/dsk/c0d0p5 IFS: NTFS
/dev/dsk/c0d0p6 IFS: NTFS
/dev/dsk/c0d0p7 IFS: NTFS
/dev/dsk/c0d0p8 IFS: NTFS

/dev/dsk/c0d0p2 WIN95 FAT32(LBA)
/dev/dsk/c0d0p3 ShagOS swap
/dev/dsk/c0d0p4 Solaris x86

之后用于挂载分区的命令应该是:

mount -F ntfs <logical device name> <mountpoint>
卸载分区的命令应该使用:

/usr/bin/xumount <logical device name>
或者 /usr/bin/xumount <mountpoint>
要查看使用这个命令挂载的分区的信息可以用:
/usr/bin/xlsmounts

2008-02-22

Solaris10上马

  开学了,按计划准备开始进入学习java的过程,虽然目前C++不算学到,但是因为规划问题,Java才是目前必须学的,自然,Solaris 10也是我的目标,去年11月有幸SUN的校园技术日在我学校上了一次,领到了一份SAID盘,其实我觉得能获得原始安装盘更好,不过这也没办法。
  第一次装的时候问题多多:无法启动图形界面安装,直接在命令行下复制,装好后自然也进不了,所以我自然认为和那个Ubuntu一样,不支持我的X1250,当然,那次只是随便装下,没空继续,就删了,这次我看了一个下午资料,本来打算搞定这个问题的,不过发现,莫名其妙这次居然都正常。
  吃了顿饭之后就装好了,这份SAID虽然没有安装盘的机能,不过各种软件带了不少,还是挺满意的,接下来就是我的问题了。可怜的Realtek的网卡声卡都没驱动,用不了。。。当然,连XP下刚装好都没有Solaris下怎么可能有呢?
  自然我把主板的光盘翻出来希望找找,果然有个Novell驱动,我猜应该也能支持Solaris吧。不过里面的芯片类型就不懂了,忘记了,因为刚用不熟,所以保险还是启动到XP下用软件查看吧。
  启动至XP后无奈的发现死机,重启来过,又死,无奈,而且最可恶的是鼠标能动,键盘一案就死机,无奈,makeactive windows分区,来过,这次没问题了。键盘能用,但是。。。鼠标有不动了。。。。还后重启下解决。
  自然,发现个严重问题,逻辑分区的盘符全乱了。PM提示分区表错误11111,用它修复吧。
之后,很明显,再设置solaris分区为active后重启,grub那个有选项的页面没了。。。只有个grub>让我输命令。。。。最可恶的是找了半天cat也好find也好。都没能解决问题,这里引用个重要的东西:网上搜到的一份solaris 10 的menu.lst的Solaris 10 部分的内容,等我下次重新正确装一次之后更新标准版。。
#---------- ADDED BY BOOTADM - DO NOT EDIT ----------
title Solaris Nevada snv_60 X86
kernel$ /platform/i86pc/kernel/$ISADIR/unix
module$ /platform/i86pc/$ISADIR/boot_archive
#---------------------END BOOTADM--------------------
#---------- ADDED BY BOOTADM - DO NOT EDIT ----------
title Solaris failsafe
kernel /boot/platform/i86pc/kernel/unix -s
module /boot/x86.miniroot-safe
#---------------------END BOOTADM--------------------

当然,你可以想到,如果这样就结束的话我现在就可以去吃夜宵了,kernel的时候果然出现了万恶的Grub的Error 17.不能挂载分区。。。。。
网上能搜到的都是ubuntu的问题和解决方案。。。话说它的渗透力好大啊。。。恩。解决方案是ubuntu的livecd启动。。。很可惜手头没有标准Solaris 10和类似的东西的启动盘。。。
没办法。只能用wingrub来重装grub设置过了。。。

下载地址:
http://grub4dos.sourceforge.net
或:
http://fedora.linuxsir.org/main/files/WINGRB0206.EXE

用法的话,参见http://fedora.linuxsir.org/main/?q=node/37这篇文章,或者像我这样。
装好后,base setup 选c盘,主菜单编辑好后再
tool-》install grub那里用第一个点install就ok。
----------------------------------------------
很遗憾,虽然尽可能的尝试了,但是我的XP奇怪的要死。无奈只要用grub引导一定会在启动到登陆界面的时候死机。。而Solaris,在之后的修改中也无法启动,这次换error 18,根据在sun的网站上查到的资料,貌似只有SUN的Grub能够识别那个NFS,不知道是不是这个原因。网上修复的方法要光盘,很遗憾我只有SAID,于是只能重装。。。

2008-02-16

Ubuntu日常使用:音频转换

  很明显的是,如果需要平常也使用Ubuntu的话肯定是离不开多媒体应用的,播放器方面,mplayer和大多数一般的音频播放器以及可以解决,不过另外一个问题在于,从CD抓取音轨或者
要传到MP3上去放的话经常涉及格式转换,目前没有找到比较好的图形界面程序,于是只能用命令行程序了。
4]u[N7-/ 首先是工具:
s3U,YnJ' MP3 相关工具: lame
g?JK51# OGG 相关工具: vorbis-tools
 �K6x+ APE 相关工具: mac
&~N%O�8r FLAC 相关工具: flac
88veE!@z WAV 相关工具: shntool
^;w M1CA BIN/CUE镜像分割: bchunk 或mp3splt

我现在遇到的问题是需要把我硬盘上的ogg转成mp3,查到的解决方案中目前可用的是:
ogg→wav→mp3
这里需要前两个工具。
lame直接下载编译安装,vorbis-tools用sudo apt-get install vorbis-tools
装好后就可以用命令转换了。
命令格式:
-------------------------------$+.Vei+Gx
3 q6Z^!r mp3→wav
FDtrM+2;d
7EPI7]0 lame --decode <输入_mp3文件> <输出_wav文件>
G}@*,1]_ -------------------
}t6FnVG@Sp wav→mp3
-p"+0.y
3D<&2M1 lame -b <比特率> <输入_wav文件> <输出_mp3文件> //CBR
z7/*}Z_ shntool conv -o "cust ext=mp3 lame -b <比特率> - %f" <输入_wav文件>
2C)4wn4  lame -h -v -b <比特率> <输入_wav文件> <输出_mp3文件> //VBR
-------------------
RP4 V) [k_r4/z

,e[\1WIT ogg→wav
3NgetPDf
X>|Q@s(c8 oggdec <输出_ogg文件> -o <输入_wav文件>
?aP7Jb~" -------------------
R\^RzC.W wav→ogg
qt"(m!y>)
CWk ? oggenc [-b <比特率>] <输入_wav文件> -o <输出_ogg文件>
8Dx d,e Tdk@36yt -------------------
%57ub5 @ ape→wav
&f_$=ID=
JNqCd5# mac <输入_ape文件> <输出_wav文件> -d
YR|%oM}' -------------------
#0*`nWy wav→ape
@B +D%Z;<
Mr>BuP  mac <输入_wav文件> <输出_ape文件> -c <压缩比率, 默认为 2000>
Gg-------------------
V/;<9q#3>@RMgGJ flac→wav
{jK|?t('c
.VO}PhEJ5 flac -d <输入_flac文件> -o <输出_wav文件>
_T[ nD} -------------------
3)dg�@g$X wav→flac
=>Bm tjH 1
$A d_9 flac <输入_wav文件> <输出_flac文件> -<压缩比率 1-8 , 默认为 5>
^Q{l\=?O b Fb1@4mn -------------------
"jD'7BM2M 分割APE/CUE镜像
\Wk/qRZ(=
@_UQ{N i) 先解码成WAV格式
'(24D| mac CDImage.ape CDImage.wav -d
I Ths OI=
}vnisCH&B 再进行切割
x Q0bl}7 bchunk -w CDImage.wav CDImage.cue output
}"\6q n2
5_~)^J:s shnsplit -f CDImage.cue CDImage.wav
A~z8Jeg!
H{jTqlt ii) 也可以直接切割
~kIm�yC shnsplit -f CDImage.cue -i ape CDImage.ape
Mz y�e?}
|5 nQ iii) 切割并转换到其他格式(FLAC/mp3)
aD7X7Lj] shnsplit -f CDImage.cue -i ape -o flac CDImage.ape
C14Q}H4)
*R=}zguR)I shnsplit -f CDImage.cue -i ape \
]"+ H $1 -o "cust ext=mp3 lame -b 320 - %f" CDImage.ape
M)KaVW-9J

I0Z0P5# ------------------
q\n3Ch ape↔ FLAC
jBe"w#]P
=j @gk] shnconv -i ape -o flac CDImage.ape
shnconv -i flac -o ape CDImage.flac
---------------------------------
使用这些就可以完成转换了。不过没有gui效率比较低下