Linux的基础命令和Shell脚本

一、计算机

  1、能接收用户输入的指令和数据,经过中央处理器的算术逻辑单元处理,然后会产生或者显示新数据的,就是计算机。

   比如,普通商户用的计算器,手机,提款机,汽车导航,桌面电脑,手提电脑等

  2、计算机的五大单元

    输入单元:输入设备,键盘,鼠标,扫描仪,触摸屏幕

    输出单元:显示器,打印机.....

    cpu的控制单元:控制输入单元和输出单元工作

    cpu的算术逻辑单元:进行逻辑运算的

    内存:从输入单元获取数据,或者将数据传输到输出单元上。

    cpu与内存的关系

    cpu运算所需要的数据,全部都来自于内存。产生的数据也全部都写入内存。

  3、计算机的硬件

     主板:相当于人的神经系统,将其他硬件联系到一起

     主板中嵌入了一个微型程序:bios(basic input out system)

     cpu:  主要是起到控制其他硬件和运算。

     内存: 暂时存储cpu要用的数据

     硬盘: 永久存储数据

     显卡(内存):存储像素颜色的。

     网卡:使用tcp/ip协议进行网络通信的

     电源:相当于人的心脏。提供能源的

  小比喻:没有通电的计算机,就是一堆废铁

         通电后的计算机,就是能电人的废铁

二、操作系统

  1、概念

     操作系统是一组程序,这组程序中内部含有专门用来管理和控制计算机硬件的程序,我们称之为内核。还有一组用来提供给应用程序使用的系统调用接口。

  2、常用的操作系统

      PC端:unix,linux,windows,

手机端:mac,ios,android,

      微软: wp,

谷歌:chrome os.

三、linux

  1、简介

     1991、林纳斯.托瓦斯写的一个内核程序,后经过多人设计出的一个操作系统。是开源的,支持多用户,多线程。

  2、linux上的软件,多数都是免费的,我们可以直接使用。

--衍生出众多版本:redHat  优班图  centOS.....

四、linux的安装

  1、虚拟机VMware

     虚拟机的作用,就是模拟一台计算机硬件环境,可以在此环境上安装操作系统。

  2、vmware的安装

     (1)查询计算机是否禁止使用虚拟技术

        去bios里查看

Inter Virtualization technology

inter-VT

如果是禁止,设置为enable。之后保存退出。重启电脑

     (2)安装(略)

     (3)破解,去百度搜一下相应版本的破解码即可。

     (4)安装后,网络中心会多出两个虚拟网卡vmnet1,vmnet8。

ps:两个网卡的ip,可能会发生变化

     (5)ctrl+g是进入虚拟机界面

       ctrl+alt是退出虚拟机界面,回到主机

 

      建议: 内存设置为1G

           

      练习:

    DeskTop----桌面版

   

    Basic Server--服务版

===============================================================================

二、网络配置

   linux下查看网卡的信息命令:

   ifconfig

 

   网卡eth0的信息:

   ...............

   DEVICE=网卡设备

   TYPE=Ethernet--以太网(有线)

   UUID=.....网卡的唯一标识符

   bootproto=dhcp/static/none

   name="System eth0" --网卡的名字

   onboot=yes/no--开启启动设置

   ...........

 

连接网络的两种形式:

1、自动获取ip连接

  前提:

  在网卡eth0中的属性ONBOOT的值改为yes,即自动连接(需要使用root账户进行修改)

   

  桥接模式:主机自带的网卡会为虚拟机的网卡分配同一段位下的ip地址。

           可以联网。

  NAT模式:主机的虚拟网卡VMnet8会为虚拟机的网卡分配相同段位下的IP地址。

       可以联网。

 

使用命令ping一下 要连接的网络地址:

原理:向ping的远程ip地址发送请求,请求成功后远程会返回64个byte。如果没有字节丢失,即连接成功

  (1) ping 一下本地

      ping  localhost

  (2) ping 一下主机

      ping 192.168.43.250

  (3) ping 一下百度

          ping www.baidu.com

  (4) 使用主机ping一下linux虚拟机

   仅主机模式:主机的VMnet1网卡会为虚拟机的网卡分配ip地址。(网段相同)。

       不可以联网。

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

2、设置静态ip(手动改)

  桥接模式

文件的位置:

/etc/sysconfig/network-scripts/ifcfg-eth0

 

打开后修改红色区

DEVICE=eth0

TYPE=Ethernet

UUID=edece2c6-947e-4e8b-ab2e-43ed59c6a614

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=static  ----------修改成static或none都行

HWADDR=00:0C:29:5e:1f:c3

DEFROUTE=yes

PEERDNS=yes

PEERROUTES=yes

IPV4_FAILURE_FATAL=yes

IPV6INIT=no

NAME="System eth0"

IPADDR=192.168.1.200   --设置成你想要的IP(与物理机在同一段位)

NETMASK=255.255.255.0   ----子网掩码

GATEWAY=192.168.1.1    -----网关(与物理机一致)

DNS1=192.168.1.1    ---DNS与网关ip一致

 

去修改/etc/resolv.conf  添加

nameserver  网关ip

 

重启网络服务命令:

service  network   restart

 

之后测试

ping  localhost

ping  主机ip-----关闭防火墙

ping  www.baidu.com

 

NAT模式

DEVICE=eth0

TYPE=Ethernet

UUID=edece2c6-947e-4e8b-ab2e-43ed59c6a614

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=static     -----------修改成static

HWADDR=00:0C:29:5e:1f:c3

DEFROUTE=yes

