??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧洲国产日本综合,99久久www免费,狠狠v欧美ⅴ日韩v亚洲v大胸http://www.aygfsteel.com/davidgw/category/34268.htmlMiLifezh-cnThu, 22 Jan 2009 16:47:13 GMTThu, 22 Jan 2009 16:47:13 GMT60Linux 关于动态链接库以及(qing)静态链接库的一些概?/title><link>http://www.aygfsteel.com/davidgw/archive/2009/01/21/252230.html</link><dc:creator>Picasso</dc:creator><author>Picasso</author><pubDate>Wed, 21 Jan 2009 07:56:00 GMT</pubDate><guid>http://www.aygfsteel.com/davidgw/archive/2009/01/21/252230.html</guid><wfw:comment>http://www.aygfsteel.com/davidgw/comments/252230.html</wfw:comment><comments>http://www.aygfsteel.com/davidgw/archive/2009/01/21/252230.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/davidgw/comments/commentRss/252230.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/davidgw/services/trackbacks/252230.html</trackback:ping><description><![CDATA[From http://os.rdxx.com/Linux/LinuxRudiment/2008/5/17017197011.shtml<br /> <br /> 库有动态与静态两U,动态通常?so为后~Q静态用.a为后~。例如:(x)libhello.so libhello.a <br /> Z在同一pȝ中用不同版本的库,可以在库文g名后加上版本号ؓ(f)后缀,例如Q?libhello.so.1.0,׃E序q接默认?so为文件后~名。所以ؓ(f)了用这些库Q通常使用建立W号q接的方式?<br /> ln -s libhello.so.1.0 libhello.so.1 <br /> ln -s libhello.so.1 libhello.so <br /> 使用?<br /> ?要用静态的E序库时Q连接器?x)找出程序所需的函敎ͼ然后它们拷贝到执行文gQ由于这U拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。然 而,对动态库而言Q就不是q样。动态库?x)在执行E序内留下一个标?#8216;指明当程序执行时Q首先必蝲入这个库。由于动态库节省I间Qlinux下进行连接的 ~省操作是首先连接动态库Q也是_(d)如果同时存在静态和动态库Q不特别指定的话Q将与动态库相连接?<br /> 现在假设有一个叫hello的程序开发包Q它提供一个静态库libhello.a 一个动态库libhello.so,一个头文ghello.h,头文件中提供sayhello()q个函数 <br /> /* hello.h */ <br /> void sayhello(); <br /> 另外q有一些说明文档。这一个典型的E序开发包l构 <br /> 1.与动态库q接 <br /> linux默认的就是与动态库q接Q下面这D늨序testlib.c使用hello库中的sayhello()函数 <br /> /*testlib.c*/ <br /> #include  <br /> #include  <br /> int main() <br /> { <br /> sayhello(); <br /> return 0; <br /> } <br /> 使用如下命o(h)q行~译 <br /> $gcc -c testlib.c -o testlib.o <br /> 用如下命令连接:(x) <br /> $gcc testlib.o -lhello -o testlib <br /> 在连接时要注意,假设libhello.o 和libhello.a都在~省的库搜烦路径?usr/lib下,如果在其它位|要加上-L参数 <br /> 与与静态库q接ȝ一些,主要是参数问题。还是上面的例子Q?<br /> $gcc testlib.o -o testlib -WI,-Bstatic -lhello <br /> 注:(x)q个特别?-WIQ?Bstatic"参数Q实际上是传l了q接器ld. <br /> 指示它与静态库q接Q如果系l中只有静态库当然׃需要这个参C?<br /> 如果要和多个库相q接Q而每个库的连接方式不一P比如上面的程序既要和libhelloq行静态连接,又要和libbyeq行动态连接,其命令应为:(x) <br /> $gcc testlib.o -o testlib -WI,-Bstatic -lhello -WI,-Bdynamic -lbye <br /> 3.动态库的\径问?<br /> Z让执行程序顺利找到动态库Q有三种Ҏ(gu)Q?<br /> (1)把库拯?usr/lib?lib目录下?<br /> (2)在LD_LIBRARY_PATH环境变量中加上库所在\径。例如动态库libhello.so?home/ting/lib目录下,以bashZQ用命令:(x) <br /> $export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ting/lib <br /> (3) 修改/etc/ld.so.conf文gQ把库所在的路径加到文g末尾Qƈ执行ldconfigh。这P加入的目录下的所有库文g都可见?<br /> 4.查看库中的符?<br /> ?时候可能需要查看一个库中到底有哪些函数Qnm命o(h)可以打印出库中的涉及(qing)到的所有符受库既可以是静态的也可以是动态的。nm列出的符h很多Q常见的?三种Q一U是在库中被调用Q但q没有在库中定义(表明需要其他库支持)Q用U表示Q一U是库中定义的函敎ͼ用T表示Q这是最常见的;另外一U是所谓的“??#8221;W号Q它们虽然在库中被定义,但是可能被其他库中的同名W号覆盖Q用W表示。例如,假设开发者希望知道上央提到的hello库中是否定义?printf(): <br /> $nm libhello.so |grep printf <br /> U printf <br /> U表示W号printf被引用,但是q没有在函数内定义,由此可以推断Q要正常使用hello库,必须有其它库支持Q再使用ldd命o(h)查看hello依赖于哪些库Q?<br /> $ldd hello <br /> libc.so.6=>/lib/libc.so.6(0x400la000) <br /> /lib/ld-linux.so.2=>/lib/ld-linux.so.2 (0x40000000) <br /> 从上面的l果可以l箋查看printf最l在哪里被定义,有兴可以go on <br /> 生成?<br /> W一步要把源代码~绎成目标代码。以下面的代码ؓ(f)例,生成上面用到的hello库:(x) <br /> <br /> /* hello.c */ <br /> #include  <br /> void sayhello() <br /> { <br /> printf("hello,world\n"); <br /> } <br /> 用gcc~绎该文Ӟ在编l时可以使用M全法的编l参敎ͼ例如-g加入调试代码{:(x) <br /> gcc -c hello.c -o hello.o <br /> 1.q接成静态库 <br /> q接成静态库使用ar命o(h)Q其实ar是archive的意?<br /> $ar cqs libhello.a hello.o <br /> 2.q接成动态库 <br /> 生成动态库用gcc来完成,׃可能存在多个版本Q因此通常指定版本P(x) <br /> $gcc -shared -Wl,-soname,libhello.so.1 -o libhello.so.1.0 hello.o <br /> 另外再徏立两个符可接:(x) <br /> $ln -s libhello.so.1.0 libhello.so.1 <br /> $ln -s libhello.so.1 libhello.so <br /> q样一个libhello的动态连接库q成了。最重要的是传gcc -shared 参数使其生成是动态库而不是普通执行程序?<br /> -Wl 表示后面的参C是-soname,libhello.so.1直接传给q接器ldq行处理。实际上Q每一个库都有一个sonameQ当q接器发现它?在查扄E序库中有这样一个名Uͼq接器便?x)将soname嵌入q结中的二进制文件内Q而不是它正在q行的实际文件名Q在E序执行期间Q程序会(x)查找拥有 soname名字的文Ӟ而不是库的文件名Q换句话_(d)soname是库的区分标志?<br /> q样做的目的主要是允许系l中多个版本的库文g共存Q习(fn)惯上在命名库文g的时候通常与soname相同 <br /> libxxxx.so.major.minor <br /> 其中Qxxxx是库的名字,major是主版本Pminor 是次版本?<br /> <br /> <br /> <br /> =====================<br /> <br /> 摘要Q动态链接库技术实现和设计E序常用的技术,在Windows和Linuxpȝ中都有动态库的概念,采用动态库可以有效的减程序大,节省I间Q提高效率,增加E序的可扩展性,便于模块化管理。但不同操作pȝ的动态库׃格式 不同Q在需要不同操作系l调用时需要进行动态库E序UL。本文分析和比较了两U操作系l动态库技术,q给ZVisual C++~制的动态库UL到Linux上的Ҏ(gu)和经验?br />   <br />   <strong>1、引a</strong><br />   <br />   动态库QDynamic Link Library abbrQDLLQ技术是E序设计中经帔R用的技术。其目的减少E序的大,节省I间Q提高效率,h很高的灵zL。采用动态库技术对于升UY件版本更加容易。与静态库QStatic Link LibraryQ不同,动态库里面的函C是执行程序本w的一部分Q而是Ҏ(gu)执行需要按需载入Q其执行代码可以同时在多个程序中׃n?br />   <br />   在Windows和Linux操作pȝ中,都可采用q种方式q行软g设计Q但他们的调用方式以?qing)程序编制方式不相同。本文首先分析了在这两种操作pȝ中通常采用的动态库调用Ҏ(gu)以及(qing)E序~制方式Q然后分析比较了q两U方式的不同之处Q最后根据实际移植程序经验,介绍了将VC++~制的Windows动态库UL到Linux下的Ҏ(gu)?br />   <br />   <strong>2、动态库技?/strong><br />   <br />   2.1 Windows动态库技?br />   <br />   动态链接库是实现Windows应用E序׃n资源、节省内存空间、提高用效率的一个重要技术手Dc(din)常见的动态库包含外部函数和资源,也有一些动态库只包含资源,如Windows字体资源文gQ称之ؓ(f)资源动态链接库。通常动态库?dllQ?drv?fon{作为后~。相应的windows静态库通常?libl尾QW(xu)indows自己将一些主要的pȝ功能以动态库模块的Ş式实现?br />   <br />   Windows动态库在运行时被系l加载到q程的虚拟空间中Q用从调用q程的虚拟地址I间分配的内存,成ؓ(f)调用q程的一部分。DLL也只能被该进E的U程所讉K。DLL的句柄可以被调用q程使用Q调用进E的句柄可以被DLL使用。DLL模块中包含各U导出函敎ͼ用于向外界提供服务。DLL可以有自q数据D,但没有自q堆栈Q用与调用它的应用E序相同的堆栈模式;一个DLL在内存中只有一个实例;DLL实现了代码封装性;DLL的编制与具体的编E语a?qing)编译器无关Q可以通过DLL来实现؜合语a~程。DLL函数中的代码所创徏的Q何对象(包括变量Q都归调用它的线E或q程所有?br />   <br />   Ҏ(gu)调用方式的不同,对动态库的调用可分ؓ(f)静态调用方式和动态调用方式?br />   <br />   (1)静态调用,也称为隐式调用,q译系l完成对DLL的加载和应用E序l束时DLL卸蝲的编码(Windowspȝ负责对DLL调用ơ数的计敎ͼQ调用方式简单,能够满通常的要求。通常采用的调用方式是把生动态连接库时生的.LIB文g加入到应用程序的工程中,想用DLL中的函数Ӟ只须在源文g中声明一下?LIB文g包含了每一个DLL导出函数的符号名和可选择的标识号以及(qing)DLL文g名,不含有实际的代码。Lib文g包含的信息进入到生成的应用程序中Q被调用的DLL文g?x)在应用E序加蝲时同时加载在到内存中?br />   <br />   (2)动态调用,x式调用方式,是由~程者用API函数加蝲和卸载DLL来达到调用DLL的目的,比较复杂Q但能更加有效地使用内存Q是~制大型应用E序时的重要方式。在Windowspȝ中,与动态库调用有关的函数包括:(x)<br />   <br />   ①LoadLibraryQ或MFC 的AfxLoadLibraryQ,装蝲动态库?br />   ②GetProcAddressQ获取要引入的函敎ͼ符号名或标识号转换为DLL内部地址?br />   ③FreeLibraryQ或MFC的AfxFreeLibraryQ,释放动态链接库?br />   <br />   在windows中创建动态库也非常方便和单。在Visual C++中,可以创徏不用MFC而直接用C语言写的DLLE序Q也可以创徏ZMFCcd的DLLE序。每一个DLL必须有一个入口点Q在VC++中,DllMain是一个缺省的入口函数。DllMain负责初始?Initialization)和结?Termination)工作。动态库输出函数也有两种U定Q分别是Z调用U定和名字修饰约定。DLLE序定义的函数分为内部函数和导出函数Q动态库导出的函C其它E序模块调用。通常可以有下面几U方法导出函敎ͼ(x)<br />   <br />   ①采用模块定义文件的EXPORT部分指定要输入的函数或者变量?br />   ②用MFC提供的修饰符号_declspec(dllexport)?br />   ③以命o(h)行方式,采用/EXPORT命o(h)行输出有兛_数?br />   <br />   在windows动态库中,有时需要编写模块定义文?.DEF)Q它是用于描qDLL属性的模块语句l成的文本文件?br />   <br />   2.2 Linux׃n对象技?br />   <br />   在Linux操作pȝ中,采用了很多共享对象技术(Shared ObjectQ,虽然它和W(xu)indows里的动态库相对应,但它q不UCؓ(f)动态库。相应的׃n对象文g?so作ؓ(f)后缀Qؓ(f)了方便,在本文中Q对该概念不q行专门区分。Linuxpȝ?lib以及(qing)标准囑Ş界面?usr/X11R6/lib{目录里面,有许多以sol尾的共享对象。同P在Linux下,也有静态函数库q种调用方式Q相应的后缀?al束。Linux采用该共享对象技术以方便E序间共享,节省E序占有I间Q增加程序的可扩展性和灉|性。Linuxq可以通过LD-PRELOAD变量让开发h员可以用自qE序库中的模块来替换pȝ模块?br />   <br />   同W(xu)indowspȝ一P在Linux中创建和使用动态库是比较容易的事情Q在~译函数库源E序时加?shared选项卛_Q这h生成的执行程序就是动态链接库。通常q样的程序以so为后~Q在Linux动态库E序设计q程中,通常程是编写用L(fng)接口文gQ通常?h文gQ编写实际的函数文gQ以.c?cpp为后~Q再~写makefile文g。对于较?yu)的动态库E序可以不用如此Q但q样设计使程序更加合理?br />   <br />   ~译生成动态连接库后,q而可以在E序中进行调用。在Linux中,可以采用多种调用方式Q同W(xu)indows的系l目?..\system32{?一P可以动态库文g拯?lib目录或者在/lib目录里面建立W号q接Q以便所有用户用。下面介lLinux调用动态库l常使用的函敎ͼ但在使用动态库Ӟ源程序必d含dlfcn.h头文Ӟ该文件定义调用动态链接库的函数的原型?br />   <br />   (1)_打开动态链接库QdlopenQ函数原型void *dlopen (const char *filename, int flag);<br />   dlopen用于打开指定名字(filename)的动态链接库Qƈq回操作句柄?br />   <br />   (2)取函数执行地址QdlsymQ函数原型ؓ(f): void *dlsym(void *handle, char *symbol);<br />   dlsymҎ(gu)动态链接库操作句柄(handle)与符?symbol)Q返回符号对应的函数的执行代码地址?br />   <br />   (3)关闭动态链接库QdlcloseQ函数原型ؓ(f): int dlclose (void *handle);<br />   dlclose用于关闭指定句柄的动态链接库Q只有当此动态链接库的用计Cؓ(f)0?才会(x)真正被系l卸载?br />   <br />   (4)动态库错误函数QdlerrorQ函数原型ؓ(f): const char *dlerror(void); 当动态链接库操作函数执行p|Ӟdlerror可以q回出错信息Q返回gؓ(f)NULL时表C操作函数执行成功?br />   <br />   在取到函数执行地址后,可以在动态库的用程序里面根据动态库提供的函数接口声明调用动态库里面的函数。在~写调用动态库的程序的makefile文gӞ需要加入编译选项-rdynamic?ldl?br />   <br />   除了采用q种方式~写和调用动态库之外QLinux操作pȝ也提供了一U更为方便的动态库调用方式Q也方便了其它程序调用,q种方式与Windowspȝ的隐式链接类伹{其动态库命名方式?#8220;lib*.so.*”。在q个命名方式中,W一?表示动态链接库的库名,W二?通常表示该动态库的版本号Q也可以没有版本受在q种调用方式中,需要维护动态链接库的配|文?etc/ld.so.conf来让动态链接库为系l所使用Q通常动态链接库所在目录名q加到动态链接库配置文g中。如hX windowH口pȝ发行版该文g中都h/usr/X11R6/libQ它指向X windowH口pȝ的动态链接库所在目录。ؓ(f)了动态链接库能ؓ(f)pȝ所׃nQ还需q行动态链接库的管理命?/sbin/ldconfig。在~译所引用的动态库Ӟ可以在gcc采用 ?l?L选项或直接引用所需的动态链接库方式q行~译。在Linux里面Q可以采用ldd命o(h)来检查程序依赖共享库?br />   <br />   <strong>3、两U系l动态库比较分析</strong><br />   <br />   Windows和Linux采用动态链接库技术目的是基本一致的Q但׃操作pȝ的不同,他们在许多方面还是不相同,下面从以下几个方面进行阐q?br />   <br />   (1)动态库E序~写Q在Windowspȝ下的执行文g格式是PE格式Q动态库需要一个DllMain函数作ؓ(f)初始化的人口Q通常在导出函数的声明旉要有_declspec(dllexport)关键字。Linux下的gcc~译的执行文仉认是ELF格式Q不需要初始化入口Q亦不需要到函数做特别声明,~写比较方便?br />   <br />   (2)动态库~译Q在windowspȝ下面Q有方便的调试编译环境,通常不用自己ȝ写makefile文gQ但在linux下面Q需要自己动手去~写makefile文gQ因此,必须掌握一定的makefile~写技巧,另外Q通常Linux~译规则相对严格?br />   <br />   (3)动态库调用斚wQW(xu)indows和Linux对其下编制的动态库都可以采用显式调用或隐式调用Q但具体的调用方式也不尽相同?br />   <br />   (4)动态库输出函数查看Q在Windows中,有许多工具和软g可以q行查看DLL中所输出的函敎ͼ例如命o(h)行方式的dumpbin以及(qing)VC++工具中的DEPENDSE序。在Linuxpȝ中通常采用nm来查看输出函敎ͼ也可以用ldd查看E序隐式链接的共享对象文件?br />   <br />   (5)Ҏ(gu)作系l的依赖Q这两种动态库q行依赖于各自的操作pȝQ不能跨q_使用。因此,对于实现相同功能的动态库Q必Mؓ(f)两种不同的操作系l提供不同的动态库版本?br />   <br />   <strong>4、动态库ULҎ(gu)</strong><br />   <br />   如果要编制在两个pȝ中都能用的动态链接库Q通常?x)先选择在Windows的VC++提供的调试环境中完成初始的开发,?br /> <div></div> <br /> <br /> <br /> <img src ="http://www.aygfsteel.com/davidgw/aggbug/252230.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/davidgw/" target="_blank">Picasso</a> 2009-01-21 15:56 <a href="http://www.aygfsteel.com/davidgw/archive/2009/01/21/252230.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转脓(chung)QORA-01034 ORA-27121 错误http://www.aygfsteel.com/davidgw/archive/2009/01/11/250858.htmlPicassoPicassoSun, 11 Jan 2009 06:55:00 GMThttp://www.aygfsteel.com/davidgw/archive/2009/01/11/250858.htmlhttp://www.aygfsteel.com/davidgw/comments/250858.htmlhttp://www.aygfsteel.com/davidgw/archive/2009/01/11/250858.html#Feedback0http://www.aygfsteel.com/davidgw/comments/commentRss/250858.htmlhttp://www.aygfsteel.com/davidgw/services/trackbacks/250858.htmlORA-01034: ORACLE not available
ORA-27121: unable to determine size of shared memory segment
Linux Error: 13: Permission denied

