??xml version="1.0" encoding="utf-8" standalone="yes"?>
1. 安装增强功能?Guest Additions)
安装?u>ubuntu后,q行Ubuntuq登录。然后在VirtualBox的菜单里选择"讑֤(Devices)" -> "安装增强功能?Install Guest Additions)"?/p>
你会发现在Ubuntu桌面上多Z个光盘图标,q张光盘默认被自动加载到了文件夹/media/cdom0。进入命令行l端Q输入:
cd /media/cdom0
sudo ./VboxLinuxAdditions.run
开始安装工具包。安装完毕后会提C重启Ubuntu?/p>
2. 讄׃n文g?/p>
重启完成后点?讑֤(Devices)" -> ׃n文g?Shared Folders)菜单Q添加一个共享文件夹Q选项固定和时是指该文gҎ否是持久的。共享名可以d一个自己喜Ƣ的Q比?gongxiang"Q尽量用英文名U?/p>
3. 挂蝲׃n文g?/p>
重新q入虚拟UbuntuQ在命o行终端下输入Q?/p>
sudo mkdir /mnt/shared
sudo mount -t vboxsf gongxiang /mnt/shared
其中"gongxiang"是之前创建的׃n文g夹的名字。OKQ现在Ubuntu和主机可以互传文件了?/p>
假如您不x一ơ都手动挂蝲Q可以在/etc/fstab中添加一?/p>
gongxiang /mnt/shared vboxsf rw,gid=100,uid=1000,auto 0 0
q样p够自动挂载了?/p>
4. 卸蝲的话使用下面的命令:
sudo umount -f /mnt/shared
注意Q?/p>
׃n文g夹的名称千万不要和挂载点的名U相同。比如,上面的挂载点?mnt/sharedQ如果共享文件夹的名字也是shared的话Q在挂蝲的时候就会出现如下的错误信息(?a >http://www.virtualbox.org/ticket/2265)Q?/p>
/sbin/mount.vboxsf: mounting failed with the error: Protocol error
原因分析可以看Tips on running Sun Virtualbox的Shared Folder on a Linux Guest节?/p>
׃用户在UNIX下经怼遇到SUID、SGID的概念,而且SUID和SGID涉及到系l安全,所以用户也比较兛_q个问题。关于SUID?SGID的问题也l常有h提问Q但回答的h一般答得不够详l,加上曄回答q两个网友的问题Q还查了一些资料,军_整理成本文,以供大家参考。限于本人的水^问题Q文章中如果有不当之处,请广大网友指正?
一、UNIX下关于文件权限的表示Ҏ和解?
SUID ?Set User ID, SGID ?Set Group ID的意思?
UNIX下可以用ls -l 命o来看到文件的权限。用ls命o所得到的表C法的格式是cMq样的:-rwxr-xr-x 。下面解析一下格式所表示的意思。这U表C方法一共有十位Q?
9 8 7 6 5 4 3 2 1 0
- r w x r - x r - x
W?位表C文件类?可以为p、d、l、s、c、b?Q?
p表示命名道文g
d表示目录文g
l表示W号q接文g
-表示普通文?
s表示socket文g
c表示字符讑֤文g
b表示块设备文?
W?-6位?-3位?-0位分别表C文件所有者的权限Q同l用L权限Q其他用L权限Q其形式为rwxQ?
r表示可读Q可以读出文件的内容
w表示可写Q可以修Ҏ件的内容
x表示可执行,可运行这个程?
没有权限的位|用-表示
例子Q?
ls -l myfile昄为:
-rwxr-x--- 1 foo staff 7734 Apr 05 17:07 myfile
表示文gmyfile是普通文Ӟ文g的所有者是foo用户Q而foo用户属于staffl,文g只有1个硬q接Q长度是7734个字节,最后修Ҏ???7:07?
所有者fooҎ件有d执行权限Qstaffl的成员Ҏ件有d执行权限Q其他的用户对这个文件没有权限?
如果一个文件被讄了SUID或SGID位,会分别表现在所有者或同组用户的权限的可执行位上。例如:
1?rwsr-xr-x 表示SUID和所有者权限中可执行位被设|?
2?rwSr--r-- 表示SUID被设|,但所有者权限中可执行位没有被设|?
3?rwxr-sr-x 表示SGID和同l用h限中可执行位被设|?
4?rw-r-Sr-- 表示SGID被设|,但同l用h限中可执行位没有被社
其实在UNIX的实CQ文件权限用12个二q制位表C,如果该位|上的值是
1Q表C有相应的权限:
11 10 9 8 7 6 5 4 3 2 1 0
S G T r w x r w x r w x
W?1位ؓSUID位,W?0位ؓSGID位,W?位ؓsticky位,W?-0位对应于上面的三lrwx位?
11 10 9 8 7 6 5 4 3 2 1 0
上面?rwsr-xr-x的gؓQ?1 0 0 1 1 1 1 0 1 1 0 1
-rw-r-Sr--的gؓQ?0 1 0 1 1 0 1 0 0 1 0 0
l文件加SUID和SUID的命令如下:
chmod u+s filename 讄SUID?
chmod u-s filename LSUID讄
chmod g+s filename 讄SGID?
chmod g-s filename LSGID讄
另外一U方法是chmod命o用八q制表示Ҏ的设|。如果明白了前面?2位权限表C法也很单?
二、SUID和SGID的详l解?
׃SUID和SGID是在执行E序Q程序的可执行位被设|)时v作用Q而可执行位只Ҏ通文件和目录文g有意义,所以设|其他种cL件的SUID和SGID位是没有多大意义的?
首先讲普通文件的SUID和SGID的作用。例子:
如果普通文件myfile是属于foo用户的,是可执行的,现在没设SUID位,ls命o昄如下Q?
-rwxr-xr-x 1 foo staff 7734 Apr 05 17:07 myfileM用户都可以执行这个程序。UNIX的内核是Ҏ什么来定一个进E对资源的访问权限的呢?是这个进E的q行用户的(有效QIDQ包?user id和group id。用户可以用id命o来查到自q或其他用Luser id和group id?
除了一般的user id 和group id外,q有两个UC为effective 的idQ就是有效idQ上面的四个id表示为:uidQgidQeuidQegid。内怸要是Ҏeuid和egid来确定进E对资源的访问权限?
一个进E如果没有SUID或SGID位,则euid=uid egid=gidQ分别是q行q个E序的用Luid和gid。例如kevin用户的uid和gid分别?04?02Qfoo用户的uid和gid?200Q?01Qkevinq行myfileE序形成的进E的euid=uid=204Qegid=gid=202Q内核根据这些值来判断q程对资源访问的限制Q其实就是kevin用户对资源访问的权限Q和foo没关pR?
如果一个程序设|了SUIDQ则euid和egid变成被运行的E序的所有者的uid和gidQ例如kevin用户q行myfileQeuid=200Qegid=201Quid=204Qgid=202Q则q个q程h它的属主foo的资源访问权限?
SUID的作用就是这P让本来没有相应权限的用户q行q个E序Ӟ可以讉K他没有权限访问的资源。passwd是一个很鲜明的例子?
SUID的优先比SGID高,当一个可执行E序讄了SUIDQ则SGID会自动变成相应的egid?
下面讨论一个例子:
UNIXpȝ有一?dev/kmem的设备文Ӟ是一个字W设备文Ӟ里面存储了核心程序要讉K的数据,包括用户的口令。所以这个文件不能给一般的用户dQ权限设为:cr--r----- 1 root system 2, 1 May 25 1998 kmem
但ps{程序要读这个文Ӟ而ps的权限设|如下:
-r-xr-sr-x 1 bin system 59346 Apr 05 1998 ps
q是一个设|了SGID的程序,而ps的用hbinQ不是rootQ所以不能设|SUID来访问kmemQ但大家注意了,bin和root都属?systeml,而且ps讄了SGIDQ一般用h行psQ就会获得systeml用L权限Q而文件kmem的同l用L权限是可读,所以一般用h行ps没问题了。但有些Qؓ什么不把psE序讄为root用户的程序,然后讄SUID位,不也行吗Q这的确可以解决问题Q但实际中ؓ什么不q样做呢Q因为SGID的风险比SUID得多,所以出于系l安全的考虑Q应该尽量用SGID代替SUID的程序,如果可能的话。下面来说明一下SGID对目录的影响。SUID对目录没有媄响。如果一个目录设|了SGID位,那么如果M一个用户对q个目录有写权限的话Q他在这个目录所建立的文件的l都会自动{个目录的属主所在的l,而文件所有者不变,q是属于建立q个文g的用戗?
三、关于SUID和SGID的编E?
和SUID和SGID~程比较密切相关的有以下的头文g和函敎ͼ
#include
#include
uid_t getuid(void);
uid_t geteuid(void);
gid_t getgid (void);
gid_t getegid (void);
int setuid (uid_t UID);
int setruid (uid_t RUID);
int seteuid (uid_t EUID);
int setreuid (uid_t RUID,uid_t EUID);
int setgid (gid_t GID);
int setrgid (gid_t RGID);
int setegid (git_t EGID);
int setregid (gid_t RGID, gid_t EGID);
具体q些函数的说明在q里׃详细列出来了,要用到的可以用man查?
SUID/SGID :
假如你有文ga.txt
#ls -l a.txt
-rwxrwxrwx
#chmod 4777 a.txt
-rwsrwxrwx ======>注意s位置
#chmod 2777 a.txt
-rwxrwsrwx ======>注意s位置
#chmod 7777 a.txt
-rwsrwxswt ======>出现了t,t的作用在内存中尽量保存a.txt,节省pȝ再加载的旉.
现在再看前面讄 SUID/SGID作用:
#cd /sbin
#./lsusb
...
#su aaa(普通用?
$./lsusb
...
是不是现在显C出错?
$su
#chmod 4755 lsusb
#su aaa
$./lsusb
... 现在明白了吗Q本来是只有root用户才能执行的命令,加了SUID?普通用户就可以像root一L用,权限提升了。上面是对于文g来说的,对于目录也差不多Q?
目录的S属性得在该目录下创徏的Q何文件及子目录属于该目录所拥有的组Q目录的T属性得该目录的所有者及root才能删除该目录。还有对于s与SQ设|SUID/SGID需要有q行权限Q否则用ls -l后就会看到S,证明你所讄的SUID/SGID没有起作用?
Why we need suid,how do we use suid?
r -- 读访?
w -- 写访?
x -- 执行许可
s -- SUID/SGID
t -- sticky?
那么 suid/sgid是做什么的Q?Z么会有suid位呢Q?
要想明白q个Q先让我们看个问题:如果让每个用h改自q密码Q?
用户修改密码Q是通过q行命opasswd来实现的。最l必要修改/etc/passwd文gQ而passwd的文件的属性是Q?
#ls -l /etc/passwd
-rw-r--r-- 1 root root 2520 Jul 12 18:25 passwd
我们可以看到passwd文g只有对于root用户是可写的Q而对于所有的他用h说都是没有写权限的?那么一个普通的用户如何能够通过q行passwd命o修改q个passwd文g呢?
Z解决q个问题QSUID/SGID便应q而生。而且AT&T对它甌了专利?呵呵?
SUID和SGID是如何解册个问题呢Q?
首先Q我们要知道一点:q程在运行的时候,有一些属性,其中包括 实际用户ID,实际lID,有效用户ID,有效lID{?实际用户ID和实际组ID标识我们是谁Q谁在运行这个程?一般这2个字D在登陆时决定,在一个登陆会话期_ q些值基本上不改变?
而有效用户ID和有效组ID则决定了q程在运行时的权限。内核在军_q程是否有文件存取权限时Q是采用了进E的有效用户ID来进行判断的?
知道了这点,我们来看看SUID的解决途径Q?
当一个程序设|了为SUID位时Q内核就知道了运行这个程序的时候,应该认ؓ是文件的所有者在q行q个E序。即该程序运行的时候,有效用户ID是该E序的所有者。D个例子:
[root@sgrid5 bin]# ls -l passwd
-r-s--s--x 1 root root 16336 Feb 14 2003 passwd
虽然你以test登陆pȝQ但是当你输入passwd命o来更改密码的时候,׃passwd讄了SUID位,因此虽然q程的实际用户ID是test对应的IDQ但是进E的有效用户ID则是passwd文g的所有者root的ID,因此可以修改/etc/passwd文g?
让我们看另外一个例子?
ping命o应用q泛Q可以测试网l是否连接正常。ping在运行中是采用了ICMP协议Q需要发送ICMP报文。但是只有root用户才能建立ICMP报文Q如何解册个问题呢Q同P也是通过SUID位来解决?
[root@sgrid5 bin]# ls -l /bin/ping
-rwsr-sr-x 1 root root 28628 Jan 25 2003 /bin/ping
我们可以试一下,如果Lping的SUID位,再用普通用户去q行命oQ看会怎么栗?
[root@sgrid5 bin]#chmod u-s /bin/ping
[root@sgrid5 bin]# ls -l ping
-rwxr-xr-x 1 root root 28628 Jan 25 2003 ping
[root@sgrid5 bin]#su test
[test@sgrid5 bin]$ ping byhh.net
ping: icmp open socket: Operation not permitted
SUID虽然很好了解决了一些问题,但是同时也会带来一些安全隐患?
因ؓ讄?SUID 位的E序如果被攻?通过~冲区溢出等斚w),那么hacker可以拿到root权限?
因此在安全方面特别要注意那些讄了SUID的程序?
通过以下的命令可以找到系l上所有的讄了suid的文Ӟ
[root@sgrid5 /]# find / -perm -04000 -type f -ls
对于q里Z么是4000Q大家可以看一下前面的st_mode的各bit的意义就明白了?
在这些设|了suid的程序里Q如果用不上的,最好取消该E序的suid位?/p>
本文来自CSDN博客Q{载请标明出处Q?a >http://blog.csdn.net/jiean/archive/2009/01/02/3686207.aspx
如上所C,表示没有q没有安装,可以通过apt安装Q命令如下:
pȝ自动进行安装,安装完成以后Q先启动服务Q?/p>
启动后,可以通过如下命o查看服务是否正确启动
如上表示启动ok。注意,ssh默认的端口是22Q可以更改端口,更改后先stopQ?br>
然后start可以了。改配置?etc/ssh/sshd_config下,如下所C?/p>
最后,应该是连接的时候了。请看如下命令:
JDK安装配置
1、下载jdkQ本例用jdk-6u18-linux-i586.bin
下蝲面Q?a >http://java.sun.com/javase/downloads/index.jsp
2、jdk-6u18-linux-i586.bin h执行权限
chmod +x jdk-6u18-linux-i586.bin
3、安装jdk (Ҏ提示一步步安装)
./jdk-6u18-linux-i586.bin
看到 安装E序在询问您是否守许可协议面 ,回R,I格都可?看完协议.
出现一行字QDo you aggree to the above license terms? [yes or no]
安装E序在问您是否愿意遵守刚才看q的许可协议。当然要同意了,输入"y" ?"yes" 回R?/p>
4、增加JAVA_HOME环境变量
[root@test src]# vi /etc/profile
在最后面增加Q?br> #set java environment
export JAVA_HOME=/usr/java/jdk1.6.0_18
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME CLASSPATH PATH
保存退?br> 注释Q?br> JAVA_HOME指明JDK安装路径Q就是刚才安装时所选择的\径,此\径下包括libQbinQjre{文件夹Q此变量最好设|,因ؓ以后q行tomcatQEclipse{都需要依靠此变量Q?
PATH使得pȝ可以在Q何\径下识别java命oQ设为:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
CLASSPATH为java加蝲c?class or lib)路径Q只有类在classpath中,java命o才能识别Q设为:.:%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar (要加.表示当前路径)
特别注意Q◆环境变量值的l尾没有MW号Q不同g间用Q隔开Qunix中用:Q?
◆CLASSPATH变量g?表示当前目录?
5?使得刚刚d到环境变量生效:
[root@test src]# source /etc/profile
6?q入 /usr/bin/目录
#cd /usr/bin
#ln -s -f /usr/java/jdk1.6.0_18/jre/bin/java
#ln -s -f /usr/java/jdk1.6.0_18/bin/javac
7、在命o行输?br> #java -version
屏幕输出:
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Server VM (build 16.0-b13, mixed mode)
8?试安装情况Q?br> 新徏Test.java:
public class Test
{
public static void main(String[] args)
{
System.out.println("Hello,Welcome to Linux World!");
}
}
在终端用cd命oq入Test.java目录,然后输入
javac Test.java
java Test
若输?br> Hello,Welcome to Linux World!
则表明配|成?
ȝ如下Q?/font> 链接:在磁盘上有一份内容一L文g产生Q但不改变文件的Inode,也就是与原文件共用Inode, 软链接:不在盘上有一份内容一L文g产生()Q但产生新的Inode, 文g复制Q生新的文件内容,q且使用新的Inode. 单的说Y链接相当于快h式?/font> 一张粗p的图: 文ga <-- bQ文件a的Y链接Q? 文ga | | inode inode <-- bQ文件a的硬链接Q?br> | | 盘 盘 文ga ------------->copy b(复制文gaQ? | | inode inode | | 盘 盘 链接是一U在׃n文g和访问它的用L若干目录之间徏立联pȝ一U方法。Linux中包括两U链接:链?Hard Link)和Y链接(Soft Link),软链接又UCؓW号链接QSymbolic linkQ? 一、硬链接 链接说白了是一个指针,指向文g索引节点Q系lƈ不ؓ它重新分配inode。可以用:ln命o来徏立硬链接。语?
用法: W一U??#8221;existingfile”创徏链?文g名ؓ”newfile”。第二种:?#8221;directory”目录??”existingfile-list”中包含的所有文件创Z个同名的链接。常用可选[options] –f 无论”newfile”存在与否,都创建链接?n 如果”newfile”已存?׃创徏链接? 下面举一些例?
注意在创建链接前,file1 昄的链接数目ؓ1,创徏链接?1)file1和file1hard的链接数目都变ؓ2;(2) file1和file1hard在inodeh一L(3) file1和file1hard昄的文件大也是一栗可见进行了ln命o的操作结果:file1和file1hard是同一个文件的两个名字Q它们具有同L索引节点号和文g属性,建立文gfile1的硬链接Q就是ؓfile1的文件烦引节点在当前目录上徏立一个新指针。如下图,你可以删除其中Q何一?如rm file2 ,每次只会删除一个指? 链接数同时减一,只有所有指向文件内容的指针,也即链接数减?Ӟ内核才会把文件内容从盘上删除。当前目录逻辑l构Q?不好意思图没有昄出来)? q可以在不同目录Q但同一文gpȝ中徏立文件的链接。设file1、file2在目?home/longcheng/dir1中,下面的命令,?home/longcheng中徏立file2的硬链接?
下面的程序,是将dir1目录中所有文Ӟ在目录dir2中徏立硬链接
如果使用?ln –f existingfile newfile,如果newfile已经存在Q则无论原来newfile是什么文Ӟ只用当前用户对它有写权限Qnewfile成为exisitngfile的硬链接文g? 管链接节省空_也是Linuxpȝ整合文gpȝ的传l方式,但是存在一下不之处:Q?Q不可以在不同文件系l的文g间徏立链接(2Q只有超U用h可以为目录创建硬链接。虽然很多树上说root用户可以创徏Q但是笔者在学习q程中发现即使是root用户也不能创建,我的pȝ是RedhatQ内?2.4?.6都试q,在其他系l中不知道是不是可以? 二、Y链接Q符号链接) 软链接克服了链接的不Q没有Q何文件系l的限制QQ何用户可以创建指向目录的W号链接。因而现在更为广泛用,它具有更大的灉|性,甚至可以跨越不同机器、不同网l对文gq行链接? 建立软链接,只要在ln后面加上选项 –sQ下面D个例?
从上面链接后的结果可以看出来软链接与链接,区别不仅仅是在概念上Q在实现上也是不同的。区别:链接原文gQ链接文件公用一个inodeP说明他们是同一个文Ӟ而Y链接原文Ӟ链接文g拥有不同的inodeP表明他们是两个不同的文gQ在文g属性上软链接明写Z是链接文Ӟ而硬链接没有写出来,因ؓ在本质上链接文件和原文件是完全q等关系Q链接数目是不一LQY链接的链接数目不会增加;文g大小是不一LQ硬链接文g昄的大是跟原文g是一LQ这用强调,因ؓ是等同的嘛,而这里Y链接昄的大与原文件就不同了,file1大小?8BQ而file1soft?BQ这里面?实际上就?#8220;file1”的大? MQ徏立Y链接是建立了一个新文g。当讉K链接文gӞpȝ׃发现他是个链接文Ӟ它读取链接文件找到真正要讉K的文件? 在不同系l之间徏立Y链接、对目录建立链接Q这里就不D例了Q读者可以自己去试Q我也是在不断实践中学习的? 当然软链接也有硬链接没有的缺点,因ؓ链接文g包含有原文g的\径信息,所以当原文件从一个目录下Ud其他目录中,再访问链接文Ӟpȝ找不到了,而硬链接没有这个缺P你想怎么Ud怎么U;q有它要pȝ分配额外的空间用于徏立新的烦引节点和保存原文件的路径。补充一下:可以通过symlink来查看链接文Ӟ可以?man symlink来学习?/font> 索引节点、硬q接和连接计?索引节点inodeQ?/strong> 引用Q?em>Linux为每个文件分配一个称为烦引节点的LinodeQ可以将inode单理解成一个指针,它永q指向本文g的具体存储位|。系l是通过索引节点(而不是文件名)来定位每一个文件?/em> 例如Q? 假设我们在硬盘当前目录下建立了一个名为mytext文本文gQ其内容只有一行: This is my file. 1、当然这行文字一定是存储在磁盘数据区某个具体位置?物理上要通过头受柱面号和扇区号来描qͼ在本例中假设分别??0?0)? |
q里使用两个对应的函数进行比较:
ssize_t write(int filedes, const void *buff, size_t nbytes)
size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *fp)
上面的buff和ptr都是指应用程序自׃用的bufferQ实际上当需要对文gq行写操作时Q都会先写到内核所讄~冲存储器。如果该~存未满Q则q不其排入输出队列Q直到缓存写满或者内核再ơ需要重C用此~存时才其排入盘I/O输入队列Q再q行实际的I/O操作Q也是此时才把数据真正写到盘Q这U技术叫延迟写?/p>
如果我们直接用非~存I/O对内核的~冲行读写,会生许多管理不善而造成的麻烦(如一ơ性写入过多,或多ơ系l调用导致的效率低下Q?/p>
标准(带缓存的)I/O为我们解决了q些问题Q它处理很多l节Q如~冲区分配,以优化长度执行I/O{,更便于我们用?/p>
׃标准(带缓存的)I/O在系l调用的上一层多加了一个缓冲区Q也因此引入了流的概念,在UNIX/Linux下表CZؓFILE*Qƈ不限于UNIX/LinuxQANSI C都有FILE的概念)QFILE实际上包含了为管理流所需要的所有信息:实际I/O的文件描q符Q指向流~存的指针(标准I/O~存Q由malloc分配Q又UCؓ用户态进E空间的~存Q区别于内核所讄~存Q,~存长度Q当前在~存中的字节敎ͼ出错标志{?/p>
因此可知Q?strong>不带~存的I/OҎ件描q符操作Q带~存的标准I/O是针Ҏ?/strong>?/p>
标准I/OҎ个I/O自动进行缓存管理(标准I/O函数通常调用malloc来分配缓存)。它提供了三U类型的~存Q?br> 1) 全缓存。当填满标准I/O~存后才执行I/O操作。磁盘上的文仉常是全~存的?br> 2) 行缓存。当输入输出遇到新行W或~存满时Q才由标准I/O库执行实际I/O操作。stdin、stdout通常是行~存的?br> 3) 无缓存。相当于read、write了。stderr通常是无~存的,因ؓ它必d快输出?/p>
一般而言Q由pȝ选择~存的长度,q自动分配。标准I/O库在关闭的时候自动释攄存。另外,也可以用函数fflush()流所有未写的数据送入Q刷斎ͼ到内核(内核~冲区)Qfsync()所有内核缓冲区的数据写到文Ӟ盘Q?/strong>?/p>
在标准I/O库中也有引入~存理而带来的~点--效率问题。例如当使用每次一行函数fgets和fputsӞ通常需要复制两ơ数据:一ơ是在内核和标准I/O~存之间Q当调用read和writeӞQ第二次是在标准I/O~存Q通常pȝ分配和管理)和用L序中的行~存Qfgets的参数就需要一个用戯~存指针Q之间?/p>
1、配|文件的位置
在目?/etc/ 下面Q有个名为vimrc的文Ӟq是pȝ中公qvim配置文gQ对所有用户都有效。而在每个用户的主目录下,都可以自己徏立私有的配置文gQ命名ؓQ?#8220;.vimrc”。例如,/root目录下,通常已经存在一?vimrc文g?br> 2、设|语法高亮显C?br> 1) 打开vimrcQ添加以下语句来使得语法高亮昄Q?br> syntax on 2) 如果此时语法q是没有高亮昄Q那么在/etc目录下的profile文g中添加以下语句: export TERM=xterm-color 3、设|Windows风格的C/C++自动~进Q添加以下set语句到vimrc中) 1Q不讨论制表Wؓ8q是?较好Q这里设|(软)制表W宽度ؓ4Q?br> set tabstop=4 set softtabstop=4 2Q设|羃q的I格Cؓ4 set shiftwidth=4 3Q设|自动羃q:x行的~进g上一行相{;使用 noautoindent 取消讄Q?br> set autoindent 4Q设|?C/C++ 语言的自动羃q方式: set cindent 5Q设|C/C++语言的具体羃q方式(以我的windows风格ZQ: set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s 6Q如果想在左侧显C文本的行号Q可以用以下语句Q?br> set nu 7Q最后,如果没有下列语句Q就加上吧: if &term=="xterm" set t_Co=8 set t_Sb=^[[4%dm set t_Sf=^[[3%dm endif PSQ?br> 自动~进有两个选项: 代码: set autoindent set cindent autoindent 是自动~进的意思,当你在输入状态用回R键插入一个新行,或者在 normal 状态用 o 或?O 插入一个新行时Qautoindent 会自动地当前行的羃q拷贝到新行Q也是"自动寚w”Q当然了Q如果你在新行没有输入Q何字W,那么q个~进自动删除? cindent ׃同了Q它会按?C 语言的语法,自动地调整羃q的长度Q比如,当你输入了半条语句然后回车时Q羃q会自动增加一?TABSTOP |当你键入了一个右花括hQ会自动减少一?TABSTOP 倹{?/span> |
deb http://Ubuntu.uestc.edu.cn/ubuntu/ karmic main restricted universe multiverse
deb http://Ubuntu.uestc.edu.cn/ubuntu/ karmic-backports main restricted universe multiverse
deb http://Ubuntu.uestc.edu.cn/ubuntu/ karmic-proposed main restricted universe multiverse
deb http://Ubuntu.uestc.edu.cn/ubuntu/ karmic-security main restricted universe multiverse
deb http://Ubuntu.uestc.edu.cn/ubuntu/ karmic-updates main restricted universe multiverse
deb-src http://Ubuntu.uestc.edu.cn/ubuntu/ karmic main restricted universe multiverse
deb-src http://Ubuntu.uestc.edu.cn/ubuntu/ karmic-backports main restricted universe multiverse
deb-src http://Ubuntu.uestc.edu.cn/ubuntu/ karmic-proposed main restricted universe multiverse
deb-src http://Ubuntu.uestc.edu.cn/ubuntu/ karmic-security main restricted universe multiverse
deb-src http://Ubuntu.uestc.edu.cn/ubuntu/ karmic-updates main restricted universe multiverse
$ rar --help 用法: rar <命o> -<选项 1> -<选项 N> <压羃档案> <文g...> <@文g列表...> <解压~\径\> <命o> a d文g到压~档?br> c d压羃档案注释(注释的大最大不能超q?2000字节) cf d文g备注Q?当?v'参数时显C文件备注,最大不能超q?2767字节Q?br> ch 改变压羃档案参数 cw 向指定文件写入档案备?br> d 从档案中删除文g e 解压~文件到当前目录(不创ZQ何子目录) f h档案中的文g(更新q些文g自它们被打包之后产生的变化,不在压羃档案中增加新? i[par]=<str> 在档案中查找特定字符 k 锁定档案(M试图改变压羃档案中内容的命o都会被忽? l[t,b] 列出档案[technical, bare] m[f] Ud到压~档案中[只针Ҏ件] p 打印文g到标准输?br> r 修补压羃档案 rc 重徏丢失的分?br> rn 重命名压~档案中的文?br> rr[N] d数据恢复记录 rv[N] 创徏恢复?br> s[name|-] 压羃档案与SFX(自解压文?之间的{?br> t 试压羃档案文g u 更新压羃档案中的文g v[t,b] 列出压羃档案的详l信息[technical,bare] x 解压~到完整路径 <选项> - 停止寚w项的扫?br> ad q加档案名称到目标\?br> ag[format] 使用当前数据生成压羃档案?br> ap<path> 在档案内部设|\?br> as 同步档案内目?br> av 讄认证?只有注册版提供此功能) av- 关闭认证?br> c- 关闭备注昄 cfg- 关闭d讄 cl 转换名称为小写字?br> cu 转换名称为大写字?br> df 压羃后删除原文g dh 打开׃n文g ds 关闭针对于稳固档案的名称排序 dw 压羃后擦除文?br> e[+]<attr> 讄文g排除与包含属?br> ed 不添加空目录 en 不设|档案结束块 ep 名称中不包含路径 ep1 名称中不包含基本文g目录 ep3 展开路径到完整包含的驱动器名 f h文g hp[password] 加密文g数据和文件头?br> id[c,d,p,q] 关闭消息 ierr 发送所有消息到标准错误输出 ilog[name] 记录错误日志到文件中(只有注册版提供此功能) inul 关闭所有消?br> isnd 打开声音 k 锁定压羃档案 kb 保持被解压过的已损坏的文?br> m<0..5> 讄压羃{(0-存储...3-默认...5-最? mc<par> 讄高压羃参数 md<size> Dictionary size in KB (64,128,256,512,1024,2048,4096 or A-G) ms[ext;ext] 存储指定的文件类?br> n<file> 仅包含指定的文g n@ 从标准输入读取文件名到包含内容中 n@<list> 在指定列表文件中包含文g o[+|-] 讄重写模式 ol 替文件保存符可接作?br> or 自动重命名文?br> ow 保存zd储文件的拥有者与组 p[password] 讄密码 p- 不询问密?br> r 对子目录q行递归操作 r0 仅用通配W名U对子目录进行递归操作 rr[N] d数据恢复记录 rv[N] 创徏恢复 s[<N>,v[-],e] 创徏E_档案压羃 s- 关闭E_档案压羃 sc<chr>[obj] 讄指定的字W串 sfx[name] 创徏SFX档案 si[name] 从标准输入读取数?br> sl<size> 处理文g的大小于指定的?br> sm<size> 处理文g的大大于指定的?br> t 压羃后测试文?br> ta<date> 处理修改日期为指定日期之后的文gQ?lt;date>格式: YYYYMMDDHHMMSS tb<date> 处理修改日期为指定日期之前的文gQ?lt;date>格式: YYYYMMDDHHMMSS tk 保持档案最初的旉 tl 讄档案旉为据现在最q的文g旉 tn<time> 处理比指定时间新的文?br> to<time> 处理比指定时间旧的文?br> ts<m,c,a>[N] 保存或存储文件时?修改,创徏,讉K) u 更新文g v 创徏自动大小的卷或列出所有卷 v<size>[k,b] 创徏指定大小的卷size=<size>*1000 [*1024, *1] ver[n] 文g版本控制 vn 使用旧的卷命名体p?br> vp 在每个卷之前暂停 w<path> 指定工作目录 x<file> 排除指定文g x@ 排除从标准输入中d的文件名U?br> x@<list> 从指定列表文件中指定要排除的文g y 讑֮所有回{ؓyes z[file] 从文件中d压羃档案的备?/td> |
$rar a abc.rar file1 |
$rar e abc.rar |
$rar x abc.rar |
$rar c abc.rar |
Processing archive test. rarReading comment from stdin |
$rar ch abc.rar file1 |
Reading comment for abc.rar : file1 from stdin |
$rar cw abc.rar test.txt |
$rar d abc.rar file1 |
$unrar --help 用法: unrar <command> -<switch 1> -<switch N> <archive> <files...> <@listfiles...> <path_to_extract\> <命o> e 解压文g到当前目?br> l[t,b] 列出压羃文档信息[technical, bare] p 打印文g到标准输?br> t 试压羃我俄?br> v[t,b] 列出压羃文档的详l信息[technical,bare] x 解压文g到完整\?/td> |
1、下?/span> ibus-table-wubi-1.2.0.20090715.tar.gz ?/span>
2、解压后q入目录序执行以下命oQ?/span>
./configure
make
3、在此目录下会生成一个table目录Q里面有个文件叫wubi86.db
sudo cp wubi86.db /usr/share/ibus-table/tables
4、重启ibusQ再把五W?6dq去。就可以了?/span>
转自http://blog.csdn.net/hgd250/archive/2009/11/26/4875711.aspx
作者:北南南北
来自Q?/strong>LinuxSir.Org
摘要Q?/strong>vi ~辑器是最常用的文档创建和~辑工具Q初学者应该学会简单应用vi Q学会在vi 中做单的修改、删除、插入、搜索及替换作业Q如果您是新手,不妨看看本文Q或许这文档能让您在最短的旉内学会vi的简单操作;
目录
+++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++
1、关于文本编辑器Q?br>
文本~辑器有很多Q比如图形模式的gedit、kwrite、OpenOffice ... ... Q文本模式下的编辑器有vi、vimQvi的增强版本)和nano ... ... vi和vim是我们在Linux中最常用的编辑器。我们有必要介绍一下viQvimQ最单的用法Q以让Linux入门U用户在最短的旉内学会用它?/p>
nano 工具和DOS操作pȝ下的edit操作怼Q用简单,我们不作介绍了,如果您有兴趣Q不妨尝试一下;
2、vi ~辑器;
Z么要学会单应用vi
vi或vim是Linux最基本的文本编辑工Pvi或vim虽然没有囑Ş界面~辑器那L鼠标的简单操作,但vi~辑器在pȝ理、服务器理 中,永远不是囑Ş界面的编辑器能比的。当您没有安装X-windows桌面环境或桌面环境崩溃时Q我们仍需要字W模式下的编辑器viQ?/p>
vi或vim ~辑器在创徏和编辑简单文档最高效的工P
3、vi ~辑器的使用ҎQ?br>
3.1 如何调用vi Q?br>
[root@localhost ~]# vi filename
~
~
~
~
~
~
~
~
3.2 vi 的三U命令模式;
CommandQ命令)模式Q用于输入命令;
InsertQ插入)模式Q用于插入文本;
VisualQ可视)模式Q用于视化的的高亮ƈ选定正文Q?/code>
3.3 文g的保存和退出;
Command 模式是vi或vim的默认模式,如果我们处于其它命o模式Ӟ要通过ESC键切换过来?/p>
当我们按ESC键后Q接着再输?hQvi会在屏幕的最下方{待我们输入命oQ?/p>
:w 保存Q?br>:w filename 另存为filenameQ?br>:wq! 保存退出;
:wq! filename 注:以filename为文件名保存后退出;
:q! 不保存退出;
:x 应该是保存ƈ退?Q功能和:wq!相同
3.4 光标UdQ?br>
当我们按ESCq入Command模式后,我们可以用下面的一些键位来Ud光标Q?/p>
j 向下Ud一行;
k 向上Ud一行;
h 向左Ud一个字W;
l 向右Ud一个字W;
ctrl+b 向上Ud一屏;
ctrl+f 向下Ud一屏;
向上头 向上UdQ?br>向下头 向下UdQ?br>向左头 向左UdQ?br>向右头 向右UdQ?/code>
我们~辑一个文件时Q对?j、k、l和h键,q能在这些动作命令的前面加上数字Q比?3jQ表C向下移?行?/p>
3.5 插入模式Q文本的插入Q;
i 在光标之前插入;
a 在光标之后插入;
I 在光标所在行的行首插入;
A 在光标所在行的行末插入;
o 在光标所在的行的上面插入一行;
O 在光标所在的行的下面插入一行;
s 删除光标后的一个字W,然后q入插入模式Q?br>S 删除光标所在的行,然后q入插入模式Q?/code>
3.6 文本内容的删除操作;
x 一个字W;
#x 删除几个字符Q?表示数字Q比?xQ?br>dw 删除一个单词;
#dw 删除几个单词Q?用数字表C,比如3dw表示删除三个单词Q?br>dd 删除一行;
#dd 删除多个行,#代表数字Q比?dd 表示删除光标行及光标的下两行Q?br>d$ 删除光标到行内容Q?br>
J 清除光标所处的行与上一行之间的I格Q把光标行和上一行接在一P
3.7 恢复修改及恢复删除操作;
u 撤消修改或删除操作;
按ESC键返回CommandQ命令)模式Q然后按u键来撤消删除以前的删除或修改Q如果您x消多个以前的修改或删除操作,h多按几次u。这和Word的撤消操作没有太大的区别Q?/p>
3.8 可视模式Q?br>
在最新的Linux发行版本中,vi提供了可视模式,因ؓq个功能是vim才有的。如果您用的vi没有q个功能Q就换成vim有了。打开可视模式Q按ESC键,然后按vp入可视模式;
可视模式为我们提供了极ؓ友好的选取文本范围Q以高亮昄Q在屏幕的最下方昄有;
-- 可视 --
?br>
--VISUAL--
如图Q?/strong>
q入可视模式Q我们就可以用前面所说的命o行模式中的光标移动指令,可以q行文本范围的选取?/p>
选取文本范围有何用?
我们可以Ҏ部䆾删除作业Q按d键就删除了我们选中的内宏V?br> 选中内容后,我们按ypC复Ӟ按d表示删除Q?/p>
值得一提是的删除的同时Q也表示复制。我们返回到命o模式Q然后移动光标到某个位置Q然后按shift+p键,把刚才删除的内容脓上了。我们先在这里提一句,在后文,我们q得详细说说?/p>
退出可视模式,q是用ESC键;
3.9 复制和粘帖的操作Q?br>
其实删除也带有剪切的意思,当我们删除文字时Q可以把光标Ud到某处,然后按shift+p键就把内容脓在原处,然后再移动光标到某处Q然后再按p或shift+p又能贴上Q?/p>
p 在光标之后粘帖;
shift+p 在光标之前粘?/code>
来D一例:
比如我们x一个文档的W三行复制下来,然后帖到W五行的后面Q我们应该怎么做呢Q?/p>
有两U方法;
W一U方法:
先把W三行删除,把光标移动到W三行处Q然后用dd动作Q接着再按一下shift+p键。这样就把刚才删除的W三行帖在原处了?/p>
接着我们再用k键移动光标到W五行,然后再按一下p键,q样把W三行的内容又帖到第五行的后面了Q?/p>
W二U方法;
q入可视模式Q按ESC键,然后按v键。移动鼠标指针,选中W三行的内容Q然后按y键复Ӟ再移动指针到W五行,最后按p键;
所以复制和_脓操作Q是命o模式、插入模式及可视模式的综合运用;我们要学会各U模式之间的切换Q要常用ESC键;更ؓ重要的学会在命o模式下移动光标;
3.10 关于行号Q?br>
有时我们配置一个程序运行时Q会出现配置文gX行出现错?。这时我们要用到行号相关的操作;
为所有内Ҏ加行P
按ESC键,然后输入Q?/p>
:set number
光标所处位|?/strong>
在屏q的右下角,有类似如下的Q?/p>
57,8 27%
在这之中Q?7表示W?7行,8表示W?个字W;
3.11 查找和替换功能;
3.11.1 查找Q?br>
首先Q我们要q入ESC键,q入命o模式Q我们输??p入查找模式了Q?/p>
/SEARCH 注:正向查找Q按n键把光标UdC一个符合条件的地方Q?br>?SEARCH 注:反向查找Q按shift+n 键,把光标移动到下一个符合条件的
举一例:比如我想在一个文件中扑ֈswap单词Q我应该如下做;
首先按ESC键,q入命o模式Q然后输入;
/swap
?br>?swap
3.11.2 替换Q?br>
按ESC键进入命令模式;
:s /SEARCH/REPLACE/g 注:把当前光标所处的行中的SEARCH单词Q替换成REPLACEQƈ把所有SEARCH高亮昄Q?br>:%s /SEARCH/REPLACE 注:把文档中所有SEARCH替换成REPLACEQ?br>:#,# s /SEARCH/REPLACE/g 注:Q号表示数字Q表CZ多少行到多少行,把SEARCH替换成REPLACEQ?/code>
注:在这之中Qg表示全局查找Q我们注意到Q就是没有替换的地方Q也会把SEARCH高亮昄Q?/p>
举例说明Q?/strong>
比如我们有一文档要修改Q?/p>
我们把光标所在的行,把所有单词theQ替换成THEQ应该是Q?/p>
:s /the/THE/g
我们把整文档的所有的the都替换成THEQ应该是Q?
:%s /the/THE
我们仅仅是把W?行到W?0行中的theQ替换成THEQ应该是Q?/p>
:1,10 s /the/THE/g
4、关于本文;
我写本文的目的是让新手在最短的旉内用vi或vim创徏、编辑和修改文gQ所以说q篇文档q不是大而全的vi手册。如果把vi所有的功能都说全了Q至得写一本千늚手册Q本也没有涉及更为高U的vi用法。如果想了解的更多,h找man和helpQ?/p>
5、后讎ͼ
到目前ؓ止,关于目录和文件的操作Q我写过有几了Q从文g和目录的创徏、删除、复制到属性操作,最后到文g修改{系列文档。这些文档都是有相关性的Q如果把q些相关性的文档qv来,是一个整体知识块。我们只有掌握了q些知识Q才能实现文件系l的理?/p>
在以后我会写什么内容呢Q?Q?可能会补充一下文件的查找Q其实以前有cM文档Q到时我ȝ一下,贴出来给大家看看p了?/p>
下一步是准备|络基础文档中,|络基础比较重要Q这是我计划的下一个重炏V。。。。。。?/p>
6、参考文档;
man vi 和vi --help
得到libflashplayer.so文g?br>
复制libflashplayer.so到火狐浏览器插g文g夹下Q?/font>
命o? sudo cp libflashplayer.so /usr/lib/mozilla/plugins \*此目录可能根据火狐不同的版本有所不同Q大家可以先去lib下面 搜烦一下mozilla*\
libflashplayer.so 复制q去之后Q重启firefox ?它就会提C有更新了?/p>
用firefox 播放flash时出Cؕ码解冻I
sudo vim /etc/fonts/conf.d/49-sansserif.conf
?br>
<edit name="family" mode="append_last">
<string>sans-serif</string>
</edit>
红色部分改?lt;string>sans</string>