①文件管理命令 $touch a.txt 如果a.txt不存在,生成一个新的空文档a.txt。如果a.txt存在,那么只更改该文档的时间信息。(这个命令实际上用得并不广泛,但可以帮我们创建一个空文件来实验下面操作) $ls . 是list的简写,列出当前目录下的所有文件名 $ls -l a.txt 列出文件的详细信息 $cp a.txt b.txt cp是copy的简写,用来复制文件。在工作目录下,将a.txt复制到文件b.txt $cp a.txt .. 将a.txt复制到父目录的a.txt $mv a.txt c.txt mv是move的简写,用来移动文件。将a.txt移动成为c.txt (相当于重命名rename) $mv c.txt /home/vamei 将c.txt移动到/home/vamei目录 $rm a.txt rm是remove的缩写,用于删除文件。删除a.txt $rm -r /home/vamei 删除从/home/vamei向下的整个子文件系统。-r表示recursive, 是指重复删除的操作,/home/vamei文件夹为空,然后删除/home/vamei文件夹本身。 (程序员总是对这个命令很感兴趣, $rm -rf / 它会删除整个文件树。f的目的是告诉rm放心干,不用再确认了…… 一般情况下,应该没有人会用这个命令。) $mkdir /home/vamei/good 创建一个新的目录 $rmdir /home/vamei/good 删除一个空的目录 文件权限相关 $chmod 755 a.txt (你必须是文件a.txt的拥有者才能运行此命令。或者以$sudo chmod 755 a.txt的方式,以超级用户的身份运行该命令。) change mode 改变a.txt的读、写以及执行权限。还记得每个文件都有九位的读写执行权限(参看 Linux文件管理背景知识),分为三组,分别对应拥有者(owner),拥有组(owner group)中的用户和所有其他用户(other)。在这里,我们也有三个数字,755,对应三个组。7被分配给拥有者,5被分配给拥有组,最后一个5分配给其它用户。Linux规定: 4为有读取的权利,2为有写入的权利,1为有执行的权利。我们看到的7实际上是4 + 2 + 1,表示拥有者有读、写、执行三项权利。(想想5 意味着什么) 这时,运行$ls -l a.txt, 你应该看到九位的权限变成了rwxr-xr-x。根据自己的需要,你可以用比如444, 744代替755,来让文件有不同的权限。 $sudo chown root a.txt change owner 改变文件的拥有者为root用户。这个命令需要有超级用户权限才能执行,所以我们在命令之前加上sudo。 $sudo chgrp root a.txt change group 改变文件的拥有组为root组 Linux文件名通配表达式 (wild card, 也叫filename pattern matching) 之前所讲的命令,比如ls, mv, cp都可以接收多个参数,比如: $ls -l a.txt b.txt c.txt 就可以列出这三个文件的所有信息。 有时候,我们想列出工作目录下所有的以.txt结尾的文件的信息,可以用下面的方式: $ls -l *.txt *.txt的写法就运用了Linux通配表达式。它与正则表达式相类似,但语法有所不同。 Filename Pattern Matching 对应含义 任意多个任意字符 ? 任意一个字符 [kl] 字符k或者字符l [0-4] 数字0到4字符中的一个 [b-e] b到e字符中的一个 [^mnp] 一个字符,这个字符不是m,n,p Linux会找到符合表达式的文件名,然后用这些文件名作为参数传递给命令。注意,当使用rm的时候,要格外小心。下面两个命令,只相差一个空格,但效果大为不同: $rm * .txt $rm *.txt 第一个命令会删除当前目录下所有文件! 总结 touch, ls, mv, cp, rm, mkdir, rmdir chmod, chown, chgrp wild card ②文件安全命令一、passwd 1.作用 asswd命令原来修改账户的登陆密码,使用权限是所有用户。 2.格式 asswd [选项] 账户名称 3.主要参数 -l:锁定已经命名的账户名称,只有具备超级用户权限的使用者方可使用。 -u:解开账户锁定状态,只有具备超级用户权限的使用者方可使用。 -x, --maximum=DAYS:最大密码使用时间(天),只有具备超级用户权限的使用者方可使用。 -n, --minimum=DAYS:最小密码使用时间(天),只有具备超级用户权限的使用者方可使用。 -d:删除使用者的密码, 只有具备超级用户权限的使用者方可使用。 -S:检查指定使用者的密码认证种类, 只有具备超级用户权限的使用者方可使用。 4.应用实例 $ passwd Changing password for user cao. Changing password for cao (current) UNIX password: New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. 从上面可以看到,使用passwd命令需要输入旧的密码,然后再输入两次新密码。 二、su 1.作用 su的作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码。 2.格式 su [选项]... [-] [USER [ARG]...] 3.主要参数 -f , --fast:不必读启动文件(如 csh.cshrc 等),仅用于csh或tcsh两种Shell。 -l , --login:加了这个参数之后,就好像是重新登陆为该使用者一样,大部分环境变量(例如HOME、SHELL和USER等)都是以该使用者(USER)为主,并且工作目录也会改变。如果没有指定USER,缺省情况是root。 -m, -p ,--preserve-environment:执行su时不改变环境变数。 -c command:变更账号为USER的使用者,并执行指令(command)后再变回原来使用者。 USER:欲变更的使用者账号,ARG传入新的Shell参数。 4.应用实例 变更账号为超级用户,并在执行df命令后还原使用者。 su -c df root 三、umask 1.作用 umask设置用户文件和目录的文件创建缺省屏蔽值,若将此命令放入profile文件,就可控制该用户后续所建文件的存取许可。它告诉系统在创建文件时不给谁存取许可。使用权限是所有用户。 2.格式 umask [-p] [-S] [mode] 3.参数 -S:确定当前的umask设置。 -p:修改umask 设置。 [mode]:修改数值。 4.说明 传统Unix的umask值是022,这样就可以防止同属于该组的其它用户及别的组的用户修改该用户的文件。既然每个用户都拥有并属于一个自己的私有组,那么这种“组保护模式”就不在需要了。严密的权限设定构成了Linux安全的基础,在权限上犯错误是致命的。需要注意的是,umask命令用来设置进程所创建的文件的读写权限,最保险的值是0077,即关闭创建文件的进程以外的所有进程的读写权限,表示为-rw-------。在~/.bash_profile中,加上一行命令umask 0077可以保证每次启动Shell后, 进程的umask权限都可以被正确设定。 5.应用实例 umask -S u=rwx,g=rx,o=rx umask -p 177 umask -S u=rw,g=,o= BR> 上述5行命令,首先显示当前状态,然后把umask值改为177,结果只有文件所有者具有读写文件的权限,其它用户不能访问该文件。这显然是一种非常安全的设置。 四、chgrp 1.作用 chgrp表示修改一个或多个文件或目录所属的组。使用权限是超级用户。 2.格式 chgrp [选项]... 组 文件... 或 chgrp [选项]... --reference=参考文件 文件... 将每个<文件>的所属组设定为<组>。 3.参数 -c, --changes :像 --verbose,但只在有更改时才显示结果。 --dereference:会影响符号链接所指示的对象,而非符号链接本身。 -h, --no-dereference:会影响符号链接本身,而非符号链接所指示的目的地(当系统支持更改符号链接的所有者,此选项才有效)。 -f, --silent, --quiet:去除大部分的错误信息。 --reference=参考文件:使用<参考文件>的所属组,而非指定的<组>。 -R, --recursive:递归处理所有的文件及子目录。 -v, --verbose:处理任何文件都会显示信息。 4.应用说明 该命令改变指定指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组。 5.应用实例 改变/opt/local /book/及其子目录下的所有文件的属组为book,命令如下: $ chgrp - R book /opt/local /book 五、chmod 1.作用 chmod命令是非常重要的,用于改变文件或目录的访问权限,用户可以用它控制文件或目录的访问权限,使用权限是超级用户。 2.格式 chmod命令有两种用法。一种是包含字母和操作符表达式的字符设定法(相对权限设定);另一种是包含数字的数字设定法(绝对权限设定)。 (1)字符设定法 chmod [who] [+ | - | =] [mode] 文件名 ◆操作对象who可以是下述字母中的任一个或它们的组合 u:表示用户,即文件或目录的所有者。 g:表示同组用户,即与文件属主有相同组ID的所有用户。 o:表示其它用户。 a:表示所有用户,它是系统默认值。 ◆操作符号 +:添加某个权限。 -:取消某个权限。 =:赋予给定权限,并取消其它所有权限(如果有的话)。 ◆设置mode的权限可用下述字母的任意组合 r:可读。 w:可写。 x:可执行。 X:只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x属性。 :文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。 t:保存程序的文本到交换设备上。 u:与文件属主拥有一样的权限。 g:与和文件属主同组的用户拥有一样的权限。 o:与其它用户拥有一样的权限。 文件名:以空格分开的要改变权限的文件列表,支持通配符。 一个命令行中可以给出多个权限方式,其间用逗号隔开。 (2) 数字设定法 数字设定法的一般形式为: chmod [mode] 文件名 数字属性的格式应为3个0到7的八进制数,其顺序是(u)(g)(o)文件名,以空格分开的要改变权限的文件列表,支持通配符。 数字表示的权限的含义如下:0001为所有者的执行权限;0002为所有者的写权限;0004为所有者的读权限;0010为组的执行权限;0020为组的写权限;0040为组的读权限;0100为其他人的执行权限;0200为其他人的写权限;0400为其他人的读权限;1000为粘贴位置位;2000表示假如这个文件是可执行文件,则为组ID为位置位,否则其中文件锁定位置位;4000表示假如这个文件是可执行文件,则为用户ID为位置位。 3.实例 如果一个系统管理员写了一个表格(tem)让所有用户填写,那么必须授权用户对这个文件有读写权限,可以使用命令:#chmod 666 tem 上面代码中,这个666数字是如何计算出来的呢?0002为所有者的写权限,0004为所有者的读权限,0020为组的写权限,0040为组的读权限,0200为其他人的写权限,0400为其他人的读权限,这6个数字相加就是666(注以上数字都是八进制数)。 tem文件的权限是-rw-rw-rw-,即用户对这个文件有读写权限。 如果用字符权限设定使用下面命令: #chmod a =wx tem 六、chown 1.作用 更改一个或多个文件或目录的属主和属组。使用权限是超级用户。 2.格式 chown [选项] 用户或组 文件 3.主要参数 --dereference:受影响的是符号链接所指示的对象,而非符号链接本身。 -h, --no-dereference:会影响符号链接本身,而非符号链接所指示的目的地(当系统支持更改符号链接的所有者,此选项才有效)。 --from=目前所有者:目前组只当每个文件的所有者和组符合选项所指定的,才会更改所有者和组。其中一个可以省略,这已省略的属性就不需要符合原有的属性。 -f, --silent, --quiet:去除大部分的错误信息。 -R, --recursive:递归处理所有的文件及子目录。 -v, --verbose:处理任何文件都会显示信息。 4.说明 chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或用户ID;组可以是组名或组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。系统管理员经常使用chown命令,在将文件拷贝到另一个用户的目录下以后,让用户拥有使用该文件的权限。 5.应用实例 1.把文件shiyan.c的所有者改为wan $ chown wan shiyan.c 2.把目录/hi及其下的所有文件和子目录的属主改成wan,属组改成users。 $ chown - R wan.users /hi 七、chattr 1.作用 修改ext2和ext3文件系统属性(attribute),使用权限超级用户。 2.格式 chattr [-RV] [-+=AacDdijsSu] [-v version] 文件或目录 3.主要参数 -R:递归处理所有的文件及子目录。 -V:详细显示修改内容,并打印输出。 -:失效属性。 +:激活属性。 = :指定属性。 A:Atime,告诉系统不要修改对这个文件的最后访问时间。 S:Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。 a:Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。 i:Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。 D:检查压缩文件中的错误。 d:No dump,在进行文件系统备份时,dump程序将忽略这个文件。 C:Compress,系统以透明的方式压缩这个文件。从这个文件读取时,返回的是解压之后的数据;而向这个文件中写入数据时,数据首先被压缩之后才写入磁盘。 :Secure Delete,让系统在删除这个文件时,使用0填充文件所在的区域。 u:Undelete,当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件。 4.说明 chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,如果Linux内核版本低于2.2,那么许多功能不能实现。同样-D检查压缩文件中的错误的功能,需要2.5.19以上内核才能支持。另外,通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。 5.应用实例 1.恢复/root目录,即子目录的所有文件 # chattr -R +u/root 2.用chattr命令防止系统中某个关键文件被修改 在Linux下,有些配置文件(passwd ,fatab)是不允许任何人修改的,为了防止被误删除或修改,可以设定该文件的“不可修改位(immutable)”,命令如下: # chattr +i /etc/fstab 八、sudo 1.作用 sudo是一种以限制配置文件中的命令为基础,在有限时间内给用户使用,并且记录到日志中的命令,权限是所有用户。 2.格式 sudo [-bhHpV] [-s ] [-u <用户>] [指令] sudo [-klv] 3.主要参数 -b:在后台执行命令。 -h:显示帮助。 -H:将HOME环境变量设为新身份的HOME环境变量。 -k:结束密码的有效期,即下次将需要输入密码。 -l:列出当前用户可以使用的命令。 -p:改变询问密码的提示符号。 -s :执行指定的Shell。 -u <用户>:以指定的用户为新身份,不使用时默认为root。 -v:延长密码有效期5分钟。 4.说明 sudo命令的配置在/etc/sudoers文件中。当用户使用sudo时,需要输入口令以验证使用者身份。随后的一段时间内可以使用定义好的命令,当使用配置文件中没有的命令时,将会有报警的记录。sudo是系统管理员用来允许某些用户以root身份运行部分/全部系统命令的程序。一个明显的用途是增强了站点的安全性,如果需要每天以超级用户的身份做一些日常工作,经常执行一些固定的几个只有超级用户身份才能执行的命令,那么用sudo是非常适合的。 九、ps 1.作用 显示瞬间进程 (process) 的动态,使用权限是所有使用者。 2.格式 [options] [--help] 3.主要参数 的参数非常多, 此出仅列出几个常用的参数。 -A:列出所有的进程。 -l:显示长列表。 -m:显示内存信息。 -w:显示加宽可以显示较多的信息。 -e:显示所有进程。 a:显示终端上的所有进程,包括其它用户的进程。 -au:显示较详细的信息。 -aux:显示所有包含其它使用者的进程。 4.说明 要对进程进行监测和控制,首先要了解当前进程的情况,也就是需要查看当前进程。ps命令就是最基本、也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行、运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等。图2给出了ps-aux命令详解。大部分信息都可以通过执行该命令得到。最常用的三个参数是u、a、x。下面就结合这三个参数详细说明ps命令的作用:ps aux 图2 ps-aux命令详解 图2第2行代码中,USER表示进程拥有者;PID表示进程标示符;%CPU表示占用的CPU使用率;%MEM占用的物理内存使用率;VSZ表示占用的虚拟内存大小;RSS为进程占用的物理内存值;TTY为终端的次要装置号码。 STAT表示进程的状态,其中D为不可中断的静止(I/O动作);R正在执行中;S静止状态;T暂停执行;Z不存在,但暂时无法消除;W没有足够的内存分页可分配;高优先序的进程;N低优先序的进程;L有内存分页分配并锁在内存体内 (实时系统或 I/O)。START为进程开始时间。TIME为执行的时间。COMMAND是所执行的指令。 4.应用实例 在进行系统维护时,经常会出现内存使用量惊人,而又不知道是哪一个进程占用了大量进程的情况。除了可以使用top命令查看内存使用情况之外,还可以使用下面的命令: aux | sort +5n 十、who 1.作用 who显示系统中有哪些用户登陆系统,显示的资料包含了使用者ID、使用的登陆终端、上线时间、呆滞时间、CPU占用,以及做了些什么。使用权限为所有用户。 2.格式 who - [husfV] [user] 3.主要参数 -h:不要显示标题列。 -u:不要显示使用者的动作/工作。 -s:使用简短的格式来显示。 -f:不要显示使用者的上线位置。 -V:显示程序版本。 4.说明 该命令主要用于查看当前在线上的用户情况。如果用户想和其它用户建立即时通信,比如使用talk命令,那么首先要确定的就是该用户确实在线上,不然talk进程就无法建立起来。又如,系统管理员希望监视每个登录的用户此时此刻的所作所为,也要使用who命令。who命令应用起来非常简单,可以比较准确地掌握用户的情况,所以使用非常广泛。 动手练习 1.使用Linux命令检测系统入侵者 安装过Mandrake Linux和Red Hat Linux的用户都会知道,Linux系统会内置三种不同级别(标准、高、更高)的防火墙,当进行了Linux服务器的安装和一些基本的设置后,服务器应该说是比较安全的,但是也会有黑客通过各种方法利用系统管理员的疏忽侵入系统。如何快速查找黑客非常重要。一般来说,可以使用命令查询黑客是否入侵,见表1。 表1 查询黑客入侵现象的命令对应表 举例说明,如果黑客嗅探网络,那么它必须使网卡接口处于混杂模式,使用下面命令进行查询: #ifconfig -a eth0 Link encap:Ethernet HWaddr 00:00:E8:A0:25:86 inet addr:192.168.1.7 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING PROMISCUOUS MTU:1500 Metric:1 ...... 从这个命令的输出中,可以看到上面讲到的这些概念。第一行的00:00:E8:A0:25:86是mac地址,第二行的192.168.1.7是IP地址,第四行讲的是接收数据状态,这时正在被黑客嗅探。一般而言,网卡有几种接收数据帧的状态,如Broadcast、Multicast、Promiscuous等。Broadcast是指接收所有类型为广播报文的数据帧;Multicast是指接收特定的组播报文;Promiscuous则是通常说的混杂模式,是指对报文中的目的硬件地址不加任何检查、全部接收的工作模式。 2.限制su命令的滥用 我们知道,超级用户在Linux中有最大的权利,几乎所有黑客都想得到这个目标。Linux可以增加对切换到超级用户的限制。使用PAM(Pluggable Authentication Modules)可以禁止除在wheel组以外的任何人su成root,修改/etc/pam.d/su文件,除去屏蔽标识#。使用/usr/sbin/usermod G10 bjecadm将bjecadm这个账号加入gid为10的组,就是wheel组。命令如下: /etc/pam.d/su # 使用密码验证# auth sufficient /lib/security/pam_wheel.so debug # 限制只有wheel组用户才可以切换到root# auth required /lib/security/pam_wheel.so use_uid chmod -G10 bjecadm 另外,每当用户试图使用su命令进入系统用户时,命令将在/usr/adm/sulog文件中写一条信息,若该文件记录了大量试图用su进入root的无效操作信息,则表明了可能有人企图破译root口令。