主要是因为oracle安装E序没有loracleq个可执行程序设|正的setuid。这栯|一下:(x)

$ cd $ORACLE_HOME/bin
$ chmod 6751 oracle

l果cMq样p了?/font>

$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 oracle oinstall 23352783 Aug 14 2001 /home/oracle/app/oracle/product/8.1.6/bin/oracle


Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=

ORA-01034 ORA-27121 13: Permission denied

ORA-01034

ORA-27121

Error: 13: Permission denied

双实?两个实例

日月明王      http://sunmoonking.spaces.live.com

环境               
HP-UX jmc080 B.11.11 U 9000/800 1805586595 unlimited-user license
 
SQL*Plus: Release 9.2.0.1.0 - Production on Mon Oct 16 16:48:45 2006
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 – Production
装两个数据库db1?/span>db2,分别有两个用?/span>db1user?/span>db2userQ分别属?/span>ORADBA1,ORADBA2,共同属于oragroup安装l。装好两个库后出现如下错?/span>
现象
SQL> connect db2user/db2user@db2
ERROR:
ORA-01034: ORACLE not available
ORA-27121: unable to determine size of shared memory segment
HP-UX Error: 13: Permission denied
此时
$ ls -alt $ORACLE_HOME/bin/oracle
 
 Warning! One or more of your selected locales are not available.
 Please invoke the commands "locale" and "locale -a" to verify your
 selections and the available locales.
 
 Continuing processing using the "C" locale.
 
