Linux系统Bash初识

Just Do It
2023-11-01 / 0 评论 / 5 阅读 / 正在检测是否收录...

转载 xuliangwei.com

1.Linux系统终端概述

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

虚拟终端由mingetty程序生成


[root@xuliangwei ~]# tty
/dev/tty1


[root@xuliangwei ~]# tty
/dev/pts/1

2.Linux系统Bash管理

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

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

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

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

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

查看当前使用的shell

[root@xuliangwei ~]
/bin/bash

查看Linux可用的 shell

[root@xuliangwei ~]
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
/bin/zsh

Bash Shell提示符

[root@xuliangwei ~]
[\u@\h \W]\$

[root@xuliangwei ~]
Sat Jan 20 09:45:40 EST 2018

[root@xuliangwei ~]

Shell 语法

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

//等待用户输入,执行命令, $ = 普通用户, 
[student@desktop0 ~]$

//bash Shell 执行命令
//命令  选项  参数
command [-options] [arguments]
[root@xuliangwei ~]
[root@xuliangwei ~]
[root@xuliangwei ~]

命令: 命令的主体
    一个命令有多个选项, 多个选项可以合并在一起
选项: 用于调节命令的具体功能
    以 “-”引导短格式选项(单个字符),例如“-l”
    以“--”引导长格式选项(多个字符),例如“--color”
    多个短格式选项可以写在一起,只用一个“-”引导,例如“-al”
参数: 命令操作的对象,如文件、目录名等



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

1.文件管理
2.权限管理
3.用户管理
4.磁盘管理
5.网络管理
6.软件管理
...

使用Shell的方式

输入命令 --> 效率低 -->适合少量的工作
Shell Script --> 效率高-->适合复杂重复性的工作

BASH所支持的功能

命令行编辑快捷键
内部命令与外部命令
命令补全与路径补全
命令别名与命令历史
转义字符与路径展开
通配符与特殊字符
重定向与管道技术

2.1.Bash特性:命令补全

通过上下方向键来调取过往执行过的Linux命令;
命令或参数仅需输入前几位就可以用Tab键补全;

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

1.命令补全
2.提示功能
3.减少出错


[root@xuliangwei ~]# ifcon

[root@xuliangwei ~]# ifconfig


[root@xuliangwei ~]# if
if         ifconfig   ifenslave  ifrename
ifcfg      ifdown     ifnames    ifup


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

2.2.Bash特性:命令快捷键

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

Ctrl + A    
Ctrl + E    
Ctrl + C    
Ctrl + D    
Ctrl + Z    
Ctrl + L    
Ctrl + K    
Ctrl + U    
Ctrl + R    



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

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

history命令历史相关快捷键

//使用双 !! 可执行上一条命令
[root@xuliangwei ~]
xuliangwei.com
[root@xuliangwei ~]
ls
xuliangwei.com

//输入!6, 执行history命令历史中第 6 行命令
[root@xuliangwei ~]
touch xuliangwei.com

//使用!cat, 调用history命令历史最近一次执行过的cat命令
[root@xuliangwei ~]
[root@xuliangwei ~]
cat /etc/sysconfig/network-scripts/ifcfg-eth0

[root@xuliangwei ~]
//调用上一条命令的最后参数或选项, 按下ESC松开, 然后按下 "."
[root@xuliangwei ~]
[root@xuliangwei ~]
//第二种方式, 输入!$
[root@xuliangwei ~]
ls /etc/passwd
/etc/passwd

2.3.Bash特性:命令别名

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


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


[root@xuliangwei ~]# alias ifconfig='ifconfig eth0'
    
    [root@xuliangwei ~]# /sbin/ifconfig
    
    [root@WebServer ~]# \ifconfig



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



[root@xuliangwei ~]# unalias ifconfig 

2.4.Bash特性:命令流程

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

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

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

//cd命令属于shell内部命令
[root@linux-node1 ~]
cd is a shell builtin
cd is /usr/bin/cd

//ping属于外部命令, 同时会打印当前命令路径
[root@xuliangwei ~]
ping is /bin/ping

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


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


[root@xuliangwei ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin




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

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

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

//表缓存命令所在位置
[root@xuliangwei ~]
hits    command
   1    /usr/bin/tty
   3    /sbin/ifconfig

//已缓存命令,如果移动位置会导致无法找到该命令
[root@xuliangwei ~]
[root@xuliangwei ~]
-bash: /sbin/ifconfig: No such file or directory

//删除缓存过的ifconfig命令, 即可执行
[root@xuliangwei ~]
[root@xuliangwei ~]

//当然可以清空缓存表
[root@xuliangwei ~]


//命令缓存hash需要注意如下情况:
1.如果执行外部命令1次就会对该命令进行缓存
2.如果将命令移动了位置
    a.使用绝对路径执行
    b.删除hash表的缓存指令

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

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

2.5.Bash特性:路径展开

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

[root@xuliangwei ~]
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@xuliangwei ~]

//通过路径展开方式创建目录
[root@xuliangwei ~]
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

2.6.Bash特性:转义字符

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

4类常用转义字符

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

//将特殊字符转换为正常字符
[root@xuliangwei ~]
shoping is 00
[root@xuliangwei ~]
shoping is $500
//转义其中特殊字符为普通字符串
[root@xuliangwei ~]
shoping is $500


//使用$()实现命令替换
[root@xuliangwei ~]
The Directory is /root
//使用``实现命令替换
[root@xuliangwei ~]
The Directory is /root

//转义其中所有的变量为单纯的字符串
[root@xuliangwei ~]
[root@xuliangwei ~]
file-2017-12-03-04-18

[root@xuliangwei ~]
[root@xuliangwei ~]
file-2017-12-03-04-18  file-`date +%F-%H-%S`

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

0

评论

博主关闭了当前页面的评论