PEERDNS=yes

PEERROUTES=yes

IPV4_FAILURE_FATAL=yes

IPV6INIT=no

NAME="System eth0"

IPADDR=192.168.9.200    -----------设置成你想要的(与VMnet8在同一段位即可)

NETMASK=255.255.255.0   --------子网掩码

GATEWAY=192.168.9.2   ----------网关(需设置成VMnet8提供的网关,一般结尾都是2)

DNS1=192.168.9.2     --------------DNS设置成与网关一致即可

 

重启网络服务命令:

service  network   restart

 

之后测试

ping  localhost

ping  主机ip-----关闭防火墙

ping  www.baidu.com

 

 

练习:

使用server版的linux练习网络配置

cd:表示切换目录

ls:显示目录的内容

pwd:显示当前位置

 

vi /etc/sysconfig/network-scripts/ifcfg-eth0

i键:表示插入

按退出键:esc

:wq回车

:q!强退出   

 

 

 

 

2018.9.26

复习

ip的四个段位,每个段位的范围0-255

桥接模式:ip与物理机在同一网段下(前三个段位一样)

网关与物理机要相同

nat模式:ip与vmnet8虚拟网卡在同一网段下

网关与dns1要与vment8结尾

仅主机:不能联网

--衍生出众多的版本:redHat,优班图,centOS...

 连接模式:

    ip:  段位1.段位2.段位3.段位4

         每个段位的范围:0-255

 

    桥接模式:能联网。

              ip与物理机在同一网段下(前三个段位一样)

              在设置静态ip时:

              网关与DNS1要与物理机相同

    NAT模式: 能联网

              ip与VMnet8虚拟网卡在同一个网段下。

      在设置静态ip时:

      网关与DNS1要与VMnet8相同

    仅主机模式:不能联网

============================================================================

linux的文件系统结构

特点:是一个倒立的树形结构

最顶端:是根目录,使用"/"表示,一般不用来存储文件

下面有很多系统预设的目录:

/bin:存放的命令文件,也可以称之为二进制目录。是系统管理员和普通用户使用的命令。

/boot:该目录下存放系统的内核文件和引导程序文件。

/dev,/media,/mnt:用来挂载linux系统下的其他设备

/etc: 存储的是所有的系统管理所需要的的配置文件和子目录

/home:用户的主目录,每个用户都有一个自己的目录,该目录名以用户账号命名,存于home下。      

/lib:存放的是系统最基本的动态连接资源库,几乎所有的应用程序都用到此资源库

/lost+found:系统意外崩溃或者意外关机后,产生的文件碎片存放于此。

/opt::给主机额外安装软件所摆放的目录。

/proc:此目录的数据存于内存中

/root:系统管理员root的主目录

/sbin,/usr/sbin,usr/local/sbin:存放的是系统管理员所使用的命令

/selinux:存放的是系统的安全机制相关文件,相当于防火墙

/srv:存放的一些服务启动后需要提取的数据

/tmp:存放系统产生的临时文件

/usr:应用程序存放目录

/var:存放系统执行过程中不断变化的文件,如日志文件等

===============================================================================

二、常用命令

  1、文件命名规则

     1)除了/之外,所有字符都合法

     2)有些字符最好不要用,如空格符、制表符、字符@#$&()-等

     3)避免使用.作为普通文件名的第一个字符。

     4)大小写敏感

  2、命令的格式:

      格式:命令  -选项   参数

       ex:   ls     -la      /etc

      PS:1)多个选项可以写在一起

          2)目录的.和..

    .:当前目录

    ..:当前目录的父目录

  (一)文件处理命令

   (1)  

    命令名称:ls

    命令原意:list

    命令路径:/bin/ls

    执行权限:所有用户

    功能描述:显示目录文件

    语法:ls  选项[-ald]   [目录或文件]

     -a  显示所有文件,包含隐藏文件

     -l 详细信息显示

    -d 查看目录属性

   (2)

   命令名称:cd

   命令原意:change directory

   命令路径:shell内置命令

   执行权限:所有用户

   功能描述:切换目录

   语法:cd   [目录]

    Ex:  cd  / 切换到根目录

cd   ..     回到上一级目录

 

    注意:  ~:当前用户的主目录

           cd 后不写参数,即回到主目录。

   (3)

   命令名称:pwd

   命令原意:print  working directory

   命令路径:/bin/pwd

   执行权限:所有用户

   功能描述:显示当前所在的工作目录

   语法:    pwd

   (4)

   命令名称:touch

   命令原意

   命令路径:/bin/touch

   执行权限:所有用户

   功能描述:创建空文件

   语法:touch [文件名]

   Ex: touch newfile

   (5)

   命令名称:mkdir

   命令原意:make directories

   命令路径:/bin/mkdir

   执行权限:所有用户

   功能描述:创建新目录

   语法:mkdir [目录名]

   Ex: mkdir newdir

   (6)

   命令名称:mv

命令原意:move

命令路径:/bin/mv

执行权限:所有用户

功能描述:移动文件、更名

语法:mv  [文件或目录名] [目的目录]

Ex: mv  file1 file2

将当前目录下文件file1更名为file2

mv file2 dir2

将file2移动到目录dir2下

 

(7)

命令名称:rm

命令原意:remove

命令路径:/bin/rm

执行权限:所有用户

功能描述:删除文件

语法:  rm   -r  [文件或目录]

     -r  删除目录

Ex: rm    file2

删除文件  file2

  rm –r    dir1

删除目录    dir1

(8)

命令名称:cp

