Unix/Linux笔记全集

1:Unix/Linux操作系统概述

要求:理解应用软件和操作系统的区别,掌握系统的Kernel(核心)和shell(外壳)之间的关系以及各自的作用

Solaris:Solaris 是Sun Microsystems研发的计算机 操作系统。它被认为是UNIX操作系统的衍生版本之一。 目前Solaris属于混合开源软件。

操作系统Kernel和shell

Kernel:操作系统内核 操作系统内核是指大多数操作系统的核心部分。它由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成。操作系统内核通常运行进程,并提供进程间的通信。

Shell:俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。它类似于DOS下的和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。

经常使用的shell有以下:

Bourne Shell:提示符是#为根用户,普通用户是$

C Shell:提供命令行的历史和编程环境;类似于C编程语言;不兼容Bourne shell语法;其中tcsh是csh的增强,完全兼容;提示符是#为根用户,普通用户是%;

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

在Fedora系统的shell中输入第一条命令:

tarena@ubuntu:~$ su root                //su root用来登陆获取超级权限
密码:                                  //输入管理员密码
root@ubuntu:/home/tarena# echo $SHELL   //echo会将输入的字符串送往标准输出,$SHELL表示进入外壳
/bin/bash                               //容器/进入子程序-/bin/bash 就表明该文件是一个 bash程序,需要由 /bin 目录下的 bash 程序来解释执行

bash:bash是shell类型中的一种。Linux/Unix的bash就相当于windows的dos命令提示符. 可以交互操作,也可以进行批处理操作,然而不同的是bash等shell的开发具有较强针对性,因而其功能及易用性远比dos命令提示符大得多。要作个类比的话,Bash更接近Windows下的批处理文件而不是dos命令提示符。

___________________________________________________________________________________________________________________________________________________________

2:Unix/Linux文件系统

要求理解文件系统的概念,对Linux根目录下各个目录有一定了解

Linux文件系统:

Linux下磁盘分区和目录的关系如下:

任何一个分区都必须挂载到某个目录上。
目录是逻辑上的区分。分区是物理上的区分。
磁盘Linux分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。
根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。

目录:包含了其他目录或文件的位置,我们可以创建文件或者层次的目录结构

子目录:在其他目录下面的目录称之为子目录

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

Unix用户账户文件

etc指的是Unix下的文件系统

使用more命令查看/etc/passwd文件,etc是目录,passwd是文件,more将文件显示在终端上,每次一屏(直接输入more可得到更多选项文件)

执行命令前最好使用 su root 命令来获取超级权限

root@ubuntu:/home/tarena# more /etc/passwd    //使用more /etc/passwd命令查看etc目录的passwd文件
root:x:0:0:root:/root:/bin/bash               //容器/进入子程序-/bin/bash 就表明该文件是一个 bash程序,需要由 /bin 目录下的 bash 程序来解释执行
daemon:x:1:1:daemon:/usr/sbin:/bin/sh         //以下是passwd文件的内容
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:103::/home/syslog:/bin/false
messagebus:x:102:105::/var/run/dbus:/bin/false
colord:x:103:108:colord colour management daemon,,,:/var/lib/colord:/bin/false
lightdm:x:104:111:Light Display Manager:/var/lib/lightdm:/bin/false

root:x:0:0:root:/root:/bin/bash:

root是管理员用户,x表示密码,但是这里不显示,已经放到shadow第一个0,表示用户id,后一个表示用户组id后面哪个root是对该用户的描述,可以乱写。,:/root:/bin/bash表示是文件路径

使用more命令查看/etc/shadow密码文件

root@ubuntu:/home/tarena# more /etc/shadow
root:$6$038l1vQ.$4P7hRhPDxAGPzZfaBpIJRWU5iFEGUBwfy1eP8aGZ/g/rjuyx5iwTc4lr2tjmzKZ
RQOXBImLHFQfGZk35TSWBQ1:15879:0:99999:7:::
daemon:*:15453:0:99999:7:::
bin:*:15453:0:99999:7:::
sys:*:15453:0:99999:7:::
sync:*:15453:0:99999:7:::
games:*:15453:0:99999:7:::
man:*:15453:0:99999:7:::
lp:*:15453:0:99999:7:::
mail:*:15453:0:99999:7:::
news:*:15453:0:99999:7:::
uucp:*:15453:0:99999:7:::
proxy:*:15453:0:99999:7:::
www-data:*:15453:0:99999:7:::
backup:*:15453:0:99999:7:::
list:*:15453:0:99999:7:::
irc:*:15453:0:99999:7:::
gnats:*:15453:0:99999:7:::
nobody:*:15453:0:99999:7:::
libuuid:!:15453:0:99999:7:::
syslog:*:15453:0:99999:7:::
messagebus:*:15453:0:99999:7:::
colord:*:15453:0:99999:7:::

