Linux Shell

来源:互联网 发布:淘宝宝贝详情图片像素 编辑:程序博客网 时间:2024/05/29 21:16

 

 

 

 

 

LINUX SHELL

VI

VI简介

VIVisualInterface的简称,是一个应用于命令行的全屏幕文本编辑器。VI有三种基本的工作模式:命令模式、文本输入模式和末行模式。

命令模式下,用户的任何输入都被VI当作命令加以解释并执行(注意,输入的命令本身并不在屏幕上显示)。VI命令用于对文档进行管理,当在SHELL环境下敲入VI命令,打开编辑器时,默认进入的就是命令模式。

文本输入模式是对文档的编辑模式,用户的任何输入都将作为文本内容显示在文档中。在命令模式下可以通过各种VI命令(AIO等)进入到文本输入模式下;在文本输入模式下,按Esc键返回命令模式。

末行模式也称EX转义模式,在命令模式下,按:键即可进入末行模式。末行模式下,会在窗口的最后一行显示一个冒号,作为末行模式的提示符,等待用户输入命令。末行命令执行完毕后,VI自动回到命令模式下。在末行模式下,可以通过退格键、DELESC等回到命令模式下。

进入VI

SHELL环境下进入VI的语法如下:

VI [FILENAME]

FILENAME可以是已经存在的文本文件或不存在的文件,如果不存在时,即为新建。也可以直接敲入VI命令进入而不带文件名,不过需要在退出的时候给出文件名(在退出命令后面)。

进入VI后,默认的是命令模式,即系统处于等待命令输入而不是文本输入的模式下。符号-~标识的行为空行,最后一行为状态行(类似WINDOWS中的状态栏),显示当前正在编辑的文件的名称以及光标状态等。

VI打开后,默认将光标放在第一行,如果需要将光标放在特定行上,可以使用如下语法:

VI +N [FILENAME]

--将光标放在第N

VI + [FILENAME]

--将光标放在最后一行

VI +/XXX [FILENAME]

--将光标放在第一个与XXX匹配的行上(子串模糊匹配)

保存与退出VI

保存在末行模式下进行,命令为w(应该是write 的简写吧),系统保存当前文件,但并不退出VI(相当于Windows中的Ctrl+S)。使用w命令还可以附带一个新的文件名,将当前文本另存为一个新的文件(使用w!命令会在新文件存在时强行覆盖),而当前编辑的文本并不保存到原文件(另存后仍然回到当前文件的命令模式)。

退出VI可以分为保存后退出和强行退出。保存后退出命令有:

命令模式下的ZZ

末行模式下的xwq(单独的q要求文档没有被修改过或已经保存过)

强行退出命令为:

末行模式下q!

显示行号

在末行模式下使用如下命令可以显示行号:

set number

或者其简写:

Se nu

显示状态

在最后一行显示文本及光标的状态,在命令模式下使用如下命令:

Ctrl+g

移动光标

移动光标可以在命令模式和文本输入模式下进行。两种模式下都适用的方式是使用方向键,这也是最常用的方式。在命令模式下,还可以使用小写的h(左)、j(下)、k(上)、l(右)来替代方向键。

在命令模式下,还有一些较为复杂的移动光标的方法,列举如下:

space:光标右移一个字符

Backspace:光标左移一个字符

Ctrl+p:光标上移一行

Ctrl+n :光标下移一行

Enter :光标下移一行

wW:光标右移一个字至字首

bB:光标左移一个字至字首

eE:光标右移一个字至字尾

) :光标移至句尾

( :光标移至句首

}:光标移至段落开头