命令原意:copy

命令路径:/bin/cp

执行权限:所有用户

功能描述:复制文件或目录

语法:cp -r [源文件或目录] [目的文件或目录]

    -r 复制目录

Ex: cp  file1 file2   dir1

将文件file1、file2复制到目录dir1

cp –r dir1 dir2

将dir1及其内容复制到dir2里

(9)

命令名称:cat

命令原意:concatenate and display files

命令路径:/bin/cat

执行权限:所有用户

功能描述:显示文件内容

语法:cat  [文件名]

Ex: cat /etc/issue

cat /etc/services

(10)

命令名称:more

命令路径:/bin/more

执行权限:所有用户

功能描述:分页显示文件内容

语法:more  [文件名]

        (空格)或f 显示下一页

   (enter) 显示下一行

   q或Q 退出

Ex: more  /etc/services

(11)

命令名称:head

命令路径:/bin/head

执行权限:所有用户

功能描述:查看文件的前几行

语法:head  -num  [文件名]

-num 显示文件的前num行

Ex: head -20  /etc/services

(12)

命令名称:tail

命令路径:/bin/tail

执行权限:所有用户

功能描述:查看文件的后几行

语法:tail  -num  [文件名]

-num 显示文件的后num行

-f 动态显示文件内容

Ex: head -20  /etc/services

(13)

命令名称:ln

命令原意:link

命令路径:/bin/ln

执行权限:所有用户

功能描述:产生连接文件

语法:ln -s  [源文件]  [目标文件]

-s 创建软连接

Ex: ln –s /etc/issue  /issue.soft

创建文件/etc/issue的软连接/issue.soft

ln  /etc/issue   /issue.hard

创建文件/etc/issue的硬链接/issue.hard

 

  软链接: 相当于window下的快捷方式对软连接操作,就是对源文件操作

源文件的删除会使软连接无效。

      支持目录。

  硬链接: 源文件的删除不会影响硬链接

          (硬链接相当于源文件的备份)

     不支持目录。

=========================================

权限管理命令

drwxr-xr-x. 2 root root 4096 9月 26 19:21 test

详情的第一个字段:共有10个字符

   drwxr-xr-x

第一个字符:表示文件的类型

    如:  -,表示文件

         d: 表示目录

 l: 表示软连接

第2~4个字符:user

     表示文件或目录的拥有者的权限

     r:read,可读权限, 数字表示:4

     w:write,可写权限,数字表示:2

     x:execute,可执行权限,数字表示:1

 

 

文件:

     r:可以查询里面的内容

     w: 可以修改里面的内容

     x: 可以执行此文件的

目录:

     r:可以查询目录内的文件或子目录

     w:可以创建或删除目录里的数据

     x:可以进入此目录。

第5~7个字符:(group)

     表示此文件或目录的拥有者所在组

     的组成员的权限

第8~10个字符:(other)

     表示除了拥有者所在组之外的

     其他人权限

 

第三个字段:表示拥有者的名称

第四个字段:拥有者所在组的组名称

 

 

练习:

   michael用户的主目录

   /home/michael

   root用户的主目录

   /root

 

   使用michael用户在其主目录下创建目录

   dir1.

   并查看权限。

   切换到root用户

   在dir

 

 

=====================

   创建用户:

   useradd  用户名    (系统管理员可用此命令)

   设置密码

   passwd  用户名

创建一个scott的普通用户,密码123456

========================

 

chmod 421 file1

-r---w---x

 

(1)

命令名称:chmod

命令原意:change the permissions mode of a file

命令路径:/bin/chmod

执行权限:所有用户

功能描述:改变文件或目录权限

语法:chmod [{ugo}{+-=}{rwx}] [文件或目录]

[mode=421] [文件或目录]

Ex: chmod g+w file1

赋予文件file1所属组写权限

chmod 777 dir1

设定目录dir1为所有用户具有全部权限

 

(2)

命令名称:chown

命令原意:change  file  ownership

命令路径:/bin/chown

执行权限:所有用户

功能描述:改变文件或目录的所有者

语法:chown  [用户]  [文件或目录]

Ex: chown  nobody  file1

改变文件file1的所有者为nobody

 

 

 PS:此命令只能使用root用户进行修改。

(3)

命令名称:chgrp

命令原意:change  file  group ownership

命令路径:/bin/chgrp

执行权限:所有用户

功能描述:改变文件或目录的所属组

语法:chgrp [用户组] [文件或目录]

Ex: chgrp  dam  file1

改变文件file1的所属组为adm

(4)

命令名称:umask

命令路径:/bin/umask

执行权限:所有用户

功能描述:显示、设置文件的缺省权限

语法:umask [-S]

-S 以rwx形式显示新建文件或目录的缺省权限

Ex: umask

umask -S

 

注意:umask显示的权限为真实权限的反码:

作业:

   查看权限的数字

 

    

 

    

      

 

 

 

2018.9.27

复习:

1、文件处理命令:

   ls:查看文件或目录信息

   cd:切换目录

   pwd:查看当前目录的绝对路径

   mv:移动、更名

   rm:删除命令  -rf

   touch:创建文件

   mkdir:创建目录

   cp:复制

   cat:显示文件内容

   more:分页显示      f/空格    回车,  Q/q

   head:

   tail:   -f 动态显示

   ln:创建链接文件。-s:软连接