-rwsrwsrwx   1 oracle1    oragroup   77765688 Sep  7 16:00 /usr/sap3/oracle/product/920/bin/oracle    Q原权限?/span>6751Q?/span>
如果?/span>/usr/sap3/oracle/product/920/bin/oracle的所有者改?/span>oracle2则可以启?/span>DB2Q但?/span>DB1却出现同样错误,无法q接。于是判断是某个文g的权限不寏V于是一步一步检查?/span>
看谁拥有内存
$ ipcs -a
IPC status from /dev/kmem as of Mon Oct 16 18:05:13 2006
T         ID     KEY        MODE        OWNER     GROUP   CREATOR    CGROUP CBYTES  QNUM QBYTES LSPID LRPID   STIME    RTIME    CTIME
Message Queues:
q          0 0x3c200731 -Rrw--w--w-      root      root      root      root     0     0  65535     0     0 no-entry no-entry 19:46:07
q          1 0x3e200731 --rw-r--r--      root      root      root      root     0     0    264     0     0 no-entry no-entry 19:46:07
T         ID     KEY        MODE        OWNER     GROUP   CREATOR    CGROUP NATTCH      SEGSZ  CPID  LPID   ATIME    DTIME    CTIME
Shared Memory:
m          0 0x412007a8 --rw-rw-rw-      root      root      root      root      0        348   607   607 19:46:17 19:46:17 19:46:11
m          1 0x4e0c0002 --rw-rw-rw-      root      root      root      root      1      61760   607   607 19:46:13 19:46:17 19:46:11
m          2 0x411809a4 --rw-rw-rw-      root      root      root      root      1       8192   607   619 19:46:13 19:46:11 19:46:11
m          3 0x30203ebc --rw-rw-rw-      root      root      root      root      2    1048576  1282  1302 19:49:19 no-entry 19:48:40
m      17412 0x5e14045d --rw-------      root      root      root      root      1        512  1667  1667 19:49:13 no-entry 19:49:13
m     312325 0x7bf2fe68 --rw-------   oracle1     users   oracle1     users     13  873955328 20914 22016 18:04:49 18:04:49 16:22:30
m       4102 0x36ba48e8 --rw-rw----   oracle2     users   oracle2     users     14  706183168 21014 21991 18:03:37 18:03:37 16:26:16
T         ID     KEY        MODE        OWNER     GROUP   CREATOR    CGROUP NSEMS   OTIME    CTIME
Semaphores:
s          0 0x412007a8 --ra-ra-ra-      root      root      root      root     1 19:46:17 19:46:11
s          1 0x4e0c0002 --ra-ra-ra-      root      root      root      root     2 19:46:13 19:46:11
s          2 0x411809a4 --ra-ra-ra-      root      root      root      root     2 no-entry 19:46:11
s          3 0x00446f6e --ra-r--r--      root      root      root      root     1 no-entry 19:46:50
s          4 0x00446f6d --ra-r--r--      root      root      root      root     1 no-entry 19:46:50
s          5 0x01090522 --ra-r--r--      root      root      root      root     1 no-entry 19:47:09
s          6 0x41207339 --ra-ra-ra-      root      root      root      root     1 19:48:35 19:48:35
s          7 0x31203ebc --ra-ra-ra-      root      root      root      root     1 19:49:19 19:48:40
s          8 0x611804f5 --ra-ra-ra-      root      root      root      root     1 19:53:03 19:49:04
s          9 0x731804f5 --ra-ra-ra-      root      root      root      root     1 19:59:47 19:49:04
s         10 0x701804f5 --ra-ra-ra-      root      root      root      root     1 19:53:43 19:49:04
s         11 0x691804f5 --ra-ra-ra-      root      root      root      root     1 19:53:01 19:49:04
s         12 0x751804f5 --ra-ra-ra-      root      root      root      root     1 19:49:04 19:49:04
s         13 0x631804f5 --ra-ra-ra-      root      root      root      root     1 19:49:04 19:49:04
s         14 0x641804f5 --ra-ra-ra-      root      root      root      root     1 19:53:04 19:49:04
s         15 0x661804f5 --ra-ra-ra-      root      root      root      root     1 no-entry 19:49:04
s         16 0x6c1804f5 --ra-ra-ra-      root      root      root      root     1 19:53:03 19:49:04
s         17 0x6d1804f5 --ra-ra-ra-      root      root      root      root     1 19:59:47 19:49:04
s         18 0x6f1804f5 --ra-ra-ra-      root      root      root      root     1 no-entry 19:49:04
s         19 0x410c01e0 --ra-ra-ra-      root      root      root      root     1 19:49:09 19:49:09
s         20 0x00000001 --ra-ra-ra-      root      root      root      root     1 19:49:49 19:49:13
s         21 0x4528e5bf --ra-ra-ra-      root      root      root      root     1 no-entry 19:49:19
s         22 0x4528e5c0 --ra-ra-ra-      root      root      root      root     1 19:49:19 19:49:19
s         23 0x521804f5 --ra-ra-ra-      root      root      root      root     1 19:59:47 19:53:04
s     182624 0xfc6c0898 --ra-------   oracle1     users   oracle1     users   154 18:05:06 16:22:32
s      49825 0xa01e08b0 --ra-ra----   oracle2     users   oracle2     users   154 18:04:44 16:26:17
没看Z么明N题?/span>
首先讄UMAKS 000
在设|?/span>/var/opt/oracle/oratab?/span>
DB1:/usr/sap3/oracle/product/920:Y
DB2:/usr/sap3/oracle/product/920:Y 
?/span>
chown -R oracle1:oragroup $ORACLE_BASE
chmod -R 777 $ORACLE_BASE
chmod 6777 $ORACLE_HOME/bin/oracle