{:光标移至段落结尾

nG:光标移至第n行首

n+:光标下移n

n-:光标上移n

n$:光标移至第n行尾

H :光标移至屏幕顶行

M :光标移至屏幕中间行

L :光标移至屏幕最后行

0:(注意是数字零)光标移至当前行首

$:光标移至当前行尾

滚屏

屏幕滚动命令只能在命令模式下使用,分为半屏滚动和全屏滚动。半屏滚动命令如下:

Ctrl+u(向上半屏)

Ctrl+d(向下半屏)

全屏滚动命令如下:

Ctrl+b(向上一屏)

Ctrl+f(向下一屏)

VI中还有三个在当前屏幕中移动光标的命令,分别为HML,他们可以将光标分别移动到屏幕的顶端、中间和底部,而文本并不发生滚动。

文本输入

在命令模式下,要开始文本输入,有几种不同的命令,如下:

1、  插入命令(INSERT,在当前光标前插入)

插入命令为小写的i和大写的I,小写的i在光标前插入,大写的I在光标所在行的行首插入。

2、  附加命令(APPEND,在当前光标后附加)

附加命令为小写的a和大写的A,小写的a在光标后附加,大写的A在光标所在行的行尾附加。

3、  打开新行命令(OPEN,在当前光标所在行的前面或后面打开新行)

打开新行命令为小写的o和大写的O,小写的o在当前行的下面新开一行,大写的O在当前行的前面新开一行。

文本修改

文本修改除了可以在文本输入模式下直接进行外,还可以在命令模式下通过各种命令进行,说明如下:

Xx

--删除单个字符

Dddd$

--删除整行

U

--撤销

.

--重复

复制与粘贴

选择文本v

复制选定文本y

剪切选定文本d

粘贴p

文件与目录

显示文件内容

CAT

CAT可以用来显示文件内容以及合并文件:

cat Readme.txt

cat 1.txt 2.txt 3.txt > 4.txt

注:不带参数使用cat时,通过Ctrl+d退出。

MORE

MORE可以分屏显示文件内容,在每屏结束后,等待用户输入(回车或空格),开始下一屏。其中回车为上移一行,空格为上移一屏。

More Readme.txt

LESS

MORE命令只能向下翻阅文本,不能向上翻阅,而LESS命令可以做到这一点。使用LESS命令,可以通过回车、空格向下翻阅,也可以通过上下方向键进行上下翻阅,退出时使用Q命令:

Less Readme.txt

HEAD

HEAD命令查询文件的开头几行内容,命令格式如下:

Head [-n]Readme.txt

其中n的默认值为10

TAIL

类似于HEAD命令,TAIL命令显示文件的尾几行,默认为10

SORT

SORT可以对文件内容进行排序,举例如下:

sort a.txt

--排序并输出

sort a.txt > b.txt

--排序后输出到文件

UNIQ

UNIQ可以用来显示或排除重复的行,但输入必须是已经排序的文本,即相同的行必须相邻,否则不会认为是相同的行。举例如下:

uniq -d a.txt

--只显示重复的行

uniq -u a.txt

--只显示不重复的行

uniq -c a.txt

--显示重复次数,可取代du

文件内容搜索

GREP

GREP(Global search Regular Expression andPrint out the line,全面搜索正则表达式并把行打印出来)是一个强大的文本内容搜索工具,它能使用正则表达式搜索文本,并将匹配的行打印出来。GREP还包括两个类似的命令:EGREPFGREP,它们之间有微小的差别。下面列举几个搜索的范例:

grep 'camel' readme.txt

--在文件readme.txt中搜索指定字符串

grep camel *

--在所有文件中搜索指定字符串

grep camel *.c

--在所有.c文件中搜索指定字符串

文件查找

FIND

find . -name 'a*'

--查找所有以a开头的文件

文件内容统计

WC

WC命令可以用来对指定文件中的字节、行以及字数进行统计,参数如下:

-c:字节

-l:行数

-w:字数

wc -clw a.txt

文件内容比较

COMM

对已经排序的两个文件进行比较,举例如下:

comm -12 a.txt b.txt

--显示两个文件中共有的行

comm -23 a.txt b.txt

--显示在第一个文件中出现而不在第二个文件中的行

DIFF

逐行比较两个文件(不需要排序),列出不同之处。

文件的复制、移动和删除

CP

CP命令可以对文件或目录进行复制,主要参数说明如下:

-f  存在时直接覆盖

-i  存在时给出提示

-r  递归复制所有子目录和文件

举例说明如下:

cp -i a.txt /home/camel/b.txt

--将当前目录下的a.txt复制到/home/camel下,并更名为b.txt

--如果不更名,则取消b.txt

cp -r /home/camel /home/zhl

--/home/camel中的所有文件和子目录复制到/home/zhl

MV

MV可以用来移动文件或对文件重命名。当移动文件时,一次可以操作多个文件,而重命名时,一次只能操作一个。主要参数有:

-f  存在时直接覆盖

-i  存在时给出提示

举例如下:

mv a.txt b.txt

--重命名

mv /home/camel/* .

--/home/camel目录下所有文件移动到当前目录下

RM

RM可以删除一个目录中的一个或多个文件。主要参数如下:

-f  忽略不存在的文件

-i  交互式删除

-r  递归删除,包括目录

文件链接

LN

文件链接是指文件或目录的别名,系统可以通过这个别名访问实际对象或进行权限管理。链接分为硬链接和符号链接。

默认情况下,LN创建的是硬链接,带S参数为符号链接,举例如下:

ln -s a.txt b

目录的创建与删除

MKDIR

MKDIR,创建目录。带参数P可以创建多层目录:

mkdir ./camel/zhl

RMDIR

RMDIR,删除目录,可以使用rm –r dir替换。

目录的切换与显示

...~

这三个符号分别代表:当前目录、当前目录的父目录和当前用户的主目录。

CD

CD命令为变更当前的工作目录,如果不带任何参数,则将用户的主目录变更为当前目录。

PWD

PWD为列出当前工作目录的绝对路径(Print Working Directory)。

LSDIR

LSDIR命令的功能为列出目录中的内容,LS命令带有颜色标识。LS命令可以附带多种参数,其中,Aa为显示隐藏文件,而l为以长格式来显示文件的详细信息,如下:

[ls –l命令有一个别名:ll]

[oracle@LinuxServer34 camel]$ ls -l

总用量 244

drwxr-xr-x  3oracle oinstall   4096  9 23 14:02 a

-rw-r--r--  1oracle oinstall      7  9 22 16:58 a1.txt

-rw-r--r--  1oracle oinstall      7  9 22 16:58 a2.txt

-rw-r--r--  1oracle oinstall     21  9 22 16:58 a3.txt

lrwxrwxrwx  1oracle oinstall      5  9 23 13:50 m -> a.txt

 

第一列为文件类型与权限,第二列为链接数,第三列为文件属主,第四列为文件属组,后面为文件大小及修改时间。

对于第一列,文件类型与权限,它由10个字符组成。第一个字符表示文件的类型,如下:

-:普通文件

d:目录

l:符号链接

b:块设备文件

c:字符设备文件

后面的9位表示文件的访问权限。分为三组,每组三位,依次表示文件属主、同组用户以及其它用户的权限。其中每一位上的字符说明如下:

r:读

w:写

x:执行,对于目录,表示进入

s:文件执行时,将文件的UIDGID赋予执行进程的UIDGID

t:设置标志位

-:没有设置权限

文件与目录的权限管理

文件与目录权限

通常情况下,文件与目录的权限包括读、写和执行,其权限的赋予可以在文件属主、同组用户以及其它用户三个级别上进行。通过LS命令可以查看文件的权限属性。

使用LS –l查看文件列表时,第一列为文件类型与权限,它由10个字符组成(-rw-r--r--)。第一个字符表示文件的类型,如下:

-:普通文件

d:目录

l:符号链接

b:块设备文件

c:字符设备文件

后面的9位表示文件的访问权限。分为三组,每组三位,依次表示文件属主、同组用户以及其它用户的权限。其中每一位上的字符说明如下:

r:读

w:写

x:执行,对于目录,表示进入

s:文件执行时,将文件的UIDGID赋予执行进程的UIDGID

t:设置标志位

-:没有设置权限

CHMOD

CHMODChange Mode)命令为改变文件或目录的权限。这个命令有两种使用方式:文字设定法和数字设定法。

文字设定法的一般格式为:

chmod [who][+|-|=][mode] filename

其中,who为权限的操作对象,可以为如下单个或组合值:

u:文件或目录的所有者

g:同组用户

o:其它用户

a:所有用户,默认值

操作符号如下:

+:添加权限

-:取消权限

=:赋予给定权限,同时取消其它权限

mode代表权限,可以为如下字母的组合:

r:读

w:写

x:执行

u:同属主

g:同属组

o:同其它用户

举例如下:

chmod ug+w,o-x readme.txt

--属主与属组增加写权限,其它用户增加执行权限

 

除了文字设定法,还有一种更加简洁的数字设定法。数字设定法中,0表示没有权限,1表示可执行,2表示可写,4表示可读。这样,对于每个级别(属主、属组和其它)的权限都可以表示为07的一个八进制数,表示的顺序依次是:属主、属组和其它。例如,将某个文件设定为属主有读写和执行权限,属组和其它只有读权限,那么,命令格式如下:

chmod 744 a.txt

CHOWN

CHOWN命令的功能为变更文件或目录的属主或属组。包含一个参数R,可以递归修改目录的属主和属组:

chown -R username.groupname /home/camel

用户与用户组管理

用户与用户组

LINUX中,文件是属于用户的,用户属于某个用户组或多个用户组。

用户的基本信息是保存在如下文本文件中的:

/etc/passwd

文件中的每一行描述一个用户信息,如下:

camel:x:500:500:camel:/home/camel:/bin/bash

分别为:登录名、加密口令表示、UIDGID、用户描述信息、主目录、SHELL

用户的加密口令是保存在影子文件中的:

/etc/shadow

同样,文件中的每一行描述一个用户信息,如下:

camel:$1$P1U14OXd$OJ1CnkfwJrT060t79qZC9.:14490::99999::::

分别为:用户登录名、加密后的口令、70年到上次修改口令的天数、两次修改口令之间至少经过的天数、口令还将有效的天数(99999表示永不过期)等。

 

同用户一样,用户组的基本信息也保存在一个文本文件中:

/etc/group

文件中的每一行描述一个用户组信息,如下:

camel:x:500:

分别为:分组名、加密口令表示和GID

用户组的口令保存在/etc/gshadow下,包括组名、加密口令和组成员等信息。

用户管理

USERADDPASSWD

USERADD命令用来创建系统用户,命令语法如下:

useradd [-c comment]

        [-d home_dir]

        [-eexpire_date]

        [-finactive_time]

        [-ginitial_group]

        [-Ggroup[,...]]

        [-m [-kskeleton_dir] | -M]

        [-s shell]

        [-u uid [-o]] [-n] [-r] login

举例如下:

useradd -g oinstall -G dba oracle

用户创建完毕后,需要使用PASSWD命令为用户指定密码,直接敲入:Passwd username即可开始指定密码。注意,只有超级用户才可以为其它用户指定密码,普通用户只能使用不带参数的PASSWD命令修改自己的密码。

USERMOD

    USERMOD命令用来修改用户信息,参数类似于USERADD命令。

USERDEL

USERDEL命令用来删除用户,带参数r可以连同主目录一起删除,但是不会删除非主目录下的其它文件,需要使用FIND命令来删除:

find / -user camel –exec rm {} /

用户组管理

GROUPADD

    GROUPADD命令用来创建用户组。

GROUPMOD

    GROUPMOD命令用来修改用户组信息。

GROUPDEL

GROUPDEL命令用来删除用户组。注意,当用户组为某个用户的主分组时,不能删除。

软件包管理

RPM

RPM简介

RPMRedhat Package Manager)是LINUX提供的软件包管理工具,提供对软件的打包、安装、卸载、查询以及升级等功能。

RPM包(*.rpm)除了包含可执行文件、附属文件等,还包含以数据库记录形式存在的依赖属性模块,即为了应用当前软件而需要的其它软件。安装的时候,系统会根据RPM包中记录的信息,查看当前环境是否满足,不满足时是不能安装的。满足条件安装时,会将软件包信息写入RPM数据库,以便以后的查询与卸载。

由于RPM包中的文件是编译好的,所以要求安装环境与编译环境一致,且要满足软件的相互依赖性。为了解决这个问题,出现了SRPMSOURCE RPM),即RPM包中包含源码,通常以 ***.src.rpm 这种格式来命名。

RPMDB(初始化与重建RPM数据库)

有的时候,我们的rpm的数据库会因为某些原因损坏,这样当你执行rpm的相关命令的时候就会报类似下面的错误:

rpmdb: fatal regionerror detected; run recovery

error: db4error(-30982) from dbenv->open: DB_RUNRECOVERY: Fatal error, run databaserecovery

error: cannot openPackages index

这样的后果是你将不能使用rpm来添加删除,更新查询你系统的RPM软件包了,其实只要按照下面的步骤做就可以恢复您的RPM数据库而不需要重新安装系统:

# cd /var/lib

# mv rpm rpm.old

# mkdir rpm

# rpmdb --initdb

# cprpm.old/Packages rpm

# rpmdb --rebuilddb

以上是针对redhat8 redhat9的做法如果是以前的版本或者其他版本的linux,请按照下面的步骤进行:

# cd /var/lib

# mv rpm rpm.old

# mkdir rpm

# rpm --initdb

# cp rpm.old/Packagesrpm

# rpm --rebuilddb

RPM -Q(软件包查询)

RPM软件包查询包括对已经安装完毕的软件查询以及对*.rpm文件包的查询。查询使用带有qquery)参数的RPM命令,如下:

rpm -q|--query

 

各主要参数说明如下:

p:查询未安装的RPM包(*.rpm

f:查询某个文件属于那个软件包

a:查询所有已安装的软件包

i:显示软件包的概要信息

l:显示软件包中的文件列表

c:显示配置文件列表

d:显示文档文件列表

R:显示软件包的依赖关系

 

举例如下:

--查询某个具体的软件包

$rpm -q ftp

ftp-0.17-22

--查询系统所有已安装的软件包

$rpm -qa

--查询系统所有已安装的软件包并分页显示

$rpm -qa |more

--查询文件属于那个软件包

$rpm -qf /usr/lib/zsh

--查询软件包的安装文件列表

$rpm -ql zsh

--查询软件包的概要信息

$rpm -qi zsh

--查看一个软件包的依赖关系

$rpm -qpR file.rpm

RPM -I(软件包安装)

RPM软件包安装通过带有iinstall)参数的RPM命令完成,如下:

rpm -i|--install

 

--普通安装

rpm -ivh xxx.rpm

--测试安装

rpm –i --test xxx.rpm

--强制安装

rpm -ivh --force xxx.rpm

RPM -E(软件包卸载)

rpm -e xxx

TAR

TARLINUX下常用的一个打包工具,为TAPE ARCHIVE(最初设计用来将文件打包归档到磁带上)的缩写。通常打包文件为*.tarTAR命令的主要参数有:

c:创建TAR文件

r:追加文件到TAR

delete:从TAR包中删除文件

t:显示TAR包文件内容

x:从TAR包中释放文件

f:对普通文件操作

v:处理时显示详细信息

z:用gzip压缩或解压缩

 

举例如下:

--创建TAR文件(f指对普通文件操作)

tar cvf a.tar ./*

--显示TAR文件

tar tf a.tar

--释放文件

tar xvf a.tar

--追加文件

$tar -rf all.tar *.gif

 

在使用TAR工具打包的同时,还可以进行压缩,避免再次调用压缩程序,下面详细说明可以在TAR中使用的压缩程序。

TAR调用GZIP

    gzipGNU组织开发的一个压缩程序,.gz结尾的文件就是gzip压缩的结果。与gzip相对的解压程序是gunziptar中使用-z这个参数来调用gzip。下面来举例说明一下:

    tar -czf all.tar.gz *.jpg

    这条命令是将所有.jpg的文件打成一个tar包,并且将其用gzip压缩,生成一个gzip压缩过的包,包名为all.tar.gz

    tar -xzf all.tar.gz

    这条命令是将上面产生的包解开。

TAR调用BZIP2

    bzip2是一个压缩能力更强的压缩程序,.bz2结尾的文件就是bzip2压缩的结果。与bzip2相对的解压程序是bunzip2tar中使用-j这个参数来调用gzip。下面来举例说明一下:

    tar -cjf all.tar.bz2 *.jpg

    这条命令是将所有.jpg的文件打成一个tar包,并且将其用bzip2压缩,生成一个bzip2压缩过的包,包名为all.tar.bz2

    tar -xjf all.tar.bz2

    这条命令是将上面产生的包解开。

TAR调用COMPRESS

    compress也是一个压缩程序,但是好象使用compress的人不如gzipbzip2的人多。.Z结尾的文件就是bzip2压缩的结果。与compress相对的解压程序是uncompresstar中使用-Z这个参数来调用gzip。下面来举例说明一下:

    tar -cZf all.tar.Z *.jpg

    这条命令是将所有.jpg的文件打成一个tar包,并且将其用compress压缩,生成一个uncompress压缩过的包,包名为all.tar.Z

    tar -xZf all.tar.Z

    这条命令是将上面产生的包解开

压缩包

ZIP

ZIP压缩包含ZIPUNZIP两个命令,压缩为ZIP,解压为UNZIP,形成的压缩文件后缀一般为*.ZIPZIP压缩与WINDOWS中的ZIP文件是通用的,可以互相压缩或解压。

对于压缩命令ZIP,主要的参数有:

r:压缩时包含子目录

v:显示文件列表

d:从ZIP文件中删除一个文件

m:将特定文件移入ZIP文件中

 

举例说明如下:

--压缩当前目录下所有文件

$zip -r all.zip ./*

--显示ZIP文件中的文件信息

$zip -v all.zip

--删除压缩文件中的指定文件

$zip -d all.zip a.txt

--向压缩文件中添加指定文件

$zip -m all.zip a.txt

 

UNZIP用于ZIP文件的解压,常见用法有:

--解压到当前目录

$unzip all.zip

--解压到指定目录(-d为指定目录,-n不覆盖,-o为覆盖已经存在的)

$unzip -n all.zip -d /tmp

--查看文件目录,类似于带-VZIP命令

$unzip -v all.zip

GZIP

GZIPGNU ZIP的缩写,一次只能对一个文件进行压缩或解压,不能象ZIPRAR一样一次可以压缩多个文件,默认后缀名为*.gz

GZIP使用比较简单,它集合了压缩和解压功能,主要参数说明如下:

d:解压(否则为压缩)

l:显示压缩文件的内容

v:压缩和解压时,显示名称和压缩比

 

举例说明一下:

--压缩当前目录下的所有文件(各自形成一个.gz文件)

$gzip -v *

--解压缩

$gzip -dv *

BZIP2

    BZIP2也是对单个文件进行压缩或解压缩的,该工具有几个名称,包括:BZIP2BUNZIP2BZCAT,形成的文件后缀一般为.bz2。一般压缩使用BZIP2,解压缩使用BUNZIP2

进程

查看进程

PS

psLINUX的进程状态查看命令,是process status(或process snapshot)的缩写。ps类似于WINDOWS中的任务管理器(可以同时按下CTRLSHIFTESC启动任务管理器),不过ps查看的是进行瞬间的快照,不是动态的(后面即将介绍的top是动态的)。

不带任何参数的ps命令列出与当前用户和当前终端有关的进程信息。常用的查看进程信息的参数组合有:

-ef:显示所有进程的全面信息,可以获取的信息有:

UID:进程属主用户

PID:进程ID

PPID:父进程的ID

C:进程最近使用CPU的估算

STIME:进行开始时间,以“时:分”的形式给出

TTY:进程建立时所对应的终端,问号表示不占用终端

TIME:累计使用CUP时间

CMD:进程所对应的命令名

 

aux:显示所有终端所有用户的有关进程的所有信息,可以获取的信息有:

USER:进程属主用户

PID:进程ID

%CPUCPU使用率

%MEM:内存使用率

VSZ:占用虚拟内存大小(K

RSS:占用内存大小(K

TTY:进程建立时所对应的终端,问号表示不占用终端

STAT:进程状态

START:进程开始时间

TIME:占用CPU的时间

COMMAND:所执行的指令

 

其中,进程状态STAT有如下几种:

D不可中断(通常为IO操作)

R正在运行,或在队列中的进程

S处于休眠状态

T停止或被追踪

Z僵尸进程

W进入内存交换(从内核2.6开始无效)

X死掉的进程

<高优先级

n低优先级

s包含子进程

+位于后台的进程组

TOP

top命令可以动态显示进程信息。在top命令显示的信息中,包含统计信息区和进程信息区。统计信息区包含CUP、内存、虚拟内存(交换内存)以及用户进程等统计信息;进程信息区包含各系统进程的详细信息。

常用的命令格式如下:

top d 1

每一秒刷新一次信息。

终止进程

KILL

    对于前台进程可以使用Ctrl+C来结束,对于后台进程,只能使用KILL命令来结束。