2、权限管理命令

   chmod:更改目录或文件的权限

        方式1:  u  g  o

        chmod u+r|w|x 文件/目录

        方式2: r-4,w-2,x-1

        chmod  755 文件/目录

   chown:修改目录或文件的拥有者

   chgrp:修改目录或文件的所属组

   umask:显示当前用户在创建文件或目录的默认权限

         

       目录:所有权限为777

       在使用umask命令时显示的是权限的补码/掩码

       reg:  # umask

               0022

       第一个0:特殊权限位

       之后三位:022,就是权限的掩码

       真实权限为:

              777

                 - 022

             --------

          755

         选项 -S  查看真实权限

   # umask -S

   u=rwx,g=rx,o=rx

 

文件:所有权限为666

      文件:linux系统要求新建的文件权限,不能有执行权限

     即最大值为:666

             掩码为:022

     文件的真实权限:

         666

    -022

-------

             644

        # umask -S

    u=rw,g=r,o=r

   能不能修改系统默认设置的权限

   答:能,但是不建议。

   umask [掩码值]

   练习:  修改新建目录的默认权限为750

     umask [掩码值]

 

     666

     027

     640

====================================

文件搜索命令:

(1)

命令名称:which

命令路径:/usr/bin/which

执行权限:所有用户

功能描述:显示系统命令所在目录

语法:while [命令名称]

Ex: which   ls

 

相似命令:whereis [文件名]

(2)

命令名称:find

命令路径:/usr/bin/find

执行权限:所有用户

功能描述:查找文件或目录

语法:find  [搜索路径] [搜寻关键字]

 

PS:尽量不要在根路径下搜索。

 

选项:  -name  查找名称

通配符: *表示0或多个字符

占位符: ?

 

       -size  按照文件大小搜索

        

       文件块: 一个块,512个字节=0.5KB.

       100M      102400*2

 

正负号: -102400  小于 50M

        +204800  大于 100M

 

连接符:  -a  相当于  and

         -o  相当于  or

 

练习:查看 大于500KB 并且小于3M的文件

 

 

选项:-user,按照拥有者搜索

     -type,按照文件类型查询

    

练习:在 /home/michael 搜索大于3m 并且文件类型

      是f

 

      find /home/michael -size +6144 -a -type f

选项:

 按天查询: ctime,atime,mtime

 按分钟查询: cmin,amin,mmin

    c:change  文件属性被改变,比如权限,修改时间,拥有者

    a:access  文件被访问

    m:modify  文件内容被修改

 

reg:

   find / -mmin -120 :查找两小时内被修改过的文件

   

连接符:

-exec      ls  -l {} 空格\;

 

-exec [命令] [选项] {} \;

 

练习:查找两小时内被访问过的文件,

     并显示详情信息

     find /home/michael -amin -120 -exec

     ls -l {} \;

     

查找/home/michael里大于50M的文件,并删除

     find /home/michael -size +102400

     -exec rm {} \;

 

在做查找并删除时,为了防止删除重要文件。

可以使用-ok 代替-exec 来进行询问

 

(3)

命令名称:locate

命令原意:list files in databases

命令路径:/usr/bin/locate

执行权限:所有用户

功能描述:寻找文件和目录

语法:locate [搜索关键字]

Ex: locate  file

列出所有跟file相关的文件

 

 

linux系统里维护了一个文件系统结构的数据库

locate是在数据库中查询文件。速度比find快

(4)

命令名称:updatedb

命令原意:update the slocate databases

命令路径:/usr/bin/updatedb

执行权限:root

功能描述:建立整个系统目录文件的数据库

语法:updatedb

Ex: updatedb

 

命令名称:grep

命令原意:

命令路径:/bin/grep

执行权限:所有用户

功能描述:在文件中搜寻字串匹配的行并输出

语法:grep [指定字符] [源文件]

Ex: grep ftp  /etc/services

 

帮助命令:

 

(1)

命令名称:man

命令原意:manual----手册的含义

命令路径:/usr/bin/man

执行权限:所有用户

功能描述:获取帮助信息

语法:man [命令或配置文件]

Ex: man ls

查看ls命令的帮助信息

man services

查看配置文件services的帮助信息

(2)

命令名称:info

命令原意:information

命令路径:/usr/bin/info

执行权限:所有用户

功能描述:获取帮助信息

语法:info [任何关键字]

Ex: info ls

查看ls命令的帮助信息

 

(3)

命令名称:whatis、apropos、makewhatis

命令原意:search the whatis database for strings

命令路径:/usr/bin/whatis   apropos

        /usr/sbin/makewhatis

执行权限:all user、 all  user、root

功能描述:获取索引的简短说明信息

语法:whatis|apropos  [任何关键字]

Ex: whatis  ls

apropos  fstab       相当于man  -k

 

 

makewhatis

建立前两个命令使用的数据库,

当使用这两个命令发生错误时,

就是whatis dababase没有建立

压缩解压缩命令:

(1)

命令名称:gzip

命令原意:gnu zip

命令路径:/bin/gzip

执行权限:所有用户

功能描述:压缩文件

语法:gzip   选项  [文件]

压缩后文件格式:.gz

(2)

命令名称:gunzip

命令原意:gnu unzip

命令路径:/bin/gunzip

执行权限:所有用户

功能描述:解压缩.gz的压缩文件

语法:gunzip   选项  [压缩文件]

Ex:gunzip   file1.gz

 

(3)

命令名称:tar

命令原意:

命令路径:/bin/tar

执行权限:所有用户

功能描述:打包目录

语法:tar   选项  [目录]

-c 产生.tar打包文件

-v 显示详细信息

-f 指定压缩后的文件名

-z 打包同时压缩