beinan:x:500:500:beinan sun:/home/beinan:/bin/bash
linuxsir:x:501:502::/home/linuxsir:/bin/bash

  第一字段:用户名(也被称为登录名);在上面的例子中,我们看到这两个用户的用户名分别是 beinan 和linuxsir;
  第二字段:口令;在例子中我们看到的是一个x,其实密码已被映射到/etc/shadow 文件中;
  第三字段:UID ;请参看本文的UID的解说;
  第四字段:GID;请参看本文的GID的解说;
  第五字段:用户名全称,这是可选的,可以不设置,在beinan这个用户中,用户的全称是beinan sun ;而linuxsir 这个用户是没有设置全称;
  第六字段:用户的家目录所在位置;beinan 这个用户是/home/beinan ,而linuxsir 这个用户是/home/linuxsir ;
  第七字段:用户所用SHELL 的类型,beinan和linuxsir 都用的是 bash ;所以设置为/bin/bash ;
  2)关于UID 的理解:
  UID 是用户的ID 值,在系统中每个用户的UID的值是唯一的,更确切的说每个用户都要对应一个唯一的UID
,系统管理员应该确保这一规则。系统用户的UID的值从0开始,是一个正整数,至于最大值可以在/etc/login.defs
可以查到,一般Linux发行版约定为60000; 在Linux 中,root的UID是0,拥有系统最高权限;
  UID 在系统唯一特性,做为系统管理员应该确保这一标准,UID
的唯一性关系到系统的安全,应该值得我们关注!比如我在/etc/passwd 中把beinan的UID
改为0后,你设想会发生什么呢?beinan这个用户会被确认为root用户。beinan这个帐号可以进行所有root的操作;
  UID 是确认用户权限的标识,用户登录系统所处的角色是通过UID 来实现的,而非用户名,切记;把几个用户共用一个UID
是危险的,比如我们上面所谈到的,把普通用户的UID 改为0,和root共用一个UID
,这事实上就造成了系统管理权限的混乱。如果我们想用root权限,可以通过su或sudo来实现;切不可随意让一个用户和root分享同一个UID ;
  UID是唯一性,只是要求管理员所做的,其实我们修改/etc/passwd 文件,可以修改任何用户的UID的值为0,
  一般情况下,每个Linux的发行版都会预留一定的UID和GID给系统虚拟用户占用,虚拟用户一般是系统安装时就有的,是为了完成系统任务所必须的用户,但虚拟用户是不能登录系统的,比如ftp、nobody、adm、rpm、bin、shutdown等;
  在Fedora 系统会把前499 个UID和GID 预留出来,我们添加新用户时的UID
从500开始的,GID也是从500开始,至于其它系统,有的系统可能会把前999UID和GID预留出来;以各个系统中/etc/login.defs
中的 UID_MIN 的最小值为准; Fedora 系统 login.defs的UID_MIN是500,而UID_MAX
值为60000,也就是说我们通过adduser默认添加的用户的UID的值是500到60000之间;而Slackware
通过adduser不指定UID来添加用户,默认UID 是从1000开始;

beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:
  第一字段:用户名(也被称为登录名),在/etc/shadow中,用户名和/etc/passwd 是相同的,这样就把passwd 和shadow中用的用户记录联系在一起;这个字段是非空的;
  第二字段:密码(已被加密),如果是有些用户在这段是x,表示这个用户不能登录到系统;这个字段是非空的;
  第三字段:上次修改口令的时间;这个时间是从1970年01月01日算起到最近一次修改口令的时间间隔(天数),您可以通过passwd 来修改用户的密码,然后查看/etc/shadow中此字段的变化;
  第四字段:两次修改口令间隔最少的天数;如果设置为0,则禁用此功能;也就是说用户必须经过多少天才能修改其口令;此项功能用处不是太大;默认值是通过/etc/login.defs文件定义中获取,PASS_MIN_DAYS 中有定义;
  第五字段:两次修改口令间隔最多的天数;这个能增强管理员管理用户口令的时效性,应该说在增强了系统的安全性;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_MAX_DAYS 中定义;
  第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_WARN_AGE 中定义;
  第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;
  第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;
  第九字段:保留字段,目前为空,以备将来Linux发展之用;

使用more命令查看/etc/group用户组的配置文件

root@ubuntu:/home/tarena# more /etc/group   //根用户@该系统名称:/首页/用户名称#  more /文件系统目录/用户组的配置文件
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:tarena
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:tarena
floppy:x:25:
tape:x:26:
sudo:x:27:tarena
audio:x:29:pulse
dip:x:30:tarena

