01.Linux系统bash初始

发布于 2020-03-13  160 次阅读


  1. 1.Linux系统终端概述

    服务器终端切换: Ctrl + Alt + F1 … F6
    虚拟机终端切换: Ctrl +Shift +Alt +F1 … F6

    虚拟终端由mingetty程序生成

    //物理机执行为本地终端

    [root@lxgyw ~]# tty

    /dev/tty1

     

    //通过网络使用模拟终端远程连接Linux, 日常运维中就是这种方式。

    [root@lxgyw ~]# tty

    /dev/pts/1

  2. 2.Linux系统Bash管理


    简单的说, Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。


    实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。

    Linux, Shell也有多种不同的版本。主要有下列版本的Shell:

    BASH Shell: 是一个为GNU计划编写的Unix shell, 是许多Linux发行版的默认Shell
    C Shell:
    SUN公司ShellBSD版本。
    Z Shell:
    它集成了bashksh的重要特性,同时又增加了自己独有的特性。

    还有许多传统UNIX上用的Shell,例如tcshcshashbshksh, Shell Script大致都类同,当您学会一种Shell以后,其它的Shell很快就上手, 大多数的时候, 一个Shell脚本
    通常可以在很多种Shell上使用。

    查看当前使用的shell

    [root@lxgyw ~]# echo $SHELL

    /bin/bash

    查看Linux可用的 shell

    [root@lxgyw ~]# cat /etc/shells

    /bin/sh

    /bin/bash

    /sbin/nologin

    /bin/dash

    /bin/tcsh

    /bin/csh

    /bin/zsh

    Bash Shell提示符

    [root@lxgyw ~]# echo $PS1

    [\u@\h \W]\$

     

    [root@lxgyw ~]# date

    Sat
    Jan
    20 09:45:40
    EST
    2018

     

    [root@lxgyw ~]# whoami

    Shell 语法

    命令行bash shell, 为用户提供输入, 执行命令的界面

    //等待用户输入,执行命令, $ = 普通用户, # = root用户(超级管理员)

    [student@desktop0 ~]$

     

    //bash Shell 执行命令

    //命令
    选项
    参数

    command [-options] [arguments]

    [root@lxgyw ~]# ls #命令

    [root@lxgyw ~]# ls -a #命令+选项

    [root@lxgyw ~]# ls -a /tmp/ #命令+选项+参数

     

    命令: 命令的主体


    一个命令有多个选项, 多个选项可以合并在一起

    选项: 用于调节命令的具体功能


    "-"引导短格式选项(单个字符),例如"-l"


    "--"引导长格式选项(多个字符),例如"--color"


    多个短格式选项可以写在一起,只用一个"-"引导,例如"-al"

    参数: 命令操作的对象,如文件、目录名等

     

    # 命令必须开头,
    选项和参数位置可以发生变化

    我们可以使用SHELL实现对Linux的大部分管理

    1.文件管理

    2.权限管理

    3.用户管理

    4.磁盘管理

    5.网络管理

    6.软件管理

    ...

    使用Shell的方式

    输入命令 --> 效率低 -->适合少量的工作

    Shell Script --> 效率高-->适合复杂重复性的工作

    BASH所支持的功能

    命令行编辑快捷键

    内部命令与外部命令

    命令补全与路径补全

    命令别名与命令历史

    转义字符与路径展开

    通配符与特殊字符

    重定向与管道技术

  3. 2.1.Bash特性:命令补全

    通过上下方向键来调取过往执行过的Linux命令;

    命令或参数仅需输入前几位就可以用Tab键补全;

    tab键可以实现命令补全, 路径补全和命令实现方式一致, 工作中我们经常用到tab补全, 减少执行命令以及路径出错率。

    1.命令补全

    2.提示功能

    3.减少出错

    //查看ip时忘记具体了命令

    [root@lxgyw ~]# ifcon

    //按下tab键会自动补全

    [root@lxgyw ~]# ifconfig

     

    //按一下tab键没有反应, 按两下tab键列出所有if开头的命令

    [root@lxgyw ~]# if

    if ifconfig ifenslave ifrename

    ifcfg ifdown ifnames ifup

     

    //linux路径较深, 经常使用tab键进行补全, 如果路径出错是没有办法补全

    [root@lxgyw ~]# ls /etc/sysconfig/network-scripts/

  4. 2.2.Bash特性:命令快捷键

    终端快捷键的使用可以帮助我们大大提升效率

    Ctrl + A //光标跳转至正在输入的命令行的首部

    Ctrl + E //光标跳转至正在输入的命令行的尾部

    Ctrl + C //终止前台运行的程序

    Ctrl + D //shell中,ctrl-d表示推出当前shell

    Ctrl + Z //将任务暂停,挂至后台

    Ctrl + L //清屏,和clear命令等效。

    Ctrl + K //删除从光标到行末的所有字符

    Ctrl + U //删除从光标到行首的所有字符

    Ctrl + R //搜索历史命令, 利用关键字

     

    //在命令行前加面加 "#" 则该命令不会被执行

    History查看系统命令历史, 追溯之前发生情况

    命令选项
    -w
    保存命令历史到历史文件
    -c
    清空命令历史记录, 不会情况文件
    -d
    删除命令历史的第 N 条行

    history命令历史相关快捷键

    //使用双 !! 可执行上一条命令

    [root@lxgyw ~]# ls

    lxgyw.com

    [root@lxgyw ~]# !!

    ls

    lxgyw.com

     

    //输入!6, 执行history命令历史中第
    6
    行命令

    [root@lxgyw ~]# !6

    touch lxgyw.com

     

    //使用!cat, 调用history命令历史最近一次执行过的cat命令

    [root@lxgyw ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

    [root@lxgyw ~]# !cat

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

     

    [root@lxgyw ~]# ls /etc/passwd

    //调用上一条命令的最后参数或选项, 按下ESC松开, 然后按下
    "."

    [root@lxgyw ~]# cat

    [root@lxgyw ~]# cat /etc/passwd

    //第二种方式, 输入!$

    [root@lxgyw ~]# ls !$

    ls /etc/passwd

    /etc/passwd

  5. 2.3.Bash特性:命令别名

    命令别名将用户经常使用的复杂命令简单化, 可以用"alias 别名名称=命令"命令创建属于自己的命令别名, 若要取消一个命令别名,则是用unalias 别名名称命令。

    //1.定义临时别名, if1为查看eth0网卡别名

    [root@lxgyw ~]# alias if0='ifconfig eth0'

    [root@lxgyw ~]# if0

     

    //如果定义命令本身, 会执行什么?

    [root@lxgyw ~]# alias ifconfig='ifconfig eth0'


    //
    绝对路径执行, 调用命令本身

    [root@lxgyw ~]# /sbin/ifconfig


    //
    通过\转义字符, 调用命令本身

    [root@WebServer ~]# \ifconfig

     

     

    //2.定义系统永久生效别名, 将命令别名添加至当前用户环境配置文件

    [root@lxgyw ~]# echo "alias ifconfig='ifconfig eth0'" >> ~/.bashrc

    //如将别名命令添加至/etc/bashrc , 对所有用户生效

     

    //3.取消临时别名

    [root@lxgyw ~]# unalias ifconfig

  6. 2.4.Bash特性:命令流程

    当我们执行一个命令, 整个命令执行流程如下:
    1.
    判断命令是否通过绝对路径执行
    2.
    判断命令是否存在别名
    3.
    判断用户输入的是内部命令还是外部命令
    4.
    内部命令直接执行, 外部命令检测是否存在缓存
    5.
    检测PATH路径, 有执行, 无报错

    内部命令: shell程序自带的命令。
    外部命令: 在系统PATH变量的某个路径下的可执行程序。

    使用type命令检测用户输入的命令属于内部命令还是外部命令。

    //cd命令属于shell内部命令

    [root@linux-node1 ~]# type -a cd

    cd is a shell builtin

    cd is /usr/bin/cd

     

    //ping属于外部命令, 同时会打印当前命令路径

    [root@lxgyw ~]# type -a ping

    ping is /bin/ping

    PATH变量定义的路径, 作用是告诉Bash执行的外部命令存放的位置,Bash会在这些路径中进行逐个扫描。

    //echo所见即所得

    [root@lxgyw ~]# echo "123"

    123

    [root@lxgyw ~]# echo -e "123 \n456"

    123

    456

     

    //打印当前环境变量目录

    [root@lxgyw ~]# echo $PATH

    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

     

    //PATH由多个路径组成,每个路径值之间用冒号间隔,对这些路径的增加和删除操作都将影响到Bash解释器对Linux命令的查找。

     

    //修改PATH变量

    [root@lxgyw ~]# PATH=/soft/bin:$PATH

    //写入/etc/profile配置文件永久生效

    echo 'export PATH=/soft/bin:$PATH' >> /etc/profile

    事实上执行过的外部命令都会保存在内存缓存中, 当再次执行相同的命令, 会通过缓存调取执行, 也就意味着不会搜索PATH路径。

    //表缓存命令所在位置

    [root@lxgyw ~]# hash

    hits command


    1 /usr/bin/tty


    3 /sbin/ifconfig

     

    //已缓存命令,如果移动位置会导致无法找到该命令

    [root@lxgyw ~]# mv /sbin/ifconfig /bin/

    [root@lxgyw ~]# ifconfig

    -bash: /sbin/ifconfig: No such file or directory

     

    //删除缓存过的ifconfig命令, 即可执行

    [root@lxgyw ~]# hash -d ifconfig

    [root@lxgyw ~]# ifconfig

     

    //当然可以清空缓存表

    [root@lxgyw ~]# hash -r

     

     

    //命令缓存hash需要注意如下情况:

    1.如果执行外部命令1次就会对该命令进行缓存

    2.如果将命令移动了位置

    a.使用绝对路径执行

    b.删除hash表的缓存指令

    总结, 当我们执行了一个ping命令之后, 整个命令执行的流程步骤如下:

    1.检查执行的是否是绝对路径执行
    2.
    检查该ping命令是否存在别名
    3.
    检查该ping命令是内部命令还是外部命令
    4.
    如果是内部指令直接执行, 如果是外部命令
    5.
    检测该命令是否有缓存,如果没有,查找PATH变量
    6.
    检查PATH路径直到查找到该命令然后执行
    7.
    如果没有找到该命令则返回错误。command not found

  7. 2.5.Bash特性:路径展开

    Linux Shell下路径展开用花括号包括, 逗号分隔, 这样花括号里的内容会被展开形成列表。

    [root@lxgyw ~]# mkdir /tmp/zz/a/b /tmp/yy/a/b -pv

    mkdir: created directory `/tmp/zz'

    mkdir: created directory `/tmp/zz/a'

    mkdir: created directory `/tmp/zz/a/b'

    mkdir: created directory `/tmp/yy'

    mkdir: created directory `/tmp/yy/a'

    mkdir: created directory `/tmp/yy/a/b'

     

    //删除目录

    [root@lxgyw ~]# rm -rf /tmp/{zz,yy}

     

    //通过路径展开方式创建目录

    [root@lxgyw ~]# mkdir /tmp/{zz,yy}/a/b -pv

    mkdir: created directory `/tmp/zz'

    mkdir: created directory `/tmp/zz/a'

    mkdir: created directory `/tmp/zz/a/b'

    mkdir: created directory `/tmp/yy'

    mkdir: created directory `/tmp/yy/a'

    mkdir: created directory `/tmp/yy/a/b'

     

     

    思考:/tmp 路径下创建以下目录

    etc/init.d

    etc/sysconfig

    usr/lib

    usr/bin

    usr/include

    var/spool

    var/run

    proc

    sys

    bin

  8. 2.6.Bash特性:转义字符

    Shell解释器提供了非常丰富的转义字符, 来实现字符处理以及命令替换。

    4类常用转义字符

    反斜杠(\):使反斜杠后面的一个变量变为字符串。
    单引号(''):转义其中所有的变量为单纯的字符串。
    双引号(""):保留其中的变量属性,不进行转义处理。
    反引号(``):把其中的命令执行后返回结果。

    //将特殊字符转换为正常字符

    [root@lxgyw ~]# echo "shoping is $500"

    shoping is
    00

    [root@lxgyw ~]# echo "shoping is \$500"

    shoping is $500

    //转义其中特殊字符为普通字符串

    [root@lxgyw ~]# echo 'shoping is $500'

    shoping is $500

     

     

    //使用$()实现命令替换

    [root@lxgyw ~]# echo "The Directory is $(pwd)"

    The Directory is /root

    //使用``实现命令替换

    [root@lxgyw ~]# echo "The Directory is `pwd`"

    The Directory is /root

     

    //转义其中所有的变量为单纯的字符串

    [root@lxgyw ~]# touch file-`date +%F-%H-%S`

    [root@lxgyw ~]# ls

    file-2017-12-03-04-18

     

    [root@lxgyw ~]# touch 'file-`date +%F-%H-%S`'

    [root@lxgyw ~]# ls

    file-2017-12-03-04-18 file-`date +%F-%H-%S`

  9. 2.7.Bash特性:获取帮助

    1.通过man命令获取帮助

    手册的常见级别: 1(普通用户命令手册) , 5(配置文件手册), 8(管理员命令手册)

    g : 回到手册的顶部

    G : 去到文档的底部

    / : 输入要搜索的关键字,进行文档搜索

    q: 退出文档

    回车: 往下滚动一行

    空格键: 往下翻一页

    man -a passwd

    man 5 passwd

    man 1 passwd

    man -k passw 找到所有的包含passwd关键字的手册并且列出来

    2.通过infopinfo获得帮助

    首页寻找Textinfo文档,如果没有,强制打开对应的Man文档


    vi风格类似,快捷键:


    空格:翻页

    HOME: 返回页面顶部


    END:
    返回页面底部


    上箭头: 光标上移动一行


    下箭头: 光标下移动以行


    左箭头: 返回上一章节


    右箭头: 浏览光标所在章节

    d: 回到手册首页

    q: 退出手册

     

    强制打开指定级别的man文档

    $ pinfo -m 5 passwd

        


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。