格式:.tar.gz

Ex: tar –zcvf dir1.tar.gz dir1

将目录dir1压缩成一个打包并压缩的文件

 

 

Tar的解压缩语法:

tar   选项  [目录]

-x 解包.tar文件

-v 显示详细信息

-f 指定解压文件

-z 解压缩

Ex: tar –zcvf dir1.tar.gz

      PS:解压时,v在f之间

 

(4)

命令名称:zip

命令原意:

命令路径:/usr/bin/zip

执行权限:所有用户

功能描述:压缩文件或目录

语法:

zip   选项  [压缩后文件名称] [文件或目录]

-r 压缩目录

格式:.zip

Ex: zip  services.zip /etc/services

zip  -r test.zip /test

(5)

命令名称:unzip

命令原意:

命令路径:/usr/bin/unzip

执行权限:所有用户

功能描述:解压.zip的压缩文件

语法:

unzip [压缩文件]

Ex: upzip test.zip

 

(6)

命令名称:bzip2

命令原意:

命令路径:/usr/bin/bzip2

执行权限:所有用户

功能描述:压缩文件

语法:

bzip2 选项 [文件]

-k 产生压缩文件后保留源文件

格式: .bz2

Ex: bzip2 –k file1

(7)

命令名称:bunzip2

命令原意:

命令路径:/usr/bin/bunzip2

执行权限:所有用户

功能描述:解压缩

语法:

bunzip2 选项 [文件]

-k 解压缩后保留源文件

Ex: bunzip2 –k file1.bz2

=====

网络通信命令

(1)

命令名称:write

命令原意:

命令路径:/usr/bin/write

执行权限:所有用户

功能描述:向另外一个用户发信息,以ctrl+D作为结束

语法:

write <用户名>

Ex: write webmaster

======

(2)

命令名称:wall

命令原意:

命令路径:/usr/bin/wall

执行权限:所有用户

功能描述:向所有用户广播信息

语法:

wall [message] [文件名]

Ex: wall Happy New Year

(3)

命令名称:ping

命令原意:

命令路径:/usr/sbin/ping

执行权限:root

功能描述:测试网络连通性

语法:

ping 选项 ip地址

Ex: ping 192.168.1.1

(4)

命令名称:ifconfig

命令原意:

命令路径:/usr/sbin/ifconfig

执行权限:所有用户

功能描述:查看网络设置信息

语法:

ifconfig  选项 [网卡设备标识]

-a 显示所有网卡信息

Ex: ifconfig -a

 

系统关机命令:

 

(1)

命令名称:shutdown

命令原意:

命令路径:/usr/sbin/shutdown

执行权限:root

功能描述:关机

语法:

shutdown

Ex: shutdown –h now

 

  shutdown -h now

  shutdown -r 10

  

(2)

命令名称:reboot

命令原意:

命令路径:/usr/sbin/reboot

执行权限:root

功能描述:重启系统

语法:

reboot

Ex: reboot

 

==================

vi/vim

1、简介

Vim/Vi是一个功能强大的全屏幕文本编辑器,是Linux/Unix上最常用的文本编辑器,它的作用是建立、编辑、显示文本文件

PS:Vim/Vi没有菜单,只有命令

 

2、几种模式:

   (1)正常模式----------Esc

   (2)插入模式----------i

   (3)命令模式----------:

   (4)可视模式----------

3、常用的命令

   a:在光标后插入文本

   A:在行末插入文本

   i:在光标前插入文本

   I:在行开头插入文本

   o:在光标下生成新行

   O:在光标上生成新行

 

   h、left:向左移动光标

   j、down:下移一行

   k、up:上移一行

   l、right:向右移动光标

 

   $:移动至行尾,不进入插入模式

   0(零):移动至行首,不进入插入模式

 

 

   H:移动到屏幕顶端

   M:移动到屏幕中央

   L:移动到屏幕底部

 

   :set nu   设置行号

   :set nonu 取消行号

 

   gg:  到文本的第一行

   G:到文本的最后一行

   nG:到文本的第n行

   :n  到文本的第n行

 

 

   :w    保存修改

   :w  file_name   另存为一个新文件

   :q    退出

   :wq   保存并退出

   :q!   不保存退出(强退)

   :wq!  保存并退出(只适合拥有者,即所有者可以忽略只读权限)

   ZZ   快捷键,保存并退出

 

   x:删除光标所在处的字符

   nx:删除光标后n个字符

   dd:删除光标所在行的内容

   ndd:删除光标后n行的内容

   dG:删除光标所在行到文件末尾的内容

   D:删除光标所在处到行末的内容

   :n1,n2d  表示删除指定范围的行

 

 

   yy、Y 复制当前行内容

   p、P  将复制的内容粘贴到当前行的行下或行上

   nyy、nY 复制当前行以下的n行内容

   dd:剪切当前行

   ndd:剪切当前行以下的n行

 

   r:  替换光标所在处的内容

   R:  从光标所在处开始替换,按ESC结束

   u:  取消上一步的操作

 

 

===============================================================================

   /string  从文本开始处,向结尾处搜索字符串

            可以先使用:set ic进行忽略大小写。

   或者/string\c 忽略大小写的搜索

   n:搜索后,n键可以移动下一个位置上

 

   :%s/old/new/g 全文替换old字符串

 

   :n1,n2s/old/new/g 指定范围内替换old字符串

===============================================================================

  注释:

    :n1,n2s/^/#/g     使用#进行连续行注释

    :n1,n2s/^#//g     取消注释

    :n1,n2s/^/\/\//g  使用//进行连续行注释

 