/etc/group
文件是用户组的配置文件,内容包括用户和用户组,并且能显示出用户是归属哪个用户组或哪几个用户组,因为一个用户可以归属一个或多个不同的用户组;同一用
户组的用户之间具有相似的特征。比如我们把某一用户加入到root用户组,那么这个用户就可以浏览root用户家目录的文件,如果root用户把某个文件
的读写执行权限开放,root用户组的所有用户都可以修改此文件,如果是可执行的文件(比如脚本),root用户组的用户也是可以执行的;
  用户组的特性在系统管理中为系统管理员提供了极大的方便,但安全性也是值得关注的,如某个用户下有对系统管理有最重要的内容,最好让用户拥有独立的用户组,或者是把用户下的文件的权限设置为完全私有;另外root用户组一般不要轻易把普通用户加入进去.

root:x:0:root,linuxsir  注:用户组root,x是密码段,表示没有设置密码,GID是0,root用户组下包括root、linuxsir以及GID为0的其它用户  (可以通过/etc/passwd查看);
beinan:x:500:linuxsir   注:用户组beinan,x是密码段,表示没有设置密码,GID是500,beinan用户组下包括linuxsir用户及GID为500的用户  (可以通过/etc/passwd查看);
linuxsir:x:502:linuxsir 注:用户组linuxsir,x是密码段,表示没有设置密码,GID是502,linuxsir用户组下包用户linuxsir及GID为502的用户(可以通过/etc/passwd查看);

___________________________________________________________________________________________________________________________________________________________

3:Unix/Linux的常用命令

要求:熟识掌握各个常用命令的使用方法,针对常用参数加深理解

UNIX命令提示符:

在命令行下,操作系统会显示一提示符,提示用户在此提示符后可以输入一行命令。不同的Shell有不同的缺省提示符:
B Shell和K Shell的缺省提示符为"$";
C Shell的缺省提示符为"%";
但当以root用户登录时,系统提示符统一缺省为"#"。
用户可以更改自己的缺省Shell和提示符

命令格式:

UNIX命令由一个命令(command)和零到多个参数构成,命令和参数之间,以及参数与参数之间用空格隔开。UNIX的命令格式和DOS的命令格式相似,但UNIX的命令区分大小写,且命令和参数之间必须隔开

命令 [-选项] [参数]    //其中命令相当于一个变量,选项和参数相当于变量的参数,选项是可选的,但是参数是必须选择的
其中选项和参数是可选的

可以在一行中输入多个命令,命令间用“;”分开:
mkdir tmp ; cp file1 tmp/file2 ; ls -l tmp     //UNIX会顺序执行以上三条命令

基本命令

在输入一个不完全的命令或文件名时按tab可以补全

^c:终止当前命令

sudo passwd root:重新设置拥有者密码

sudo init 0:关机

clear:清屏

pwd:打印当前路径

mv:文件重命名;mv 旧文件名 新文件名;mv a.txt a.sh   //把a.txt更换成a.sh

cd:改变路径;相对路径就是从当前目录出发描述路径的方式;绝对路径就是从根目录出发描述路径的方式,路径只要有,根目录,上一级目录,当前目录,用户主目录

cd ..:使用上一级目录

cd .:使用当前目录

cd /:使用根目录

root@ubuntu:/home/tarena# pwd   //打印当前路径命令
/home/tarena                    //显示当前路径为/home/tarena    
root@ubuntu:/home/tarena# cd    //改变路径,选项为空
root@ubuntu:~# pwd              //再次打印路径
/root                           //显示路径为根目录
root@ubuntu:~# cd /etc          //cd /etc 改变路径为etc
root@ubuntu:/etc# pwd           //再次打印路径
/etc                            //显示在etc目录中

ls:显示当前目录的内容(文件夹和文件)

ls -a:显示全部内容,包括隐藏文件

ls -l:详细形式显示文件:

root@ubuntu:/# ls -l
总用量 92          //该目录下所有文件及目录列表第5个字段的和(以k为单位),也就是该目录的大小
drwxr-xr-x   2 root   root    4096 Aug 20  2012 bin

drwxr-xr-x:文件属性和权限描述;第一位为d表示目录,"-"为普通文件,"|"为链接文件;rwx表示拥有者对该文件的访问权限,r读,w写(可生成文件或子目录,删除文件或子目录),x执行(可查找该目录下内容),-无权限;r-x同组用户对该文件的访问权限;r-x其他人对该文件的访问权限

2:文件的硬链接数

root:拥有者

root:所属组group

4096:文件大小,单位:byte字节

Aug 20  2012:修改日期-2012年8月20

bin:文件名

chmod:修改权限,有符号模式和绝对模式

符号模式:chmod g+w nc.openbsd

g:表示同组用户,为u所有者,为o其他用户,为a所有用户

+:表示增加权限,为-减去权限,为=最终权限(chmod g/o=/+w/- 表示同组用户和其他用户分别增加写权限和减去所有权限),

w:表示写入,r为读取权限,x为执行权限