Picasso 2009-01-11 14:55 发表评论
]]>
转脓(chung)Q?让进E在后台可靠q行的几U方?/title><link>http://www.aygfsteel.com/davidgw/archive/2009/01/10/250803.html</link><dc:creator>Picasso</dc:creator><author>Picasso</author><pubDate>Sat, 10 Jan 2009 05:48:00 GMT</pubDate><guid>http://www.aygfsteel.com/davidgw/archive/2009/01/10/250803.html</guid><wfw:comment>http://www.aygfsteel.com/davidgw/comments/250803.html</wfw:comment><comments>http://www.aygfsteel.com/davidgw/archive/2009/01/10/250803.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/davidgw/comments/commentRss/250803.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/davidgw/services/trackbacks/250803.html</trackback:ping><description><![CDATA[<div class="wmqeeuq" id="content_top"> <h1>让进E在后台可靠q行的几U方?/h1> </div> <div class="wmqeeuq" id="content"> <p>惌q程在断开q接后依然保持运行?如果该进E已l开始运行了该如何补救? 如果有大量这c需求如何简化操作?</p> <p>    我们l常?x)碰到这L(fng)问题Q用 telnet/ssh d了远E的 Linux 服务器,q行了一些耗时较长的Q务, l果却由于网l的不稳定导致Q务中途失败。如何让命o(h)提交后不受本地关闭终端窗?|络断开q接的干扰呢Q下面D了一些例子, (zhn)可以针对不同的场景选择不同的方式来处理q个问题?/p> <p>    nohup/setsid/&</p> <p>    场景Q?/p> <p>    如果只是临时有一个命令需要长旉q行Q什么方法能最便的保证它在后台E_q行呢?</p> <p>    解决Ҏ(gu)Q?/p> <p>    我们知道Q当用户注销QlogoutQ或者网l断开Ӟl端?x)收?HUPQhangupQ信号从而关闭其所有子q程。因此,我们的解军_法就有两U途径Q要么让q程忽略 HUP 信号Q要么让q程q行在新的会(x)话里从而成Z属于此终端的子进E?/p> <p>    1. nohup</p> <p>    nohup 无疑是我们首先想到的办法。顾名思义Qnohup 的用途就是让提交的命令忽?hangupQ在 Unix 的早期版本中Q每个终端都?x)通过 modem 和系l通讯。当用户 logout Ӟmodem ׃(x)挂断Qhang upQ电(sh)话?同理Q当 modem 断开q接Ӟ׃(x)l终端发?hangup 信号来通知其关闭所有子q程。) 信号。让我们先来看一?nohup 的帮助信?br /> NOHUP(1)                        User Commands                        NOHUP(1)</p> <p>NAME<br />        nohup - run a command immune to hangups, with output to a non-tty</p> <p>SYNOPSIS<br />        nohup COMMAND [ARG]...<br />        nohup OPTION</p> <p>DESCRIPTION<br />        Run COMMAND, ignoring hangup signals.</p> <p>       --help display this help and exit</p> <p>       --version<br />               output version information and exit  </p> <p><br />     可见Qnohup 的用是十分方便的,只需在要处理的命令前加上 nohup 卛_Q标准输出和标准错误~省?x)被重定向?nohup.out 文g中。一般我们可在结֊?&"来将命o(h)同时攑օ后台q行Q也可用">filename 2>&1"来更改缺省的重定向文件名?/p> <p>    nohup CZ</p> <p>   [root@pvcent107 ~]# nohup ping www.ibm.com &<br /> [1] 3059<br /> nohup: appending output to `nohup.out'<br /> [root@pvcent107 ~]# ps -ef |grep 3059<br /> root      3059   984  0 21:06 pts/3    00:00:00 ping www.ibm.com<br /> root      3067   984  0 21:06 pts/3    00:00:00 grep 3059<br /> [root@pvcent107 ~]# </p> <p><br />     2。setsid</p> <p>    nohup 无疑能通过忽略 HUP 信号来我们的进E避免中途被中断Q但如果我们换个角度思考,如果我们的进E不属于接受 HUP 信号的终端的子进E,那么自然也就不会(x)受到 HUP 信号的媄响了。setsid p帮助我们做到q一炏V让我们先来看一?setsid 的帮助信息:(x)</p> <p>     <br /> SETSID(8) Linux Programmer’s Manual SETSID(8) NAME setsid - run a program in a new session SYNOPSIS setsid program [ arg ... ] DESCRIPTION setsid runs a program in a new session.  </p> <p><br />     可见 setsid 的用也是非常方便的Q也只需在要处理的命令前加上 setsid 卛_?/p> <p>    setsid CZ</p> <p> [root@pvcent107 ~]# setsid ping www.ibm.com<br /> [root@pvcent107 ~]# ps -ef |grep www.ibm.com<br /> root     31094     1  0 07:28 ?        00:00:00 ping www.ibm.com<br /> root     31102 29217  0 07:29 pts/4    00:00:00 grep www.ibm.com<br /> [root@pvcent107 ~]#    </p> <p><br />     值得注意的是Q上例中我们的进E?ID(PID)?1094Q而它的父 IDQPPIDQؓ(f)1Q即?init q程 IDQ,q不是当前终端的q程 ID。请此例与nohup 例中的父 ID 做比较?/p> <p>    3?amp;<br />     q里q有一个关?subshell 的小技巧。我们知道,一个或多个命名包含?#8220;()”中就能让q些命o(h)在子 shell 中运行中Q从而扩展出很多有趣的功能,我们现在要讨论的是其中之一?/p> <p>    当我们将"&"也放?#8220;()”内之后,我们׃(x)发现所提交的作业ƈ不在作业列表中,也就是说Q是无法通过jobs来查看的。让我们来看看ؓ(f)什么这样就能躲q?HUP 信号的媄响吧?/p> <p>    subshell CZ</p> <p>     [root@pvcent107 ~]# (ping www.ibm.com &)<br /> [root@pvcent107 ~]# ps -ef |grep www.ibm.com<br /> root     16270     1  0 14:13 pts/4    00:00:00 ping www.ibm.com<br /> root     16278 15362  0 14:13 pts/4    00:00:00 grep www.ibm.com<br /> [root@pvcent107 ~]#    </p> <p><br />     从上例中可以看出Q新提交的进E的?IDQPPIDQؓ(f)1Qinit q程?PIDQ,q不是当前终端的q程 ID。因此ƈ不属于当前终端的子进E,从而也׃?x)受到当前终端?HUP 信号的媄响了<br /> screen</p> <p>    场景Q?/p> <p>    我们已经知道了如何让q程免受 HUP 信号的媄响,但是如果有大量这U命令需要在E_的后台里q行Q如何避免对每条命o(h)都做q样的操作呢Q?/p> <p>    解决Ҏ(gu)Q?/p> <p>    此时最方便的方法就?screen 了。简单的_(d)screen 提供?ANSI/VT100 的终端模拟器Q它能够在一个真实终端下q行多个全屏的伪l端。screen 的参数很多,h很强大的功能Q我们在此仅介绍其常用功能以?qing)简要分析一下ؓ(f)什么?screen 能够避免 HUP 信号的媄响。我们先看一?screen 的帮助信息:(x)</p> <p>     SCREEN(1)                                                           SCREEN(1)</p> <p>NAME<br />        screen - screen manager with VT100/ANSI terminal emulation</p> <p>SYNOPSIS<br />        screen [ -options ] [ cmd [ args ] ]<br />        screen -r [[pid.]tty[.host]]<br />        screen -r sessionowner/[[pid.]tty[.host]]</p> <p>DESCRIPTION<br />        Screen  is  a  full-screen  window manager that multiplexes a physical<br />        terminal between several  processes  (typically  interactive  shells).<br />        Each  virtual  terminal provides the functions of a DEC VT100 terminal<br />        and, in addition, several control functions from the  ISO  6429  (ECMA<br />        48,  ANSI  X3.64)  and ISO 2022 standards (e.g. insert/delete line and<br />        support for multiple character sets).  There is a  scrollback  history<br />        buffer  for  each virtual terminal and a copy-and-paste mechanism that<br />        allows moving text regions between windows. </p> <p><br />     使用 screen 很方便,有以下几个常用选项Q?/p> <p>    用screen -dmS session name 来徏立一个处于断开模式下的?x)话Qƈ指定其会(x)话名Q?br />     用screen -list 来列出所有会(x)话?br />     用screen -r session name 来重新连接指定会(x)话?br />     用快捷键CTRL-a d 来暂时断开当前?x)话?/p> <p>    screen CZ</p> <p>     [root@pvcent107 ~]# screen -dmS Urumchi<br /> [root@pvcent107 ~]# screen -list<br /> There is a screen on:<br />         12842.Urumchi   (Detached)<br /> 1 Socket in /tmp/screens/S-root.</p> <p>[root@pvcent107 ~]# screen -r Urumchi </p> <p><br />     当我们用“-r”q接?screen ?x)话后,我们可以在q个伪终端里面ؓ(f)所Ʋؓ(f)Q再也不用担?HUP 信号?x)对我们的进E造成影响Q也不用l每个命令前都加?#8220;nohup”或?#8220;setsid”了。这是ؓ(f)什么呢Q让我来看一下下面两个例子吧?/p> <p>    1. 未?screen 时新q程的进E树(wi)</p> <p>     [root@pvcent107 ~]# ping www.google.com &<br /> [1] 9499<br /> [root@pvcent107 ~]# pstree -H 9499<br /> init─┬─Xvnc<br />      ├─acpid<br />      ├─atd<br />      ├─2*[sendmail] <br />      ├─sshd─┬─sshd───bash───pstree<br />      ?nbsp;     └─sshd───bash───ping<br />              </p> <p><br />     我们可以看出Q未使用 screen 时我们所处的 bash ?sshd 的子q程Q当 ssh 断开q接ӞHUP 信号自然?x)媄响到它下面的所有子q程Q包括我们新建立?ping q程Q?/p> <p>    2. 使用?screen 后新q程的进E树(wi)</p> <p>     [root@pvcent107 ~]# screen -r Urumchi<br /> [root@pvcent107 ~]# ping www.ibm.com &<br /> [1] 9488<br /> [root@pvcent107 ~]# pstree -H 9488<br /> init─┬─Xvnc<br />      ├─acpid<br />      ├─atd<br />      ├─screen───bash───ping<br />      ├─2*[sendmail] </p> <p><br />     而用了 screen 后就不同了,此时 bash ?screen 的子q程Q?screen ?initQPID?Q的子进E。那么当 ssh 断开q接ӞHUP 信号自然不会(x)影响?screen 下面的子q程了?/p> <p>    ȝ</p> <p>    现在几种Ҏ(gu)已经介绍完毕Q我们可以根据不同的场景来选择不同的方案。nohup/setsid 无疑是(f)旉要时最方便的方法,disown 能帮助我们来事后补救当前已经在运行了的作业,?screen 则是在大扚w操作时不二的选择?br /> </p> </div> <img src ="http://www.aygfsteel.com/davidgw/aggbug/250803.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/davidgw/" target="_blank">Picasso</a> 2009-01-10 13:48 <a href="http://www.aygfsteel.com/davidgw/archive/2009/01/10/250803.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>更改Suse L名、IPhttp://www.aygfsteel.com/davidgw/archive/2009/01/04/249748.htmlPicassoPicassoSun, 04 Jan 2009 08:20:00 GMThttp://www.aygfsteel.com/davidgw/archive/2009/01/04/249748.htmlhttp://www.aygfsteel.com/davidgw/comments/249748.htmlhttp://www.aygfsteel.com/davidgw/archive/2009/01/04/249748.html#Feedback0http://www.aygfsteel.com/davidgw/comments/commentRss/249748.htmlhttp://www.aygfsteel.com/davidgw/services/trackbacks/249748.html A: SLES8中可以用yast network来修改主机名(hostname),也可以通过修改配置文g的方式ƈq行命o(h)
实现q个目的