===============================================================================

软件的安装

  二进制文件的安装方式:

  rpm与yum

JDK的安装:  *.tar.gz

  第一步:先查询是否有安装过

       # rpm -qa | grep jdk/java/jre

  第二步:如果安装过进行删除

       # rpm -e --nodeps  文件名

  第三步:(注意:使用普通用户)

      将*.tar.gz文件使用普通账户上传

      /home/michael/soft/

  第四步: 解压文件到soft目录里,(然后可以创建一个软连接)

  第五步: 选择配置文件进行配置环境变量

       /etc/profile--相当于windows的系统变量配置文件

       ~/.bash_profile

       ~/.bashrc   相当于windows的用户变量配置文件

  第六步:

        JAVA_HOME=.....

CLASS_PATH=$JAVA_HOME/lib/dt.jar:....

PATH=......:$PATH

export JAVA_HOME CLASS_PATH PATH

ps:配置PATH时,一定要注意原有的值的拼接

  第七步: 重启系统或者使用下面命令

          使配置文件

           source ~/.bashrc

 

 

 

 

2018.9.28

文件搜索命令

  which

  find [路径] [选项] [文件名]

  选项:  -name   init   通配符*,占位符?

         -size   文件块  0.5KB

 -user

 -ctime atime mtime

 -cmin  amin  mmin

         -type

  连接符:  -a   -o

  连接符: -exec  [命令名] [选项] {} \;

           -ok  表示询问

  locate  一般与updatedb一起使用

       PS:locate在系统维护的一个文件系统数据库里查询

          速度快。

帮助命令

   man

   info

   whatis、apropos、makewhatis

网络通信命令

   write、wall、ifconfig、ping

压缩解压缩:

   gzip-gunzip

   tar  

       压缩:

          -c

  -v

  -z

  -f

       解压缩:

          -x

   zip--unzip

   bzip2--bunzip2

关机命令:

    shutdown  [选项]  [time]

    reboot

================================

VI:linux内置的文本编辑器

  模式:

     (1)正常模式

     (2)插入模式

     (3)命令模式

     (4)可是模式

命令(自行复习)

========================

软件包的管理

rpm:

  (1)查看软件是否安装

     #rpm  -q   jdk

     #rpm  -qa  | grep  jdk

   (2)卸载安装包

       # rpm    –e   jdk

       注意:如果其他软件包有依赖关系,

       卸载时会产生提示信息,

       可使用 --nodeps强行卸载

       reg: rpm -e --nodeps [安装包名]

   (3)安装:

      #rpm   -ivh   jdk-7u80-linux-x64.rpm

      PS:安装之后的软件包名很可能与安装前的

          包名不一样

 最好查询一下。

 

 

 

 

其他选项:

 

--excludedocs

不安装软件包中的文档文件

 

--prefix  path

将软件包安装到由path指定的路径下

 

--test

只对安装进行测试,并不实际安装

 

 

 

情况1:      软件包已经被安装

 

#rpm   -ivh   jdk-7u80-linux-x64.rpm

提示:

package jdk-7u80-linux-x64.rpm is already

Installed

 

如果想覆盖此软件包,可以在命令行上使用

--replacepkgs选项

 

 

情况2: 文件冲突

 

#rpm   -ivh   jdk-7u80-linux-x64.rpm

提示:conflicts with file from ….  

     Connot be installed

 

如果想让rpm忽略该错误信息,可以在命令行上使用

--replacefiles选项

 

情况3:未解决依赖关系

 

rpm软件包可能依赖于其他软件包,在安装了特定的软件包后才能安装该软件包。

提示:failed  dependencies ….  Is  needed by ….

你必须安装完所依赖的软件包,才能解决这个问题。

如果想强制安装,请使用 --nodeps选项

 

情况3:升级

#rpm   -Uvh   jdk-7u80-linux-x64.rpm

 

 

 

   

 

 

 

 

 

 

应用yum的优势:

 

1)自动解决软件包的依赖关系

 

2)方便软件包升级

 

安装 yum install   

检测升级 yum check-update

升级 yum update

软件包查询 yum list

软件包信息 yum info

卸载 yum remove

帮助 yum -help、 man  yum

 

 

(4)查询

选项:

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

-f 查询文件所属软件包

-p 查询软件包

-i 显示软件包信息

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

-d 显示被标注为文档的文件列表

-c 显示被标注为配置文件的文件列表

 

 

 

 

rpm查询应用案例

 

查询文件隶属的软件包:rpm –qf

查询软件包信息: rpm –qi、rpm –qip

查询软件包安装文件: rpm  -ql、rpm –qlp

查询软件包帮助文件: rpm –qd

查询软件包配置文件: rpm -qc

 

 

 

软件包文件提取

 

解压所有文件到当前目录

Rpm2cpio 软件包  |  rpio  -idv

解压制定文件到当前目录

Rpm2cpio  软件包 | cpio –idv  ./etc/inittab

=====================================

一、Shell(壳)

         Shell 是一个用 C 语言编写的程序,

 这个应用程序提供了一个界面,

 用户通过这个界面访问操作系统

 内核的服务。

 Ken Thompson 的 sh

 是第一种 Unix Shell,

 Windows Explorer

 是一个典型的图形界面 Shell。

二、Shell 脚本

         是一种为 shell 编写的脚本程序。

 业界所说的 shell 通常都是指

 shell 脚本,但读者朋友要知道,

 shell 和 shell script 是两个不

 同的概念。

         本文出现的 “shell编程”

 都是指 shell 脚本编程。