root@ubuntu:/bin# ls -l nc.openbsd        //查看文件nc.openbsd的详细
-rwxr-xr-x 1 root root 26152 Jul  2  2011 nc.openbsd     //同组用户只要读取和执行权限
root@ubuntu:/bin# chmod g+w nc.openbsd    //为同组用户增加写入权限
root@ubuntu:/bin# ls -l nc.openbsd        //再查看文件nc.openbsd的详细
-rwxrwxr-x 1 root root 26152 Jul  2  2011 nc.openbsd   //现在同组用户和拥有者权限一样了

绝对模式:

文件或目录的权限用三个数字表示,从左到右,第一位表示所有者的权限,第二位表示同组用户权限,第三位表示其他用户权限;

1:表示执行权限

2:写入权限

4:读取权限

三个权限数值可以组成:0.1.2.3.4.5.6.7;

0没有任何权限
1只有执行权限
2只有写入权限
3执行和写入
4只有读取权限
5执行和读取权限
6写入和读取权限
7三个权限都有
 
root@ubuntu:/bin# ls -l nc.openbsd    //查看文件nc.openbsd的详细
-rwx-w-r-x 1 root root 26152 Jul  2  2011 nc.openbsd   //目前拥有者为写入和读取,同组用户为执行和读取,其他用户读取执行
root@ubuntu:/bin# chmod 644 nc.openbsd      //更改三个用户权限    
root@ubuntu:/bin# ls -l nc.openbsd          //再查看文件nc.openbsd的详细
-rw-r--r-- 1 root root 26152 Jul  2  2011 nc.openbsd    //拥有者变成读取和写入,同组用户只有读取,其他用户只有读取

touch:文件创建

在当前目录中创建文件:touch a.txt    //创建一个txt文本a

mkdir:目录创建
在当前目录中创建子目录: mkdir mumu   //创建一个子目录munu

如果需要一次创建一个多层目录,需要使用 -p选项:
mkdir -p BBB/Test    //在工作目录下的 BBB 目录中,建立一个名为 Test 的子目录。若 BBB 目录原本不存在,则建立一个,若不加 -p,且原本 BBB目录不存在,则产生错误

cp:复制

root@ubuntu:/bin# cp ./a.txt ~/..    //cp复制;"."表示当前目录,~代表的是你当前用户的home目录;..上一级目录;意味把当前位置的文件复制到当前用户的home目录的上一级目录

root@ubuntu:/bin# ls ~/..       //查看当前用户的home目录的上一级目录是否已经复制文件

mv:文件移动

mv a.txt ~;ls  //移动当前位置的a.txt文件到当前用户的home目录中,然后执行ls查看当前文件夹有什么文件或文件夹,可以知道a.txt文件已经转移,这是一行多命令