Ҏ(gu)1. 通过yast2理工具q行配置
在console中运行yast2工具修改L?hostname)
# yast2 network
对于配置未经配置的网?
"Network cards configuration"?Network cards configuration"?#8220;Configure...”
对于修改已配|网卡的讄
"Network cards configuration"?Network cards configuration"?#8220;Changev...”

“Network address setup”?#8220;Detailed settings”单击“Host name and name server”
?#8220;Host name”输入框中输入L名,?#8220;Domain name”中数入域名,如果没有域名Q接受缺省的
“local”

Ҏ(gu)2. 通过修改配置文g的方式ƈq行命o(h)修改L?
修改/etc/HOSTNAME文gQ在此文件中保存L名,例如Q?
linuxserv1

然后q行命o(h)讄L?
# /etc/rc.d/boot.localnet start

Ҏ(gu)3. q行 sysctl 动态改变主机名
# sysctl -w kernel.hostname=linuxserv1



QQ如何更改网卡配|IP

# vi /etc/sysconfig/network/ifcfg-eth-id-00\:0d\:61\:cd\:31\:f2


BOOTPROTO='static'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR='192.168.1.70'
MTU=''
NAME='Giga-byte GA-7VM400M/7VT600 Motherboard'
NETMASK='255.255.255.0'
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
UNIQUE='rBUF.0ayJ55PfLqC'
USERCONTROL='no'
_nm_name='bus-pci-0000:01:05.0'