Shell 编程跟 java、php 编程一样,

只要有一个能编写代码的文本编辑器和

一个能解释执行的脚本解释器就可以了。

 

Linux 的 Shell 种类众多,常见的有:

Bourne Shell(/usr/bin/sh或/bin/sh)

Bourne Again Shell(/bin/bash)

C Shell(/usr/bin/csh)

K Shell(/usr/bin/ksh)

Shell for Root(/sbin/sh)

 

本章节关注的是 Bash

 

         也就是 Bourne Again Shell,

 由于易用和免费,Bash 在日常工作

 中被广泛使用。同时,Bash 也是大

 多数Linux 系统默认的 Shell。

         在一般情况下,人们并不区分

 Bourne Shell 和 Bourne Again Shell,

 所以,像?#!/bin/sh,它同样也可以改

 为?#!/bin/bash。

         #! ?告诉系统其后路径所指定

 的程序即是解释此脚本文件的

 Shell 程序。

 

Shell程序步骤

1、创建一个文件,扩展名为.sh。

2、修改文件的权限为可执行文件

3、编程程序

4、执行

    执行方式两种

    (1) sh 脚本

    (2) ./脚本

 

 

Shell结构

1、#!   用来指定执行脚本的shell

2、#   注释

3、 命令和控制结构

 

命名规则:

1、命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。

2、中间不能有空格,可以使用下划线(_)。

3、不能使用标点符号。

4、不能使用bash里的关键字(可用help命令查看保留关键字)

 

使用规则:

1、习惯用大写字母来命名变量

2、赋值时,”=”前后不能有空格

3、命令的执行结果赋值给变量时,使用反单引号   

       如:TIME=`date`

4、使用变量时,使用 $变量名    或   ${变量名}

 

 

只读变量

         使用readonly。此命令可以将变量定义为只读变量,只读变量的值不能被改变

删除变量

使用unset。变量删除后不能再次被使用,unset不能删除只读命令

 

临时变量:也叫局部变量,在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

 

永久变量: 也叫环境变量,所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

 

字符串

 

是shell编程中最常用最有用的数据类型

(除了数字和字符串,也没啥其它类型好用了)

字符串可以用单引号,也可以用双引号,

也可以不用引号。

 

 

单引号:

1、单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

2、单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

 

双引号:

1、双引号里可以有变量

2、双引号里可以出现转义字符

 

一、拼接字符串

 

两种方式:

1、无缝拼接

2、双引号内直接使用变量

 

二、获取字符串长度

     