mv /usr/lib/* /001    //是将 /usr/lib/下所有的东西移到/001/中
mv /usr/lib/ /001     //将lib和其内部的所有东西移到/001/中。 此后,/usr里不再有lib; /001里有lib/及其原有的东西

删除命令

rm:删除一个文件或目录

rm -r:删除一个目录,该目录里面可以包含子目录和文件

rmdir:删除一个目录,该目录必须为空目录,里面不能有其他东西

rm a.txt;ls      //删除当前目录中文件,然后执行显示当前目录

rmdir ./BBB/;ls   //rm -r删除当前目录中的BBB目录,注意从当前目录组进行操作都要加 ‘.’ ,如果是操作当前目录的文件,就不用加 ‘.’ 。

rm -r ./BBB/;ls   //rm -r删除当前目录中的BBB目录,并且BBB目录不为空,BBB目录里面还包含其他目录和文件

说明:一般在删除的时候,会有确认提示,输入y表示是,n表示否

rm -f BBB:略过不存在的文件或目录,不显示任何信息

ln:创建连接

硬链接

root@ubuntu:~# touch a.txt;echo wenhanqin > a.txt   //创建了一个文本;//echo会将字符串送往标准输出,这里是把字符输出到文本中,如果命令缺少指定文本,就输出到屏幕
root@ubuntu:~# cat a.txt   //cat查看当前目录的文件内容,
wenhanqin
root@ubuntu:~# ln a.txt b;cat b      //ln创建一个执行文本的指针b;然后使用cat查看指针b,看到的内容等于指向的文本的内容
wenhanqin
root@ubuntu:~# ls    //显示当前目录的内容
a.txt  b             //发现有两个文件
root@ubuntu:~# ls -l  //详细显示
总用量 8
-rwxr-xr-x 2 root root 10 Jun 26 21:23 a.txt  
-rwxr-xr-x 2 root root 10 Jun 26 21:23 b    //发现虽然没有后缀名,但是是指向文件的指针,所以b实际上是一个文件,因为文本和b开头都是 -

硬链接本质上就是磁盘上文件数据的另一个访问数据,删除本来的文件时,系统关闭了文件对磁盘数据的访问路径,但是不影响硬链接b对数据的访问,如下:

root@ubuntu:~# touch a.txt;echo wenhanqin > a.txt  
root@ubuntu:~# cat a.txt
wenhanqin
root@ubuntu:~# ln a.txt b;cat b
wenhanqin
root@ubuntu:~# rm a.txt      //删除文件a.txt
root@ubuntu:~# ls -l
总用量 4
-rw-r--r-- 1 root root 10 Jun 26 21:40 b   //b还存在,不因为本来的文件被删除就消失
root@ubuntu:~# cat b           //显示b访问路径
wenhanqin                      //数据依然存在
root@ubuntu:~#

软连接:软连接里面只保存了目标文件的位置,当删除目录文件的时候,软连接文件也失去了访问磁盘数据的通道

root@ubuntu:~# ls       //现在可以看到有两个文件,b是硬链接
a.txt  b
root@ubuntu:~# ln -s a.txt c;ls -l          //创建一个连接到a.txt文件的指针c,ln参数为-s表示软连接;然后显示目录详细
总用量 8
-rw-r--r-- 2 root root 10 Jun 26 21:54 a.txt
-rw-r--r-- 2 root root 10 Jun 26 21:54 b
lrwxrwxrwx 1 root root  5 Jun 26 21:54 c -> a.txt   //发现c是指向a.txt文件的指针,软连接相当硬链接,软连接更像是指针形式
root@ubuntu:~# cat c             //阅读指针c发现内容和文本是一样的
wenhanqin
root@ubuntu:~# rm a.txt;cat b;cat c    //删除a.txt;阅读硬链接b;阅读软连接c
wenhanqin                              //硬链接能读出来
cat: c: 没有那个文件或目录             //因为a.txt被删除,执行a.txt的软连接也就失去了访问的通道;另外在shell里看到的软连接名称颜色区别于其他类型名称颜色,这里是蓝色

echo:会将输入的字符串送往标准输出

echo o   //就会打印当前字符o
echo wenhanq > a.txt     //输出字符到a.txt文件中

cat:查看当前目录的文件内容

cat a.txt  : cat 程序读a.txt文件,并把它显示出来,cat获取到的是一个a.txt文件名
cat < a.txt : cat程序 显示 a.txt文件的内容 ,cat程序获取的不是文件名,而是a.txt的内容

more:查看当前目录的文件内容,和cat不同的是,more是分屏显示文件内容,并且more不能把直接从键盘输入的字符输出到屏幕

root@ubuntu:/# more etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
--more--(78%)
回车键查看下一行,空格键查看下一屏幕内容,按键q推出

head:查看文件开头的n行

head -5 etc/passwd     //参数-5表示只查看文件的开头5行

tail:查看文件最后的n行

tail -5 etc/passwd    //参数-5表示只查看文件的最后5行

find:文件查找命令

注意,命令中的语句要查找的路径必须在该路径之前输入,不能进入到b路径里面,然后查找b路径的文件,这样是不行的;并只能搜索到文件,不能查找目录

find /路径名 -选项 -对象方式

路径名:用.来表示当前目录,用/来表示系统根目录;

对象:将匹配的文件输出到标准输出
方式:相当放大查找范围,看下例题:

root@ubuntu:/# find /etc -name pass*    //查找路径为etc,选项-name表示要查找文件名称;pass表示被查找的文件名称;*表示凡是符合pass开头的文件都被查找出来
/etc/passwd        //passwd符合要求被查找出来
/etc/passwd-       //passwd-符合要求被查找出来
/etc/cron.daily/passwd  
/etc/pam.d/passwd
root@ubuntu:/#

选项参数:

-name:按照文件名查找文件

-perm:按照文件权限查找

-prune:使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。

-user:
按照文件属主来查找文件

-group:
按照文件所属的组来查找文件

-mtime?-n?+n:
按照文件的更改时间来查找文件,?-?n表示文件更改时间距现在n天以内,+?n表示文件更改时间距现在

-nogroup:查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在

-nouser:查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在

-newer?file1 ! file2:查找更改时间比文件file1新但比文件file2旧的文件

-type:查找某一类型的文件;
b - 块设备文件;d - 目录;c - 字符设备文件;p - 管道文件;l - 符号链接文件;f - 普通文件;

-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中

-amin?n:查找系统中最后N分钟访问的文件

atime?n:查找系统中最后n*24小时访问的文件

cmin?n:查找系统中最后N分钟被改变文件状态的文件

mmin?n:查找系统中最后N分钟被改变文件数据的文件

更多http://wenku.baidu.com/view/d47e7715866fb84ae45c8d0b.html

grep:内容查找命令

在linux中grep命令是非常有用的,它和管道(|)配合使用,非常强大,用于搜索文本文件.如果想要在几个文本文件中查找一字符串,可以使用‘grep’命令。‘grep’在文本中搜索指定的字符串。
假设您正在‘/usr/src/linux/Documentation’目录下搜索带字符串‘magic’的文件:

$?grep?magic?/usr/src/linux/Documentation/*??

sysrq.txt:*?How?do?I?enable?the?magic?SysRQ?key???
sysrq.txt:*?How?do?I?use?the?magic?SysRQ?key??

其中文件‘sysrp.txt’包含该字符串,讨论的是Sysrq的功能。

默认情况下,‘grep’只搜索当前目录。如果此目录下有许多子目录,‘grep’会以如下形式列出

grep:?sound:?Is?a?directory?

这可能会使‘grep’的输出难于阅读。这里有两种解决的办法:

明确要求搜索子目录:grep?-r??
或忽略子目录:grep?-d?skip??

当然,如果预料到有许多输出,您可以通过管道将其转到‘less’上阅读:$?grep?magic?/usr/src/linux/Documentation/*?|?less

有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用?*)。如果您忘了,‘grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按<CTRL?c>,然后再试。

在etc/passwd文件中搜索和root字符有关的内容:

root@ubuntu:/# grep root /etc/passwd     //查找/etc/passwd文件中的root字符
root:x:0:0:root:/root:/bin/bash
root@ubuntu:/# grep -n root /etc/passwd   //查找/etc/passwd文件中的root字符,参数-n表示显示匹配行及 行号
1:root:x:0:0:root:/root:/bin/bash

参数:

-?:同时显示匹配行上下的?行;grep -2 root /etc/passwd 同时显示匹配行的上下2行

-b:打印匹配行前面打印该行所在的块号码

-c:只输出匹配行的计数

-f:从文件中提取模板,空文件中包含0个模板,所以什么都不匹配

-h:查询多文件时不显示文件名

-|:查询多文件时只输出包含匹配字符的文件名

-i:不区分大 小写(只适用于单字符)

-q:取消显示,只返回退出状态。0则表示找到了匹配的行

-n:显示匹配行及 行号

-v:反检索,只显示不匹配的行

-V:显示软件版本信息

-s:不显示不存在或无法读取文件的错误信息

-L:打印不匹配模板的文件清单

-l:打印匹配模板的文件清单。

ps:查看进程;ps -a  参数:

-a:列出所有的行程

-w:显示加宽可以显示较多的资讯

-au:显示较详细的资讯

-aux:显示所有包含其他使用者的行程

au:显示输出格式,包含使用者,PID,%cpu,路径,时间等信息

USER:行程拥有者

PID:pid为文本文件,内容只有一行, 记录了该进程的ID;防止进程启动多个副本。只有获得pid文件(固定路径固定文件名)写入权限(F_WRLCK)的进程才能正常启动并把自身的PID写入该文件中。其它同一个程序的多余进程则自动退出。

%MEM:占用的记忆体使用率

VSZ:占用的虚拟记忆体大小

RSS:占用的记忆体大小

TTY:终端的次要装置号码

STAT:该行程的状态

D:不可中断的静止

R:正在执行中

S:静止状态

T:暂停执行

Z:不存在但暂时无法消除

W:没有足够的记忆体分页可分配

<:高优先序的进程

N:低优先序的进程

L:有记忆体分页分配并锁在记忆体内

START:进程开始时间

TIME:执行的时间

COMMAND:所执行的指令

kill:杀掉指定进程

kill [-s <信息名称或信号编号>][程序;pid]    或    kill [-l <信息编号>]

这里的信号机制类似C++的映射消息机制

root@ubuntu:/home/tarena# sleep 10&    //显示sleep的进程PID
[1] 7914
root@ubuntu:/home/tarena# ps     //sleep进程已经在列表中了
  PID TTY          TIME CMD
 7800 pts/1    00:00:00 su
 7809 pts/1    00:00:00 bash
 7914 pts/1    00:00:00 sleep
 7916 pts/1    00:00:00 ps
root@ubuntu:/home/tarena# kill 7914    //终止sleep进程
root@ubuntu:/home/tarena# ps        //再次查看,已经没有了
  PID TTY          TIME CMD
 7800 pts/1    00:00:00 su
 7809 pts/1    00:00:00 bash
 7918 pts/1    00:00:00 ps

如果使用了信号机制,就相当于让一个进程去执行一个映射函数

kill [ -s signal | -p ] [ -a ]

-s:指定发送的信号
-p:模拟发送信号
-l:指定信号的名称列表
pid:要中止进程的ID号
Signal:表示信号

sleep:在shell脚本中延迟时间

以下用法中<n>可以为小数

sleep ns 或 sleep n   //延迟n秒

sleep nm   //延迟n分钟

sleep nh   //延迟n小时

sleep nd   //延迟n天

[root@jfht ~]# date; sleep 5; date    //输出日期数据;延迟5秒;输出日期数据
2011年 04月 17日 星期日 19:49:23 CST
2011年 04月 17日 星期日 19:49:28 CST

top:查看所有的进程的信息,包括使用的空间,cpu,pid,时间等

su:切换用户

tarena@ubuntu:~$ whoami    //显示当前用户为客户tarena
tarena
tarena@ubuntu:~$ su root   //切换到超级管理员
密码:
root@ubuntu:/home/tarena#  //现在就是超级管理员权限了,提示符变成了#

whoami:显示当前使用者用户

passwd:修改密码
sudo passwd root:修改密码

*:通配任意多个任意字符

root@ubuntu:/home/tarena# touch file_1 file_2 file_3                  //创建3个目录
root@ubuntu:/home/tarena# ls                                          //查看
Desktop    examples.desktop  file_3    Public     workdir
Documents  file_1            Music     Templates  安装软件列表
Downloads  file_2            Pictures  Videos     安装软件列表~

root@ubuntu:/home/tarena# rm -f file*                                 //删除所以匹配file的文件

root@ubuntu:/home/tarena# ls
Desktop    Downloads         Music     Public     Videos   安装软件列表
Documents  examples.desktop  Pictures  Templates  workdir  安装软件列表~
root@ubuntu:/home/tarena#

?:通配任意一个字符

root@ubuntu:/home/tarena# ls                                       //查看
Desktop    examples.desktop  file_3    Public     workdir
Documents  file_1            Music     Templates  安装软件列表
Downloads  file_2            Pictures  Videos     安装软件列表~

root@ubuntu:/home/tarena# ls file?                                //查看匹配file的文件
file_1  file_3

[]:通配一个字符集或者范围

root@ubuntu:/home/tarena# ls                           //查看
file_a    file_b     file_c    file_d   file_e

root@ubuntu:/home/tarena# ls file[a-c]                 //查看匹配file的文件
file_a  file_c

输入重定向

echo hello > a.txt    //输入字符到文本a.txt
cat < a.txt > b.txt   //输出文本a.txt的字符到文本b.txt 中
cat b.txt             //输出文本b.txt字符到桌面
hello

输出重定向:

echo hello     //输入字符到屏幕
hello
echo hello > a.txt    //输入字符到文本a.txt
cat a.txt    //输出文本a.txt到屏幕
hello

追加:不会出现覆盖内容

cat a.txt           //输出文本a.txt到屏幕
hello
echo hi >> a.txt    //追加输入字符到屏幕
cat a.txt           //输出文本a.txt到屏幕
hello
hi

|:管道符,将一个命令的输出作为下一个命令的输入

ls -l /etc | more    //详细输出etc目录内容,然后把这些目录里的文件名作为more参数,被more读出来到屏幕

;:命令分隔符,在一行中输入多个命令,用分隔符隔开,然后回车就可以从左到右顺序执行这些命令

cal;pwd;date    //打印日历;打印路径;打印当前时间

\:续行符

cat /etc/passwd \

> | sort > ~/userinfo

读取passwd文件内容到sort输出的userinfo文件中

sort:针对文本文件的内容,以行为单位来排序,详见网络解析

___________________________________________________________________________________________________________________________________________________________

4:Unix/Linux常用文本编辑器vi

要求:熟识掌握vi三种操作模式之间的切换,掌握命令模式下各个命令的使用

vi的操作模式分为三种

命令mode       //控制屏幕光标的移动,字符或光标的删除,移动复制某区段及进入Insert mode下,或者到Last line mode

底行命令mode   //储存文件或离开编辑器,也可设置编辑环境,如寻找字符串、列出行号等

文本编辑mode   //唯有在Insert mode下,才可做文字数据输入,按Esc等可回到Comand mode

vi a.txt     //输入vi及文件名称后,即可进入vi全屏幕编辑画面

注意:进入vi之后是处于“Command mode”下,您要切换到Insert mode才能输入文字

输入模式:

按ESC键转换回Command mode,在Command mode下按‘i’、‘a’或‘o’三键就可进入Insert mode

i: 插入,从目前光标所在之处插入所输入的文字。

a: 增加,目前光标所在的下一个字开始输入文字。

o: 插入新的一行,从行首开始输入文字。

说明:您目前处于Insert mode,您就只能一直打字。假如您发现打错字了,想用光标键往回移动,将该字删除,就要按ESC键转换回Command mode,再按方向键移动光标删除文字

vi可以直接用键盘上的光标键来上下左右移动,但正规的vi是用小写英文字母

h、j、k、l,分别控制光标左、下、上、右移一格。

Ctrl+B:屏幕往后移动一页。[常用]

Ctrl+F:屏幕往前移动一页。[常用]

Ctrl+U:屏幕往后移动半页。

Ctrl+D:屏幕往前移动半页。

0 (数字零):移动文章的开头。[常用]

G:移动到文章的最后。[常用]

w:光标跳到下个word的开头。[常用]

e:光标跳到下个word的字尾。

b:光标回到上个word的开头。

$:移到光标所在行的行尾。[常用]

^:移到该行第一个非空白的字符。

0:移到该行的开头位置。[常用]

#:移到该行的第#个位置,例:51、121。[常用]

删除文字:在命令模式下

x:每按一次删除光标所在位置的后面一个字符。[超常用]

#x:例如,6x 表删除光标所在位置的后面6个字符。[常用]

X:大字的X,每按一次删除光标所在位置的前面一个字符。

#X:例如,20X 表删除光标所在位置的前面20个字符。

dd:删除光标所在行。[超常用]

#dd:例如,6dd表删除从光标所在的该行往下数6行之文字。[常用]

5dd:删除五行

dw:删除当前词

在底行命令模式下:5,10d  删除从第五行到第十行

拷贝和粘帖文本:在命令模式下

yw:将光标所在位置到字符尾的字符复制到缓冲区中。

p:将缓冲区内的字符粘贴到光标所在位置(指令‘yw’与‘p必须搭配使用)。

yy:复制光标所在行。 p粘帖

#yy:如:6yy表示复制从光标所在的该行往下数6行之文字。 p粘帖

“ayy:将复制行放入buffer a, vi提供buffer功能,可将常用的数据存在buffer

“ap:将放在buffer a的数据粘贴。

“b3yy:将三行数据存入buffer b。

“b3p:将存在buffer b的资料粘贴

跳至指定行:命令模式下

Ctrl+G:列出光标所在行的行号。

底行命令模式

按ESC键转换回Command mode,在Command mode下按"  :  /  ?  "进入命令模式,底行命令模式命令参数:

:w filename:(输入“w filename”,将文章存入指定的文件名filename)

:wq:保存文件并退出vi

:wq!:强制保存文件,并退出vi

:q!:强制离开并放弃编辑的文件

:q:不保存文件,退出vi

:e!:放弃所有修改,从上次保存文件开始再编辑

:w:保存文件但不退出vi

:w!:强制保存,不推出vi

列出行号:在底行命令模式下

set nu: 会在文章的每一行前面列出行号。

#:井号代表一个数字,再按Enter就会跳到该行了,

/字符串:寻找字符串;先按/,再输入您想寻找的字,如果第一次找的关键字不是您相尽可能的,可以一直按n会往下寻找到您要的关键字为止。

?关键字:先按?,再输入您想寻找的字,如果第一次找的关键字不是您想要的,可以按n会往前寻找到您要的关键字为止

#G:15G,表示移动光标当前页的第15行行首。

数字:例如  :15  光标停留在指定的15行

高级编辑命令

~:改变大小写 //not use

J:把当前行和下一行连起来

u:废除刚才的编辑操作(每按一次n,撤消一次)

取代字符串:在last line mode输入

1,$s/旧字符串/新字符串/g      //会将全文的string字符串取代为replace字符串,1,$s就是指搜寻区间为文章从头至尾的意思,g则是表示全部取代不必确认

%s/string/replace/c:同样会将全文的string字符串取代为replace字符串,和上面指令不同的地方是,%s和1,$s是相同的功能,c则是表示要替代之前必须再次确认是否取代

1,20s/string/replace/g:将1至20行间的string替代为relpace字符串

___________________________________________________________________________________________________________________________________________________________

shell脚本

要求:理解脚本的概念和作用,掌握简单脚本的编写

脚本文件后缀名必须为.sh

root@ubuntu:/home/tarena# touch a.sh    //创建一个脚本文件
root@ubuntu:/home/tarena# vi a.sh       //编辑脚本文件,这里名写了三行;pwd   cal   date
root@ubuntu:/home/tarena# ls -l a.sh    //现在看到我们对脚本文件是没有访问权限的
-rw-r--r-- 1 root root 13 Jun 29 11:47 a.sh
root@ubuntu:/home/tarena# chmod 777 a.sh    //修改访问权限
root@ubuntu:/home/tarena# ls -l a.sh
-rwxrwxrwx 1 root root 13 Jun 29 11:47 a.sh    //现在可访问该脚本文件了
root@ubuntu:/home/tarena# ./a.sh     //编译该脚本文件的是在当前名录,按照这个方式来编写

/home/tarena             //打印路径

June 2013            //日期

Su Mo Tu We Th Fr Sa 
                   1 
 2  3  4  5  6  7  8    //打印日历
 9 10 11 12 13 14 15 
16 17 18 19 20 21 22 
23 24 25 26 27 28 29 
30

Sat Jun 29 11:49:24 CST 2013   //打印文件数据
root@ubuntu:/home/tarena#

脚本编辑:

pwd
cal
date

上一篇:如何使用Unix/Linux grep命令——磨刀不误砍柴工系列


下一篇:PowerShell_零基础自学课程_2_Powershell与Cmd以及Unix/Linux Shell