Picasso 2009-01-04 16:20 发表评论
]]>
转蝲Qldconfig几个需要注意的地方http://www.aygfsteel.com/davidgw/archive/2008/10/07/233014.htmlPicassoPicassoTue, 07 Oct 2008 14:24:00 GMThttp://www.aygfsteel.com/davidgw/archive/2008/10/07/233014.htmlhttp://www.aygfsteel.com/davidgw/comments/233014.htmlhttp://www.aygfsteel.com/davidgw/archive/2008/10/07/233014.html#Feedback0http://www.aygfsteel.com/davidgw/comments/commentRss/233014.htmlhttp://www.aygfsteel.com/davidgw/services/trackbacks/233014.html阅读全文

Picasso 2008-10-07 22:24 发表评论
]]>
转蝲Q?用vi ~辑文g时“终端太宽”(Terminal too wideQ?/title><link>http://www.aygfsteel.com/davidgw/archive/2008/09/02/226256.html</link><dc:creator>Picasso</dc:creator><author>Picasso</author><pubDate>Tue, 02 Sep 2008 01:07:00 GMT</pubDate><guid>http://www.aygfsteel.com/davidgw/archive/2008/09/02/226256.html</guid><description><![CDATA[     <div style="float: right" align="right"></div> <span id="wmqeeuq" class="bold">用vi ~辑文g?#8220;l端太宽”QTerminal too wideQ?/span><br /> <br /> <div id="wmqeeuq" class="t_msgfont" id="message3183031">#stty -a    check you columns setting . <br /> #stty columns 132    may solve it .</div> <img src ="http://www.aygfsteel.com/davidgw/aggbug/226256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/davidgw/" target="_blank">Picasso</a> 2008-09-02 09:07 <a href="http://www.aygfsteel.com/davidgw/archive/2008/09/02/226256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转蝲Q?root用户ftp-telnet 登陆讄http://www.aygfsteel.com/davidgw/archive/2008/09/01/226179.htmlPicassoPicassoMon, 01 Sep 2008 12:22:00 GMThttp://www.aygfsteel.com/davidgw/archive/2008/09/01/226179.html root用户ftp-telnet 登陆讄

root用户ftp-telnet 登陆讄
--------------------------------------
Linux _֍---root用户ftp/telnet 登陆讄  (W者原?--׃n)
--------------------------------------------------------
W者以FedCore 4(2.6.11)?一般情况下pȝ默认?root用户不能q程ftp ?telnet 服务?|络上有些更?br /> q程登陆的文?W者还是认为都不够全面,l过自己一个小时的折腾l于解决?
1),解决root用户 ftp登陆的问?br />   一般情况下,׃U种原因ftp是不让root用户q程登陆,但只要你修改以个文g可以登陆了.
   a ,L或注释掉  /etc/vsftpd/ftpusers 中的root
   b ,L或注释掉  /etc/vsftpd/user_list  中的root
