本站首页    管理页面    写新日志    退出


«October 2025»
1234
567891011
12131415161718
19202122232425
262728293031


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7631409
建立时间:2006年5月29日




[网络与系统管理]Debian学习笔记2
软件技术

lhwork 发表于 2007/2/2 10:08:29

Chapter 1. 文件系统 Table of Contents 1.1. 管理文件系统 1.2. 文件和目录的权限 1.3. 文件属性 1.4. 文件访问控制列表(Access Control Lists,ACL) 1.5. 加密文件系统 1.5.1. encfs 1.5.2. cfs 1.5.3. truecrypt 1.6. RAID 文件系统是一个操作系统的重要组成部分,是操作系统在计算机硬盘存储和检索数据的逻辑方法。Linux通过VFS(虚拟文件系统)支持多种文件格式。Linux支持的各种常用的文件系统有以下几种。 Table 1.1. Linux文件系统类型 文件系统 类型名称 用途 Second Extended filesystem ext2 最常用的Linux文件系统 Three Extended filesystem ext3 ext2的升级版,带日志功能 Minix filesystem minix Minix文件系统,很少用 RAM filesystem ramfs 内存文件系统,速度超快 Network File System(NFS) NFS 网络文件系统,由SUN发明,主要用于远程文件共享 DOS-FAT filesystem msdos ms-dos文件系统 VFAT filesystem vfat Windows95/98采用的文件系统 NT filesystem ntfs Windows NT采用的文件系统 HPFS filesystem hpfs OS/2采用的文件系统 /proc filesystem proc 虚拟的进程文件系统 ISO 9660 filesystem iso9660 大部份光盘所用的文件系统 UFS filesystem ufs Sun OS所用的文件系统 Apple Mac filesystem hfs Macintosh机采用的文件系统 Novell filesystem ncpfs Novell服务器所采用的文件系统 SMB filesystem smbfs Samba的共享文件系统 XFS filesystem xfs 由SGI开发的先进的日志文件系统,支持超大容量文件 JFS filesystem jfs IBM的AIX使用的日志文件系统 ReiserFS filesystem reiserfs 基于平衡树结构的文件系统 在Debian Administration上有篇文章,测试了ext3, reiser, xfs, jfs四种日志文件系统,XFS是综合评分最高的文件系统。网址是:http://www.debian-administration.org/articles/388 1.1. 管理文件系统 使用mount命令就可在Linux中挂载各种文件系统,如:debian:~# mount -t vfat /dev/hda1 /mnt/hda1 上面这条命令就把/dev/hda1这个fat分区挂载到了/mnt/hda1目录下。“-t”参数指定文件系统类型,常见的文件类型见上面“Linux文件系统类型”一表的内容。在挂载硬盘时,还有一个“-o”参数,它可指定挂载文件系统时的一些选项,如: codepage=xxx,指定代码页,如936(简体中文)、437(英文)等。 iocharset=xxx,指定字符集,如utf8、gb2312等。 ro,以只读方式挂载。 rw,以读写方式挂载。 mount命令的参数选项是很丰富的,以上介绍的只是常用一些功能,详细介绍请参考man手册。 使用mkfs命令可以创建文件系统,如:debian:~# mkfs -t ext2 /dev/fd0 1400 这条命令在软盘上创建一个容量为1.44M的ext2文件系统。 使用fsck命令可以检查文件系统,如:debian:~# fsck -t ext2 /dev/hda3 使用mkswap命令可以创建swap空间,如:debian:~# mkswap -c /dev/hda4 debian:~# swapon /dev/hda4 #启用新创建的swap空间,停用可使用swapoff命令 设备文件是Linux中一种特殊的文件,它对应每种硬件设备,如硬盘、软驱等。它可以像文件一样对它进行读写操作。设备文件位于/dev目录下,/dev/hda代表第一个IDE硬盘,/dev/fd0代表第一个软驱。/dev/null是一个虚设的设备,它就像一个无底的黑洞,任何对/dev/null的写入都会成功,但数据会消失得无影无踪,没有任何反馈。所以我们经常把不想在屏幕显示的信息全部送到/dev/null中。下面是一个设备文件的信息:brw-rw---- 1 root disk 3, 0 2005-07-07 05:29 /dev/hda 大家注意文件的size列,它是由逗号分隔的两个数字(3,0),第一个值代表主设备号(major device number),第二个值代表次设备号(minor device number)。主设备号对应内核相应的功能,而次设备号对应由驱动程序管理的特定设备。所以同一类设备的主设备号都是相同的,次设备号则不同。内核根据主设备号将I/O的要求导向到适当的驱动程序上,而该驱动程序以次要编号来判断出指定要使用的设备。系统安装同,默认已安装了大部份的设备文件,在/dev目录下可查询到很多的设备文件。但有时我们也需新增一设备文件,这时我们可使用mknod命令,命令格式如下:mknod -m permissions name type major minor -m permissions参数可有可无,主要用于设置设备文件的权限 name是所要创建的设备名,要有完整的路径,如/dev/rhda type是设备文件的类型,c代表字符设备,b代表块设备 major指定设备的主编号 minor指定设备的次编号 示例: # mknod -m 644 /dev/random c 1 8 使用dumpe2fs device | more可显示文件系统的详细信息。如:debian:/var/log# dumpe2fs /dev/hdb1 |more dumpe2fs 1.37 (21-Mar-2005) Filesystem volume name: <none> Last mounted on: <not available> Filesystem UUID: ef214b73-810a-4098-bf01-ab9a85d9c651 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: filetype sparse_super Default mount options: (none) Filesystem state: not clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 3662848 Block count: 7323624 Reserved block count: 366181 Free blocks: 428630 Free inodes: 3470727 First block: 0 Block size: 4096 Fragment size: 4096 Blocks per group: 32768 #文件系统中每个块组的大小 Fragments per group: 32768 Inodes per group: 16352 Inode blocks per group: 511 Last mount time: Thu Jul 7 20:09:57 2005 Last write time: Thu Jul 7 23:42:51 2005 Mount count: 15 Maximum mount count: 30 Last checked: Fri Jun 17 05:31:36 2005 Check interval: 2592000 (1 month) Next check after: Sun Jul 17 05:31:36 2005 Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 128 superblock是每个分区中最重要的信息,如果分区的superblock信息被破坏,则分区就不能使用。所以每个分区的superblock都被备份了。如果ext2文件系统的块组大小是32768,则superblock备份就存放在以32769开始的块组中。使用e2fsck -f -b 32769 /dev/hdb1就可用superblock备份信息修复文件系统的superblock 1.2. 文件和目录的权限 Linux系统以安全性高著称,它有完善的文件和目录权限控制机制。使用ls -l命令可查看系统中文件和目录的权限。如:debian:~# ls -l drwxr-xr-x 3 root root 4096 2005-05-05 02:01 SAPGUI -rw-r--r-- 1 root root 66842 2005-03-27 17:20 Screenshot.png -rw-r--r-- 1 root root 72 2005-03-03 20:24 setup.log -rwxr-xr-x 1 root root 268 2005-03-13 15:44 test ... 最左边的一串字符是文件和目录的权限控制字符串,权限字符串的第一个字母代表文件类型,不同字符代表不同的意思: -,一般文件 d,目录 l,符号连接 b,块特殊文件 c,字符特殊文件 s,socket套接字 p,命名管道 后面9个字符分成三组,分别代表user(用户),group(组)和other(其它)的许可权限。每组有三个权限位,代表具体的权限: r,表示文件可读或目录可读,位于三位权限组的第一位置。 w,表示文件可修改或目录可修改,位于三位权限组的第二位置。 x,表示文件可执行或目录中的文件可执行,位于三位权限组的第三位置。 s,表示set UID或set GID。位于user或group权限组的第三位置。如果在user权限组中设置了s位,则当文件被执行时,该文件是以文件所有者UID而不是用户UID执行程序。如果在group权限组中设置了s位,当文件被执行时,该文件是以文件所有者GID而不是用户GID执行程序。s权限位是一个敏感的权限位,容易造成系统的安全问题。请在设置时小心,并注意系统中已有的SUID或SGID文件和目录。 t,表示粘着位(sticky)。具有该位的文件和目录只有创建者才能删除。 -,表示没有权限。该字符可出现在任何位置,表示没有许可权限。 权限位后面的数字3,1,1,1表示硬链接的链接数,3表示有三个硬链接,1表示有一个硬链接。 常用目录权限设置 0755,所有人都可以查看目录的内容,但只有root或所有者才能修改。 1777,所有人都可在该目录下创建文件,但不能删除其它用户创建的文件。一个典型目录就是/tmp。 0700,只能由所有者访问的目录。如home目录。 当我们在linux中创建一个文件或目录时,系统通过umask环境变量来控制默认的权限位设置。umask的值多为022,在profile文件里设置。设置格式如下:... umask 022 ... 在umask值的2表示屏蔽写权限,7表示屏蔽读写权限。最常用的值是022,027和077。 使用chmod,chown和chgrp改变文件的访问权限,使用setuid和setgid来改变特殊位。 使用ls -i filename命令可以列出文件的inode信息。如:localhost:~# ls -i simple.png 32563 simple.png 32563就是simple.png的inode节点的值。 inode值相同的链接是硬链接,inode值不同的是软链接。 硬链接示例:localhost:~# ls -li simple.png 32563 -rw-r--r-- 1 root root 1574 2005-12-15 14:59 simple.png localhost:~# ln simple.png simple1.png #创建硬链接 localhost:~# ls -il simple1.png 32563 -rw-r--r-- 2 root root 1574 2005-12-15 14:59 simple1.png localhost:~# ls -li simple1.png 32563 -rw-r--r-- 2 root root 1574 2005-12-15 14:59 simple1.png #inode值与simple.png一样。链接值变成2 #改变互为硬链接的文件内容时,另一个文件的内容也相应被改变。但删除一个文件不会影响另一个文件。 软链接示例:localhost:~# ls -il simple.png 32563 -rw-r--r-- 1 root root 1574 2005-12-15 14:59 simple.png localhost:~# ln -s simple.png simple1.png #创建软链接 localhost:~# ls -il simple.png 32563 -rw-r--r-- 1 root root 1574 2005-12-15 14:59 simple.png localhost:~# ls -il simple1.png 32836 lrwxrwxrwx 1 root root 10 2006-04-27 13:16 simple1.png -> simple.png #inode值与simple.png不一样了。 #软链接相当于重新创建一个链接文件,inode值不同了。源文件的链接值也不会增加。删除源文件,软链接文件也失效。 1.3. 文件属性 使用lsattr和chattr命令可以显示和改变文件属性。 s(secure deletion),当文件被删除时,分配在该文件中的所有块都会清零,并写入磁盘,保证文件的数据被彻底清除,不能被访问。 u(undelete),该属性可保存被删除的文件内容。 c(compress),当文件保存在磁盘时,内核会自动压缩该文件。 S(synchronous),当修改具有该属性的文件时,所有更改将同步写入磁盘。 i(immutable),设置了该属性的文件不允许更改。 a(append only),文件只能以追加模式打开,只有root才能设置或删除主该属性。 d(no dump),具有该属性的文件不能被dump工具备份。 A(no atime),不更新atime值,atime是文件文件的访问时间戳。 1.4. 文件访问控制列表(Access Control Lists,ACL) 传统的Linux文件系统的权限控制是通过user、group、other与r(读)、w(写)、x(执行)的不同组合来实现的。随着应用的发展,这些权限组合已不能适应现时复杂的文件系统权限控制要求。例如,我们可能需把一个文件的读权限和写权限分别赋予两个不同的用户或一个用户和一个组这样的组合。传统的权限管理设置起来就力不从心了。为了解决这些问题,Linux开发出了一套新的文件系统权限管理方法,叫文件访问控制列表(Access Control Lists,ACL)。 要启用ACL,需内核提供ACL支持和安装ACL管理工具。现在的2.6内核都提供ACL支持,在编译内核时只要在file systems分支下,把Ext2 POSIX Access Control Lists或Ext3 POSIX Access Control Lists选中就可以了。用以下命令挂接硬盘启用文件系统ACL。debian:~# mount -t ext2 -o acl /dev/hda1 /mnt/hda1 我们也可把选项写到/etc/fstab文件中,在需启用acl的分区选项包含acl参数。 ACL有两种,一种是存取ACL(access ACLs),针对文件和目录设置访问控制列表。一种是默认ACL(default ACLs),只能针对目录设置。如果目录中的文件没有设置ACL,它就会使用该目录的默认ACL。要设置ACL,首先要安装管理工具,它们分别是getfacl和setfacl,在debian中只要安装acl软件包即可。debian:~# apt-get install acl setfacl工具可为文件和目录ACL,命令格式如下:setfacl -m <rules> <files> rules的格式如下,多条规则间可用逗号分隔。u:uid:perms #为用户设置ACL,perms为r、w、x的组合 g:gid:perms #为组设置ACL o:perms #为其它组设置ACL m:perms #设置有效权限屏蔽 下面是setfacl的实例:debian:~# setfacl -m u:jims:rw testfile.txt #-m选项表示添加或修改文件或目录的权限访问列表 debian:~# setfacl -x u:jims:rw testfile.txt #-x选项表示删除文件或目录的访问列表 要设置默认的ACL,只在rules前加一个d:,以表示指定一个目录,如:debian:~# setfacl -m d:o:rx /data getfacl用以显示文件或目录的ACL,如:debian:getfacl debian.xml # file: debian.xml # owner: jims # group: jims user::rwx group::r-- other::r-- 500)this.width=500'> tar和dump工具不能备份ACL文件,如果我们要备份ACL文件系统,可以使用star工具。另外,samba可通过--with-acl-support编译选项支持ACL。 1.5. 加密文件系统 如果你想对保存在磁盘中的目录和文件进行加密,保护你个人信息的安全,我们可以使用加密文件系统。在Linux中的加密文件系统有很多种选择,如encfs(Encrypted Filesystem),cfs(Cryptographic Filesystem)和truecrypt等。 1.5.1. encfs encfs为我们提供一个用户级的加密文件系统,每个用户都可为自已的目录或文件创建一个加密的文件系统。这个文件系统只能由你加载和访问,其他用户只能看到加密后的内容。encfs使用fuse库和fuse内核模块来提供文件系统的接口。encfs也是基于GPL的开源软件。 现在最新的2.6内核已支持fuse,我在这里测试的内核版本是2.16.17.1。使用前要把fuse编译进内核,需选中内核选项路径中的File systems-->Filesystem in Userspace support选项,重新编译。最后安装encfs相关软件:debian:~# apt-get install encfs fuse-utils 系统默认创建一个fuse组,如果一般用户要在主目录下创建加密文件系统,则要把用户加入fuse组。下面是用一般用户创建加密文件系统的过程。yangjing@localhost:~$ encfs ~/encode ~/decode #创建命令,要用绝对路径 The directory "/home/yangjing/encode/" does not exist. Should it be created? (y,n) y #创建加密文件系统目录 The directory "/home/yangjing/decode" does not exist. Should it be created? (y,n) y #创建加密文件系统加载点 Creating new encrypted volume. Please choose from one of the following options: enter "x" for expert configuration mode, enter "p" for pre-configured paranoia mode, anything else, or an empty line will select standard mode. ?> p Paranoia configuration selected. Configuration finished. The filesystem to be created has the following properties: Filesystem cipher: "ssl/aes", version 2:1:1 Filename encoding: "nameio/block", version 3:0:1 Key Size: 256 bits Block Size: 512 bytes, including 8 byte MAC header Each file contains 8 byte header with unique IV data. Filenames encoded using IV chaining mode. File data IV is chained to filename IV. -------------------------- WARNING -------------------------- The external initialization-vector chaining option has been enabled. This option disables the use of hard links on the filesystem. Without hard links, some programs may not work. The programs 'mutt' and 'procmail' are known to fail. For more information, please see the encfs mailing list. If you would like to choose another configuration setting, please press CTRL-C now to abort and start over. Now you will need to enter a password for your filesystem. You will need to remember this password, as there is absolutely no recovery mechanism. However, the password can be changed later using encfsctl. New Encfs Password: #输入验证密码 Verify Encfs Password: yangjing@localhost:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/hda3 9.4G 7.6G 1.4G 85% / tmpfs 153M 0 153M 0% /dev/shm tmpfs 10M 56K 10M 1% /dev //t02/yangjing 29G 26G 3.1G 90% /root/data /dev/hda1 8.7G 7.7G 616M 93% /mnt/hda1 encfs 9.4G 7.6G 1.4G 85% /home/yangjing/decode #成功加载encfs文件系统 yangjing@localhost:~$ 现在我们在decode目录下创建的任何内容都会自动被加密并保存在encode目录下。下面我们试试在加载点创建一些文件和目录。yangjing@localhost:~$ cd decode/ yangjing@localhost:~/decode$ mkdir test yangjing@localhost:~/decode$ echo 'encfs test' > test.txt yangjing@localhost:~/decode$ ls test test.txt yangjing@localhost:~/decode$ cd ../encode/ yangjing@localhost:~/encode$ ls 09LTiJuKxiD20yIN0k,l8Q5p KaUAfbP3JMH8PAstrS-5b7eO #文件和目录已自动生成并已加密 yangjing@localhost:~/encode$ cat 09LTiJuKxiD20yIN0k,l8Q5p [e?f%v;-?B?'TDN{K6 #内容也已加密 yangjing@localhost:~/encode$ 使用完加密文件系统后,我们要把加密文件系统卸载掉。这样其他用户就只能看到~/encode目录下加密后的目录和文件,从而有效保护你私人信息的安全。yangjing@localhost:~$ fusermount -u ~/decode #卸载encfs文件系统 yangjing@localhost:~$ cd decode/ yangjing@localhost:~/decode$ ls #目录为空 yangjing@localhost:~/decode$ cd ../encode/ yangjing@localhost:~/encode$ ls #目录内容已加密 09LTiJuKxiD20yIN0k,l8Q5p KaUAfbP3JMH8PAstrS-5b7eO yangjing@localhost:~/encode$ cat 09LTiJuKxiD20yIN0k,l8Q5p [e?f%v;-?B?'TDN{K6 yangjing@localhost:~/encode$ df #加密文件已卸载 Filesystem 1K-blocks Used Available Use% Mounted on /dev/hda3 9851340 7906980 1443936 85% / tmpfs 156208 0 156208 0% /dev/shm tmpfs 10240 56 10184 1% /dev //t02/yangjing 30233600 27056640 3176960 90% /root/data /dev/hda1 9068616 7977548 630408 93% /mnt/hda1 其他用户访问加密文件系统时的效果:localhost:/etc# id uid=0(root) gid=0(root) groups=0(root) localhost:/etc# cd /home/yangjing/encode/ localhost:/home/yangjing/encode# ls 09LTiJuKxiD20yIN0k,l8Q5p KaUAfbP3JMH8PAstrS-5b7eO #密文 localhost:/home/yangjing/encode# vi 09LTiJuKxiD20yIN0k,l8Q5p localhost:/home/yangjing/encode# cat 09LTiJuKxiD20yIN0k,l8Q5p [e?f%v;-?B?'TDN{K6 #密文 localhost:/home/yangjing/encode# 在加密目录encode目录下,有一个文件叫.encfs5。它是加密文件系统的配置文件上,我们一定要备份好该文件,一旦丢失,你就不能恢复加密的文件。 1.5.2. cfs 1.5.3. truecrypt 还有通过loop文件系统来实现加密文件系统的方法,请参考以下链接: Cryptoloop,http://www.tldp.org/HOWTO/Cryptoloop-HOWTO/index.html loop-aes,http://loop-aes.sourceforge.net/ dm-crypt,http://www.saout.de/misc/dm-crypt/ 微软也推出一个免费的文件加密软件叫Microsoft Private Floder,可对电脑中的文件进行加密,其他用户没有密码就不能访问,即使是管理员也一样。 1.6. RAID RAID(Redundant Array of Inexpensive/independent Disks)是冗余磁盘陈列,可提高Linux磁盘性能和数据安全。 RAID级别介绍 RAID 0 通过分带在多个磁盘上分布I/O,可提高磁盘的读写性能。但可用性差,不提供数据冗余保护。 RAID 1 磁盘镜像,两个磁盘当一个磁盘使用,空间的利用率低,但它对数据提供了很好的保护。RAID 1平衡多个磁盘间的读,所以它的读性能是很好的。但当它写入数据时需同时在两块磁盘上操作,所以它的写性能很差。多用于文件服务器。 RAID 0+1 综合RAID 0和RAID 1优点的一种RAID形式,在提高可用性的同时又提高写性能。 RAID 3 通过在陈列中的一块单独的磁盘上存储奇偶校验信息来提供冗余。性能不佳,较少使用。 RAID 5 带奇偶数据校验的分带冗余系统,最少需要三块磁盘,可用容量是n-1块磁盘的容量。数据以分带格式存储在所有磁盘上。任何一块磁盘故障,我们仍可使用,不会丢失数据。因为使用了分带技术,在多块磁盘间平衡了读取操作,所以有很好的读性能。因为要在多块磁盘上写入奇偶校验信息,所以写性稍差。RAID 5是现时最常用的一种RAID形式。 Chapter 2. Bash Table of Contents 2.1. Bash的用户交互接口 2.1.1. 环境变量 2.1.2. 目录操作 2.1.3. 通配符 2.1.4. 输入/输出 2.1.5. 后台作业 2.1.6. 特殊字符 2.1.7. 控制键 2.2. 常用变量 2.3. 用户环境配置 2.3.1. .bash_profile、.bashrc、和.bash_logout 2.3.2. 选项 Shell是UNIX系统的用户接口,它接受用户的指令,并将它翻译成操作系统可以理解的命令,最后将结果返回给用户。简单说就是用户和内核打交道的界面。在UNIX发展的历史中,出现了几种shell,第一个主要的shell是Bourne shell(以其发明者Steven Bourne命名),它始于1979年,包含在unix第一个流行版本版本7中,在系统中称为“sh”。另一个shellC shell,在系统称为csh,它由Berkeley的California大学的Bill Joy编写,它首次发布于1981年的UNIX Berkeley Software Distribute(BSD)中。C shell的名称来源于其语句命令与C语言的相似。还有一个使用较多的shell是Korn shell,它是一个商业产品,类似于bash。以下重点介绍一下bash。其它的shell大家可查阅相关资料。 Bash是GNU系统的标准shell,正式发布于1988年11月10日,Brain Fox编写了bash的最初版本,1989年初,Chet Ramey加入开发,负责大量的故障调试及加入许多有用的特性。现在bash由Chet Ramey负责维护。我们可免费从FSF(Free Software Foundation)得到0.99以上的版本。现在最新的版本是2.05b,它提供了作业控制、命令行编辑模式、自定义函数、高级I/O等先进功能。可以用bash的命令行选项-version或打印环境变量BASH_VERSION的值来获得版本号。 优秀的管理员也是懒惰的管理员,他们喜欢用shell帮助他们自动完成各种管理工作。Linux系统很多服务都是通过shell脚本来启动,通过查看这些脚本,你可以了解服务的启动过程,从而为故障论断和系统优化做好准备。 2.1. Bash的用户交互接口 Bash的用户接口也就是我们经常说的字符界面,这是我们与系统交互的主要环境,我们可通过这个接口管理我们的系统。在系统引导时,第一个需要运行的进程是init,由init再衍生出一个getty终端进程,该进程打开一个终端窗口,提供标准输入、标准输出和标准错误。然后执行程序/bin/login,login程序提示输入密码,加密并验证密码。通过验证后系统进入登录shell,也就是bash。不同的登录shell可在passwd文件设置。bash会通过几个配置文件来初始化用户环境。首先bash会查找/etc/profile,并执行其中的命令,初始化系统级别环境。然后在用户目录下查找.bash_profile文件,并执行里d面的命令,初始化用户级别的环境。用户级别的设置可覆盖系统级别设置。最后会执行.bashrc用户环境设置文件,这时,默认提示符美元符号将显示在屏幕上。 2.1.1. 环境变量 进入bash后,系统可根据你的配置生成一系列的环境变量,这些环境变量可用export命令显示。下面是一些常的环境变量: $LOGNAME,当前登录的用户名。 $HOME,当前用户的主目录。 $PATH,当前用户的命令搜索路径。 $LANG,当前系统的语言环境。 $TZ,时区 $MAILCHECK,检查新邮件的间隔,单位是秒。 $PS1,命令行提示符。 $PS2,二级命令行提示符,也就是当你的命令行很长,在一行写不下,转到第二行时出现的提示符。 $PWD,当前目录。 2.1.2. 目录操作 Linux以树状结构组织文件和目录,目录可以包含文件,也可以包含其它目录。目录的最高层是根目录"/",其它所有文件和目录都是挂在根目录下,形成一个倒挂的目录树。 使用bash shell的cd命令可在目录树中移动,当前停留的位置叫工作目录或当前目录,可用"."表示。每个用户在/home目录下都有一个与用户名相同的目录,叫用户主目录。可用"~"符号表示,".."表示上一级目录。jims@localhost:~$ #位于jims用户的主目录 jims@localhost:~$ cd . jims@localhost:~$ #没变化 jims@localhost:~$ cd .. jims@localhost:/home$ #移动到上层目录 jims@localhost:/home$ cd ~ jims@localhost:~$ #回到用户主目录 jims@localhost:~$ pwd #显示当前目录 /home/jims 2.1.3. 通配符 在bash shell环境下,我们可用通配符来简化命令输入。 ?,匹配任意单个字符。 *,匹配任意字符串。 [set],匹配set中的任意字符。[!set]是取反操作,匹配不在set中的任意字符,如:[a-z] 匹配所有小写字符 [0-9] 匹配所有数字 [akz] 匹配a,k,z三个字符 [.,;] 匹配句点,逗号和分号 [!abc] 匹配除a,b,c之外的所有字符 下面是几个命令示例:jims@localhost:~$ ls *.py #显示当前目录下所有以.py结尾的文件 jims@localhost:~$ ls *.[cho] #显示当前目录下所有以c,h,o结尾的文件 jims@localhost:~$ ls ??? #显示所有文件名为三个字符的文件 大括号"{}"可用于扩展任意字符串,如:localhost:~/python# echo a{a,b,c}a aaa aba aca 我们也可用大括号做为通配符使用,如:jims@localhost:~$ ls *.{c,h,o} #效果同ls *.[cho] 2.1.4. 输入/输出 常用数据过滤命令 cat,将输入复制到输出。cat是"catenate"的缩写,是连接在一起的意思。 grep,从输入中检索字符串。 sort,对输入进行排序。 cut,从输入中抽取列。 sed,对输入进行编辑。 tr,对输入进行转换或删除操作。 使用"<"和">"可实现I/O重定向功能,如:$ ls > filename #输出重定向到filename文件,也就是生成一个filename文件,内容为ls命令执行的结果。 $ grep < filename #grep的命令参数从filename文件读取。 使用"|"可实现管道(pipeline)操作,管道操作可以把一个命令的输出重定向到另一个命令的输入,而不是文件,如:$ ls -l | more #先进行ls -l操作,再对操作结果进行more操作 2.1.5. 后台作业 bash shell允许在一个会话期间同时运行多个命令,正常情况下所有命令在前台运行。只有在一个命令运行完后才能输入一个命令。但如果我们在运行命令时在命令后加一个"&"符号,则该命令将转入后台运行,我们马上获得shell终端控制权,可输入另外一条命令。这种在后台运行的命令叫后台作业。后台作业主要用在一些需花很长时间来运行的命令上,如解压一个大的压缩文档。$ tar zxvf xen.tar.gz& [1] 2547 使用jobs命令可以查看后台作业状态。 2.1.6. 特殊字符 在bash中,有很多有特殊含义的特殊字符,下面是一个完整的列表: Table 2.1. 特殊字符 字符 含义 ~ 主目录 ` 命令替换 # 注释 $ 变量表达式 & 后台作业 * 字符通配符 ( 启动子shell ) 停止子shell \ 转义或续行 | 管道操作符 [] 通配符集 {} 命令块 ; shell命令分隔符,作用是可在一行输入多条shell命令。 ' 强引用,引号内所有内容保持字面意思。 " 弱引用,引号内某些内容保持字面意思。 < 输入重定向 > 输出重定向 / 路径分隔符 ? 通配符,匹配单个任意字符 ! 取反操作 2.1.7. 控制键 通过控制键可以控制shell的行为,下面是一些常用的控制键。 Table 2.2. 控制键 控制键 描述 Ctrl_C 中止当前命令 Ctrl_D 输入结束 Ctrl_\ 如果Ctrl_C无效,则中止当前命令 Ctrl_S 禁止屏幕输出 Ctrl_Q 开启屏幕输出 DEL或CTRL_? 删除最后的字符 Ctrl_U 删除整个命令行 Ctrl_Z 暂停当前命令 2.2. 常用变量 变量是随系统运行而变化的,灵活使这些变量可简化我们的操作和更好地控制bash shell的行为。$# 脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的进程ID号 $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数 $- 显示shell使用的当前选项,与set命令功能相同 $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 $0 脚本名称 $1..$9 第N个参数 2.3. 用户环境配置 为使Bash更好地为我们服务,我们需定制bash shell环境。 2.3.1. .bash_profile、.bashrc、和.bash_logout 上面这三个文件是bash shell的用户环境配置文件,位于用户的主目录下。其中.bash_profile是最重要的一个配置文件,它在用户每次登录系统时被读取,里面的所有命令都会被bash执行。.profile(由Bourne Shell和Korn Shell使用)和.login(由C Shell使用)两个文件是.bash_profile的同义词,目的是为了兼容其它Shell。在Debian中使用.profile文件代替.bash_profile文件。 .bashrc文件会在bash shell调用另一个bash shell时读取,也就是在shell中再键入bash命令启动一个新shell时就会去读该文件。这样可有效分离登录和子shell所需的环境。但一般来说都会在.bash_profile里调用.bashrc脚本以便统一配置用户环境。 .bash_logout在退出shell时被读取。所以我们可把一些清理工作的命令放到这文件中。 在/etc目录的bash.bashrc和profile是系统级(全局)的配置文件,当在用户主目录下找不到.bash_profile和.bashrc\时,就会读取这两个文件。.bash_history是bash shell的历史记录文件,里面记录了你在bash shell中输入的所有命令。可通过HISSIZE环境变量设置在历史记录文件里保存记录的条数。alias l = 'ls -l'是设置别名的语句,把它放在这些配置文档中就可使我们能用简单的'l'命令,代替'ls -l'命令。 500)this.width=500'> 当我们修改了这些配置件后,可用source .bash_profile命令使它修改内容马上生效。 2.3.2. 选项 bash shell中的选项可控制shell的行为和功能,我们可以通过shopt命令来设置。使用set命令也可以,但它已被shopt替代,但为了向下兼容,set命令还是可以使用的。使用不带参数的shopt命令可以列出当前shell中只能由shopt设置的选项,用shopt -o可列出可由set命令设置的选项。 下面是一些可由set命令基本的选项,默认是关闭的。emacs 进入emacs编辑模式 vi 进入vi编辑模式 ignoreeof 不允许单独使用Ctrl_D退出的用法,要使用exit。与IGNOREEOF=10等价 noclobber 不允许重定向覆盖已存在文件 noglob 不允许扩展文件名通配符 nounset 使用未定义的变量时给出错误 下面是一些只能由shopt命令设置的选项。cdspell 自动改正cd命令参数中的小错误 hostcomplete 以@开头时,按tab键可进行主机名的自动完成 dotgblob 以点开始的文件名被包含在路径名扩展中 mailwarn 显示邮件警告信息 shopt命令的选项如下:-p 显示可设置选项及当前取值 -s 设置每一选项为on -u 设置每一选项为off -q 不输出信息 -o Chapter 3. 软件包管理工具 Table of Contents 3.1. apt-get 3.2. apt-cache 3.3. apt-file 3.4. apt-key 3.5. wajig 3.6. 建立一个混合系统 3.7. 升级指定版本的软件包 3.8. 保持指定软件包的版本 3.1. apt-get 软件包管理是区分不同发行版的一大特征,如RedHat使用RPM软件包来管理软件,Debian使用Deb软件包来管理软件。apt-get是Debian的Deb软件包管理工具,它的最低底层还是调用dpkg包管理程序,通过apt-get工具可使我们很好地解决软件包的依赖关系,方便软件的安装和升级。它是Debian发行版的最大特色,一定要好好掌握。 要使用好apt-get就要配置好一个名为sources.list的资源列表,资源列表指向Debian系统的软件库,apt-get会从该软件库安装各种软件包。sources.list文件位于/etc/apt目录下,下面是Sarge、Etch和Sid三个版本的写法,你可任选一种,最好不要多版本混用:#sources.list for Sarge(stable): deb http://http.us.debian.org/debian stable main contrib non-free deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free deb http://security.debian.org stable/updates main contrib non-free #Uncomment if you want the apt-get source function to work #deb-src http://http.us.debian.org/debian stable main contrib non-free #deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free #sources.list for Etch(testing): deb http://http.us.debian.org/debian testing main contrib non-free deb http://non-us.debian.org/debian-non-US testing/non-US main contrib non-free deb http://security.debian.org testing/updates main contrib non-free #Uncomment if you want the apt-get source function to work #deb-src http://http.us.debian.org/debian testing main contrib non-free #deb-src http://non-us.debian.org/debian-non-US testing/non-US main contrib non-free #sources.list for Sid(unstable): deb ftp://ftp.us.debian.org/debian unstable main contrib non-free deb ftp://non-us.debian.org/debian-non-US unstable/non-US main contrib non-free #Uncomment if you want the apt-get source function to work #deb-src http://http.us.debian.org/debian unstable main contrib non-free #deb-src http://non-us.debian.org/debian-non-US unstable/non-US main contrib non-free sources.list文件的内容决定了Debian的版本。安全更新只存在于stable和testing版中,unstable没有安全更新。进入stable的软件都经过严格的依赖测试和安全测试,所以如果你想系统稳定,用于工作,最好使用stable,如果你想使用最新版的软件,就使用testing或unstable。Woody、Sarge和Sid是Debian 3.x三个版本中的代号,我们一般都是以代号来称呼debian不同版本。所有Debian发行版的代号全都取自电影Toy Story,Woody是那个牛仔,Sarge是绿色塑胶军队的领导,Sid是破坏玩具的小孩。 apt-get update 更新软件包信息库。在Debian中,软件包是通过一个数据库来管理的,通过这个数据库中可跟踪你系统中已安装、没有安装和现在可安装的软件包信息。apt-get安装软件包时就是依靠这个数据库来解决软件包间的依赖关系,从而可自动安装相关软件。我们需定期运行该命令,从而保持数据库的信息为最新。 apt-get install package_name1 package_name2 package_name3 ... 安装软件包。如果软件包需其它软件包支持,apt-get会通过搜索软件包数据库找到这种依赖关系,一起下载相关软件。在一个命令行中可同时安装多个软件包,中间用空格隔开即可。安装的软件包默认会存放在/var/cache/apt/archives目录下,以便以后重新安装。如果已安装的软件包损坏了,你可通过--reinstall选项来重新安装。如:# apt-get --reinstall install package_name 500)this.width=500'> 在需安装的软件包名后加一个减号会删除软件包,如:apt-get install package_name-。 只是下载软件,不解包和安装使用-d选项,如:# apt-get -d install package_name 使用--dry-run选项可使apt-get在安装软件包前进行测试,如:# apt-get install package_name --dry-run Debian软件包的名字和软件名不同,所以在安装前如不知道软件包的名字,可到Debian的官方软件库查询,网址是:http://www.debian.org/distrib/packages/。或者用下面介绍的apt-cache search package_name命令来查询。 apt-get remove package_name1 package_name2 package_name3 ... 删除软件包。如果你想删除没用的软件包,只要使用该命令即可。如果你想把该软件的配置文件也删除,可以用--purge选项,如:# apt-get --purge remove package_name 500)this.width=500'> 类似地,在删除软件包名后加一个加号会安装软件包,如:apt-get remove package_name+。 apt-get source package_name1 package_name2 package_name3 下载软件包的的源码版本。 apt-get upgrade package_name1 package_name2 package_name3 ... 软件包升级功能是APT系统这么成功的主要原因。通过该命令,我们就可把软件升级到最版本。在使用该命令前,最好先运行apt-get update命令,以更新软件包数据库。但该方案不是更新系统最好的方法,一些包会因为包依赖问题而保留(kept back)一些旧的软件包。Debian提供了一个更好的升级方案,就是用dis-upgrade。下面一节会详细介绍。 apt-get dist-upgrade 更新整个Debian系统。可从网络或本地更新整个系统。它会重新安排好包的依赖性。如果有些包由于一些原因实在不能更新,我们可通过以下命令查询原因:# apt-get -o Debug::pkgProblemResolver=yes dist-upgrade 500)this.width=500'> 用apt-show-versions -u可获得可升级软件包的列表。该命令还有一些有用的选项,可用-h选项查看详细帮助,了解更多功能。 apt-get clean 删除下载了的软件包,当我们通过apt-get安装软件包时,APT会把软件包下载到本地/var/cache/apt/archives/目录。该命令会删除该文件夹内的除锁住外的所有软件包。 apt-get autoclean 删除已下载的旧版本的软件包。该命令类似于上面的命令,但它会有选择地删除旧版本的软件包。 apt-get dselect-upgrade 通过dselect的“建议”和“推荐”功能更新系统。dselect是Debian中一个功能强大的包管理工具。它可帮助用户选择软件包来安装,其中一个有用功能是它会建议和推荐安装其它相关软件包。我们可在APT中使用它这个功能。 apt-get check 检查系统中已安装软件包的依赖性。 3.2. apt-cache apt-cache是一个apt软件包管理工具,它可查询apt的二进制软件包缓存文件。通过它我们可查询软件包的状态信息。 apt-cache show package_name 显示软件的信息,包括版本号,安装状态和包依赖关系等。 apt-cache search package_name 搜索软件包,可用正则表达式。 apt-cache showpkg package_name 显示软件包的依赖关系信息。 apt-cache policy package_name 显示软件包的安装状态和版本信息。 apt-cache depends package_name 显示指定软件包所依赖的软件包。 apt-cache rdepends package_name 显示软件包的反向依赖关系,即有什么软件包需依赖你所指定的软件包。 3.3. apt-file apt-file是一个软件包查找工具,可以查到软件包所含的文件和安装的位置。 apt-file update 更新软件包的文件库,第一次使用或apt-get update后都需运行一次。 apt-file search file_name 查找该文件存在于哪些软件包中。 apt-file list package_name 显示该软件包的文件。 3.4. apt-key apt-key是Debian软件包的安全管理工具。每个发布的deb包,都是通过密钥认证的,apt-key用来管理密钥。 apt-key list 列出已保存在系统中key。 apt-key add keyname 把下载的key添加到本地trusted数据库中。 apt-key del keyname 从本地trusted数据库删除key。 apt-key update 更新本地trusted数据库,删除过期没用的key。 500)this.width=500'> apt-get是命令行方式的dpkg前台程序,不喜欢命令行方式的朋友也可以试试aptitude和synaptic这两个软件包。aptitude是一个字符界面的dpkg前端程序,synaptic是一个GTK界面的dpkg前端程序。 3.5. wajig wajig是一个简单的软件包管理前端,和apt-get类似,但功能更多,它把apt-get、dpkg等Debian系统下的软件包管理工具都集成在一起,只用一个wajig命令就能完成各种复杂的管理工作。wajig是要额外安装的软件,同时需要python支持。base系统自带的软件包管理工具还是apt-get。 用apt-get install wajig即可安装wajig。它还有一个Gnome GUI前端界面,能通过鼠标点击完成所有的软件包管理工作。有关wajig的详细介绍请参考http://wajig.togaware.com/。 3.6. 建立一个混合系统 我们有时喜欢用一个Debian版本作为主系统,并使用其它版本的软件包,如我们用testing版为主系统,但有时又会用到unstable版里的新软件包。设置主系统你需编辑/etc/apt/apt.conf文件,在文件中加入以下内容:APT::Default-Release "version"; 这里的version就是Debian的发行版本,包括stable,testing和unstable。要从Debian另外的版本中安装软件包,需用以下的APT命令:# apt-get -t version install package 为使上面的命令正常工作,需要在sources.list包含有相应的version资源连接。 你也可用以下命令指定安装软件包的版本。如:# apt-get install nautilus=2.2.4-1 500)this.width=500'> 安装不同版本的软件包容易造成系统包依赖性出错,所以应尽量避免在工作环境中使用。 3.7. 升级指定版本的软件包 apt-show-versions可显示已安装软件包的版本,它提供了一种安全的方法从混合版本环境中升级指定版本的软件包。如以下命令只升级unstable的软件包:# apt-get install `apt-show-versions -u -b | grep unstable` 3.8. 保持指定软件包的版本 有时你或许不想升级某些软件包,这时我们可“pin”住这些软件包,使它们不能被升级。我们可很容易实现该功能,只要编辑/etc/apt/preferences配置文件。该文件的格式如下:Package: <package> Pin: <pin definition> Pin-Priority: <pin's priority>


阅读全文(4306) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 1.424 second(s), page refreshed 144813918 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号