语法1: ${#name}

语法2:    expr length ${name}

 

三、提取子字符串

 

语法:${name:startIndex:length}

      ${name:startIndex}

      ${name:0-index:length}

      ${name:0-index}

 

 

另注:还可以使用 #、##、%、%%进行删除后保留子串

A、#、##?:从左边开始删除。

#?表示从左边删除到第一个指定的字符;

##?表示从左边删除到最后一个指定的字符。

 

B、%、%%?:从右边开始删除。?

%?表示从右边删除到第一个指定的字符;

%%?表示从右边删除到最后一个指定的字符。

 

另注:删除包括了指定的字符本身。

 

四、查找子字符串:

   

 

 使用命令 expr。

    ex:

           url=“this is a good man”

           index=`expr  index  “${url}”  is`

           echo  $index       ----输出 2

========================================

Shell数组

 

 

使用规则

 

1、Bash仅仅支持一维数组,并且没有限定数组的大小。

2、数组元素的下标从0开始。

3、获取数组中的元素要利用下标,

4、下标使用不当,会报错。

一、定义数组

语法1:

arrayName=(值1  值2    …  值n)   

语法2:

arrayName=(

值1

值2

..

值n

)

注意:元素间使用空格分隔开或者换行符

 

或者直接定义数组的各个元素

 

name[0]=值1

name[1]=值2

name[n]=值n       

 

 

 

二、读取数组

格式:

${name[index]}

三、获取数组所有元素

格式:

${name[*]} 或${name[@]}

四、获取数组长度

格式:

${#name[*]}或${#name[@]}

 

位置变量和特殊变量

Shell解释用户执行的命令时,会将命令行的一串字符进行解析划分成部分。

每个部分都有一个固定的变量名$n,不能自定义。

$n:   n从0开始,依次往后+1。

从$1开始 叫位置参数变量。

大于等于10时,必须使用{}将数字括起来

Ex:

ls     –la    file1   file2    file3  …..   file10

$0    的值为:ls  -la

$1    的值为file1

…….

${10} 的值为file10

 

 

特殊变量:

$*  :获取所有参数合并成一个字符串

$#  :获取参数的个数

$$  :当前进程的ID

$!  :后台运行的最后一个进程的ID

$?  :最后一个命令的退出状态,0表示没有错误

 

一、read命令

 

        从键盘读取数据,赋值给变量

Ex:    read username

 

注1:当输入的词组个数大于需要的参数个数,则多出的词组将被作为整体为最后一个参数接收

一、read命令(续)

 

Ex:   

read –p “请输入密码:” –n   6   -t   5   password

      echo   -e  “\npassword is $password”

 

参数说明:

-p:输出提示文字

-n :输入字符串长度,达到此长度,自动结束

-t :输入限制时间

-s :隐藏输入内容

-e :使转义功能生效

 

二、expr命令

        对整数型变量进行算术运算

Ex:

expr  3  +  5

expr   3  \* 5

复杂计算:

expr ` expr 5  -  1`   /   2

num=` expr   $var  /  2`

 

三、echo命令

用于字符串的输出显示

echo   $var

echo   It   is   a   test   file

 

开启转义 :  -e

echo  -e   “ hello   \n   world”

echo   -e   “hellokitty \c”

\n #换行

\c #不换行

 

四、printf命令

        与echo功能相同,用来输出,功能更强大,如格式化字符串,指定字符串的宽度,左右对齐方式,默认不换行,可以手动添加\n

语法:

printf format-string [arguments……...]

说明:

     format-string: 格式控制字符串

arguments: 参数值列表

 

%d  %s %c  %f?格式替代符详解:

d: Decimal 十进制整数?-- 对应位置参数必须是十进制整数,否则报错!

s: String 字符串?-- 对应位置参数必须是字符串或者字符型,否则报错!

c: Char 字符?-- 对应位置参数必须是字符串或者字符型,否则报错!

f: Float 浮点?-- 对应位置参数必须是数字型,否则报错!

 

 

四、printf命令(续)

 

Ex:

printf  “%d   %s\n”    1   “abc”

printf  %s   abcdef

printf  %s  abc  def         #此格式只指定了一个参数,但是多出的参数仍然会按照该格式输出,格式被重用

printf  “%s  %s  %s\n”   a b c d e f g h I j

printf  “%s  and  %d” #没有参数时,%s为空,%d为0

 

 

五、test命令

 

用于测试变量是否相等、是否为空、文件类型等

 

格式:

test    测试条件

 

测试范围:整数测试,字符串测试,文件测试

 

 

五、test命令(续)

 

整数测试

test  v1  -eq  v2 测试两个数是否相等

test  v1  -gt  v2 测试是否v1>v2

test  v1  -ge  v2 测试是否v1>=v2

test  v1  -lt  v2 测试是否v1

test  v1  -le  v2 测试是否v1<=v2

test  v1  -ne  v2 测试两个数是否不相等

 

五、test命令(续)

 

字符串测试

test  str1  =  str2 测试字符串是否相等

test  str1  !=  str2 测试字符串是否不相等

test  str1 测试字符串是否不为空

test  -n  str1 测试字符串是否不为空

test  -z  str1 测试字符串是否为空

 

五、test命令(续)

 

文件测试

test  -d  file 指定文件是否目录

test  -f   file 指定文件是否是常规文件

test  -x  file 指定文件是否可执行

test  -r  file 指定文件是否可读

test  -w  file 指定文件是否可写

test  -a  file 指定文件是否存在

test  -s  file 文件的大小是否非0

 

另注:通常test命令不单独使用,

而是与if语句连用

 

分支结构:

一、if -else分支结构

if语法格式:

if       条件

then

逻辑块(通常都是些命令)

fi

 

写成一行:适用于终端写法

 If   条件; then   逻辑 ; fi

 

 

一、if -else分支结构

if else语法格式:

if       条件

then

逻辑块(通常都是些命令)

else

逻辑块

fi

 

一、if -else分支结构

If else-if else语法格式:

 

if       条件1

then

逻辑块(通常都是些命令)

elif 条件2

then

逻辑块

else

逻辑块

fi

 

 

一、if -else分支结构(续)

 

1、分支结构也可以进行嵌套

2、多个条件的联合

-a   逻辑与   当两个条件都成立时,结果为true

-o   逻辑或,两个条件只要有一个成立,结果为真

 

:nohl

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

2018.9.29

二、case多选择语句

Case语句会匹配一个值和一个模式,匹配成功,执行相应逻辑块

语法:

case  值   in

模式1)

逻辑块

;;

模式2)

逻辑块

;;

esac

三、for循环结构

格式:

for   变量 in   名字表

do

逻辑

done

写成一行:

for   变量    in  列表;do  逻辑; done;

 

四、select表单循环

语法:

select  变量  in   列表

do

逻辑块

done

写成一行:

Select  变量 in 列表;do  逻辑   ; done;

1) 小黑 小白

2) 小王 小刘

3) 小张 小罗

 

五、while循环

语法:

while  条件

do

逻辑块

done

 

六、无限循环

语法:

while :

do

逻辑块

done

while true

do

逻辑块

done

 

七、until循环

Until循环执行逻辑直到true时停止

语法:

until 条件

do

逻辑块

done

八、break与continue

 

如果想要提前结束循环(即想跳出循环)

使用关键字

break

 

如果想结束当次循环,进行下一次循环

使用关键字

continue

 

--练习: 计算100以内的和,排出25 50 75

--练习: 循环从命令行读取字符串,进行拼接

        当读取到q或者exit时,终止循环。

并输出拼接后的字符串

 

九、shift指令

作用:

参数左移,每执行一次,参数序列顺次左移一个位置,$#的值少一个,

多数用于分别处理每一个参数,移出去的参数不再可用

 

ls -l   p1  p2 p3  p4 p5

 

p2 p3  p4 p5

p3  p4 p5

p4 p5

p5

 

练习:   ./test6.sh   1 2 3 4 5 6 7

 

一、基础

在shell脚本中,我们也可以定义函数,封装逻辑,进行调用

语法:

[function]       functionName()

{

逻辑

}

调用时,不带()

 

一、基础

说明:

1、关键字function,可以忽略不写

 

2、return关键字,可加可不加,看需求

      (1)加:    返回值只能是0~255的数字

      (2)不加:  最后一条命令结果作为返回值

 

 

 

 

         

 

 

 

 

 

你可能感兴趣的:(shell脚本,Linux常用命令)