2),修改ftp的默认的路径
我的盘I间有限Q如何把帐号ftp默认的\?var/ftp更改到别处?或者是Q我的linux所有的目录都放?根分区,因ؓ(f)I间紧张Q我能否把ftpq个用户的默认\径放到别的分区?
可以Q应该如下操?
首先要把ftpq个用户删除
  #userdel -r ftp
?x)有错误信息Q不q不用理Q这是正常的?
然后我们再把q个用户d上,比如我想为帐号ftp的家目录讄?mnt/LinG/ftpQ我们就可以如下操作
  [root@linuxsir001 root]# mkdir /root/ftp
   [root@linuxsir001 root]# adduser -d /root/ftp -g ftp -s /sbin/nologin ftp
仅仅是这样做q不行,因ؓ(f)q样q是不能让匿名用h到它的家目录Q所以我们必L?mnt/LinG/ftpq个目录的权限?
  [root@linuxsir001 root]# chmod 755 /root/ftp/  
    [root@linuxsir001 root]# chown -R root.root /root/ftp/
3),root用户登陆 telnet
  a,查你的服务器是否安装 telnet 服务?br />    rpm -qa | grep  telnet-server[root@fedorasvr tmp]# ls
   telnet-server-0.17-35.i386.rpm
[root@fedorasvr tmp]# rpm -i telnet-server-0.17-35.i386.rpm
warning: telnet-server-0.17-35.i386.rpm: Header V3 DSA signature: NOKEY, key ID 4f2a6fd2
error: Failed dependencies:
xinetd is needed by telnet-server-0.17-35.i386
-------------哦是什么出错了?????
?查可能是没有安装 xinetd ,因ؓ(f)linux的安装包依赖性可能强,好安装一下了,在安1.rpm -ivh xinetd-2.3.13-6.i386.rpm
2.service xinetd start
3.rpm-ivh telnet-server-0.17-35.i386.rpm
4.chkconfig telnet on
装telnet-server {?br /> 试 telnet 服务器已l安装好?
   b),开启root用户的telnet功能
    1,~辑/etc/default/login文g.
        d内容:CONSOLE=/dev/console
        2,~辑/etc/securetty   文gQ加上下面几行:(x)   
    pts/0   
        pts/1   
        pts/2   
        pts/3
           试root用户直接telnet登陆成功,
      特别提示:对了最好不要用root用户telnet 登陆,也不要用telnet功能,因ؓ(f)它太不安全了,最好?ssh2登陆.
----------------------------------------------------
Linux _֍---root用户ftp/telnet 登陆讄  (W者原?--׃n)
--------------------------------------------------------
W者以FedCore 4(2.6.11)?一般情况下pȝ默认?root用户不能q程ftp ?telnet 服务?|络上有些更?br /> q程登陆的文?W者还是认为都不够全面,l过自己一个小时的折腾l于解决?
1),解决root用户 ftp登陆的问?br />   一般情况下,׃U种原因ftp是不让root用户q程登陆,但只要你修改以个文g可以登陆了.
   a ,L或注释掉  /etc/vsftpd/ftpusers 中的root
   b ,L或注释掉  /etc/vsftpd/user_list  中的root
2),修改ftp的默认的路径
我的盘I间有限Q如何把帐号ftp默认的\?var/ftp更改到别处?或者是Q我的linux所有的目录都放?根分区,因ؓ(f)I间紧张Q我能否把ftpq个用户的默认\径放到别的分区?
可以Q应该如下操?
首先要把ftpq个用户删除
  #userdel -r ftp
?x)有错误信息Q不q不用理Q这是正常的?
然后我们再把q个用户d上,比如我想为帐号ftp的家目录讄?mnt/LinG/ftpQ我们就可以如下操作
  [root@linuxsir001 root]# mkdir /root/ftp
   [root@linuxsir001 root]# adduser -d /root/ftp -g ftp -s /sbin/nologin ftp
仅仅是这样做q不行,因ؓ(f)q样q是不能让匿名用h到它的家目录Q所以我们必L?mnt/LinG/ftpq个目录的权限?
  [root@linuxsir001 root]# chmod 755 /root/ftp/  
    [root@linuxsir001 root]# chown -R root.root /root/ftp/
3),root用户登陆 telnet
  a,查你的服务器是否安装 telnet 服务?br />    rpm -qa | grep  telnet-server[root@fedorasvr tmp]# ls
   telnet-server-0.17-35.i386.rpm
[root@fedorasvr tmp]# rpm -i telnet-server-0.17-35.i386.rpm
warning: telnet-server-0.17-35.i386.rpm: Header V3 DSA signature: NOKEY, key ID 4f2a6fd2
error: Failed dependencies:
xinetd is needed by telnet-server-0.17-35.i386
-------------哦是什么出错了?????
?查可能是没有安装 xinetd ,因ؓ(f)linux的安装包依赖性可能强,好安装一下了,在安1.rpm -ivh xinetd-2.3.13-6.i386.rpm
2.service xinetd start
3.rpm-ivh telnet-server-0.17-35.i386.rpm
4.chkconfig telnet on
装telnet-server {?br /> 试 telnet 服务器已l安装好?
   b),开启root用户的telnet功能
    1,~辑/etc/default/login文g.
        d内容:CONSOLE=/dev/console
        2,~辑/etc/securetty   文gQ加上下面几行:(x)   
    pts/0   
        pts/1   
        pts/2   
        pts/3
           试root用户直接telnet登陆成功,
      特别提示:对了最好不要用root用户telnet 登陆,也不要用telnet功能,因ؓ(f)它太不安全了,最好?ssh2登陆.
----------------------------------------------------


Picasso 2008-09-01 20:22 发表评论
]]>
վ֩ģ壺 | | | | | | Ϫ| ͼľ| | | | | ɣֲ| | | º| ľ| | | ֥| ˺| Ӣ| մ| | | Ž| Ů| | | ɽ| ˳| ˻| | | Ȩ| ٸ| | | Ǧɽ| | |