02.Linux系统Bash初识

1.Linux系统终端概述

服务器终端切换: Ctrl + Alt + F1 … F6
虚拟机终端切换: Ctrl +Shift +Alt +F1 … F6
虚拟终端由mingetty程序生成

//物理机执行为本地终端
[[email protected] ~]# tty
/dev/tty1

//通过网络使用模拟终端远程连接Linux, 日常运维中就是这种方式。
[[email protected] ~]# tty
/dev/pts/1

2.Linux系统Bash管理

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

实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。
Linux也提供了像MicrosoftWindows那样的可视的命令输入界面X Window的图形用户界面它提供了很多桌面环境系统,其操作就像Windows一样,有窗口、图标和菜单,所有的管理都是通过鼠标控制。GNOME。

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上使用。

2.1.Bash特性:命令补全

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

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

//查看ip时忘记具体了命令
[[email protected] ~]# ifcon
//按下tab键会自动补全
[[email protected] ~]# ifconfig

//按一下tab键没有反应, 按两下tab键列出所有if开头的命令
[[email protected] ~]# if
if         ifconfig   ifenslave  ifrename
ifcfg      ifdown     ifnames    ifup

//linux路径较深, 经常使用tab键进行补全, 如果路径出错是没有办法补全
[[email protected] ~]# ls /etc/sysconfig/network-scripts/

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 条行

//使用双 !! 可执行上一条命令
[[email protected] ~]# ls
localhost.com
[[email protected] ~]# !!
ls
localhost.com

//输入!6, 执行history命令历史中第 6 行命令
[[email protected] ~]# !6
touch localhost.com

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

执行当前命令, 调用上一条命令最后一个参数
[[email protected] ~]# ls /etc/passwd

//调用上一条命令的最后一行, 按下ESC松开, 然后按下 "."
[[email protected] ~]# cat
[[email protected] ~]# cat /etc/passwd
//第二种方式, 输入!$
[[email protected] ~]# ls !$
ls /etc/passwd
/etc/passwd

2.3.Bash特性:命令流程

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

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

//1.定义临时别名, if1为查看eth0网卡别名
[[email protected] ~]# alias if0=‘ifconfig eth0‘
[[email protected] ~]# if0

//如果定义命令本身, 会执行什么?
[[email protected] ~]# alias ifconfig=‘ifconfig eth0‘
    //绝对路径执行, 调用命令本身
    [[email protected] ~]# /sbin/ifconfig
    //通过\转义字符, 调用命令本身
    [[email protected] ~]# \ifconfig

//2.定义系统永久生效别名, 将命令别名添加至当前用户环境配置文件
[[email protected] ~]# echo "alias ifconfig=‘ifconfig eth0‘" >> ~/.bashrc
//如将别名命令添加至/etc/bashrc , 对所有用户生效

//3.取消临时别名
[[email protected] ~]# unalias ifconfig 

2.4.Bash特性:命令流程

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

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

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

//cd命令属于shell内部命令
[[email protected]linux-node1 ~]# type -a cd
cd is a shell builtin
cd is /usr/bin/cd
//ping属于外部命令, 同时会打印当前命令路径
[[email protected] ~]# type -a  ping
ping is /bin/ping

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

//echo所见即所得
[[email protected] ~]# echo "123"
123
[[email protected] ~]# echo -e "123 \n456"
123
456

//打印当前环境变量目录
[[email protected] ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

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

//修改PATH变量
[[email protected] ~]# PATH=/soft/bin:$PATH
//写入/etc/profile配置文件永久生效
echo ‘export PATH=/soft/bin:$PATH‘ >> /etc/profile

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

//表缓存命令所在位置
[[email protected] ~]# hash
hits    command
   1    /usr/bin/tty
   3    /sbin/ifconfig

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

//删除缓存过的ifconfig命令, 即可执行
[[email protected] ~]# hash -d ifconfig
[[email protected] ~]# ifconfig

//当然可以情况缓存表
[[email protected] ~]# hash -r

//命令缓存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下路径展开用花括号包括, 逗号分隔, 这样花括号里的内容会被展开形成列表。

[[email protected] ~]# 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‘

//删除目录
[[email protected] ~]# rm -rf /tmp/{zz,yy}

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

2.6.Bash特性:转义字符

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

4类常用转义字符

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

//将特殊字符转换为正常字符
[[email protected] ~]# echo "shoping is $500"
shoping is 00
[[email protected] ~]# echo "shoping is \$500"
shoping is $500
//转义其中特殊字符为普通字符串
[[email protected] ~]# echo ‘shoping is $500‘
shoping is $500

//使用$()实现命令替换
[[email protected] ~]# echo "The Directory is $(pwd)"
The Directory is /root
//使用``实现命令替换
[[email protected] ~]# echo "The Directory is `pwd`"
The Directory is /root

//转义其中所有的变量为单纯的字符串
[[email protected] ~]# touch file-`date +%F-%H-%S`
[[email protected] ~]# ls
file-2017-12-03-04-18

[[email protected] ~]# touch ‘file-`date +%F-%H-%S`‘
[[email protected] ~]# ls
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.通过info或pinfo获得帮助

首页寻找Textinfo文档,如果没有,强制打开对应的Man文档
    与vi风格类似,快捷键:
        空格:翻页
        HOME: 返回页面顶部
        END:返回页面底部
        上箭头: 光标上移动一行
        下箭头: 光标下移动以行
        左箭头: 返回上一章节
        右箭头: 浏览光标所在章节
        d: 回到手册首页
        q: 退出手册

强制打开指定级别的man文档
$ pinfo -m 5 passwd

原文地址:http://blog.51cto.com/10856422/2122035

时间: 2024-08-28 21:49:14

02.Linux系统Bash初识的相关文章

Linux系统Bash(Shell)基础知识(4)

今天给大家总结一下关于bash的颜色,配置文件,变量,数组和相关shell脚本编程的基本概念: 一.bash的颜色显示规则 吧是的颜色显示,说白了就是Ascll码对于颜色的调用设置,而在于颜色代码当中,字符串个功能实现如下: \033:表示ctrl键: [:控制字符和颜色代码之间的间隔字符: 0m:关闭颜色属性: 1m:加粗显示文本字符: 4m:为文本字符加下划线标识: 5m:使文本字符闪烁: 7m:将背景色和前景色调换,白变黑,黑变白: 8m:隐藏字符,将文本字符的背景色和前景色设置为相同颜色

Linux系统Bash(Shell)基础知识(3)

在shell脚本编程中算术运算无疑是十分重要的: bash中执行整数算数运算的命令是let,其语法格式为: let arg... arg为单独的算术表达式如+,-,*,/,%,^等所构成的完整的算术表达式: 其中^为平方运算,如2^3表示2的三次方: let命令可以使用如下方式替代: ((算术表达式)) 例如 [[email protected] wjq]# let "a=2*3" [[email protected] wjq]# echo $a 6 [[email protected

Linux系统Bash(Shell)基础知识(1)

上篇博文为大家介绍了关于shell程序设计的的一些特性,即命令别名,命令历史,快捷键,命令补全,命令行展开,命令执行结果,转义字符,通配符,IO重定向,管道等操作:这次继续给大家介绍关于shell程序设计的另一大特性--变量: shell程序中采用变量存放字符串,shell变量比C语言中的变量简单得多,没有众多存储类及类型的限制,也不需要预先定义,然后才能赋值,可以在使用时"边定义,边赋值". shell有三类变量,环境变量,临时变量以及本地变量,环境变量是永久形变量,不会随着shel

61   Linux系统调优基础

01 Linux系统调优基础 #显示进行在哪个cpu上运行 [[email protected] ~]# ps axo psr,     2 ntpd   1 qpidd   3 pickup   3 sshd   0 bash   2 pscomm     #显示进行在哪个cpu上运行,并显示进程的pid  [[email protected] ~]# ps axo psr,comm,pid   2 ntpd             3775   1 qpidd            9998

Linux :linux系统磁盘(fdisk、partprobe、mkfs、mount、df、sort、swap、inode、block)

02. linux系统磁盘概念 磁盘的结构体系 01. 磁盘的物理结构 (外部结构 内部结构) 工作原理(先切换磁头 让磁头镜像运动) OK 02. 磁盘阵列说明 (raid0 raid1 raid5 raid10 raid01) 磁盘阵列如何配置 配置LVM L 逻辑 v 卷组 M 管理 逻辑卷管理 --> 实现可以随意调整磁盘分区大小 03. 磁盘分区概念 给容量较小的磁盘进行分区: 小于2T fdisk 给容量较大的磁盘进行分区: 大于2T parted 04. 磁盘格式化操作(创建文件系

初识linux系统---ubuntu

ubuntu操作系统 一. Linux系统组成Linux内核软件程序用于实现CPU和内存分配进程调度设备驱动等核心操作,以面向硬件为主外围程序面向用户为主,包括分析用户指令的解释器网络服务程序图形桌面程序等各种应用型的软件程序 二. Linux 内核项目主要作者:芬兰赫尔辛基大学的 Linus Torvalds1991年10月,发布 Linux 0.02版(第一个公开版)1994年3月,Linux 1.0 版发布 Linux 内核的标志 -- 企鹅 Tux,取自芬兰的吉祥物官方网站:http:/

Linux系统下通过bash配置文件的方式将用户执行的命令写入syslog

注,如用户的shell是/bin/sh,需要将其修改为/bin/bash!! usermod -s /bin/bash 用户名 kali Linux系统对应的配置文件是/etc/bash.bashrc,不同发行版本可能不同 步骤一:vi /etc/bashrc 增加如下: HISTFILESIZE=2000 HISTSIZE=2000 HISTTIMEFORMAT="%Y%m%d-%H%M%S: " export HISTTIMEFORMAT #export PROMPT_COMMAN

Linux系统裁剪之二(Bash脚本编程之十二)

Linux系统裁剪之二(Bash脚本编程之十二) 系统函数库 ·Linux系统的启动流程     1,POST(加电自检) 计算机本身并不会执行程序,它只是一堆破铜烂铁,但是它可以在开机的时候先去载入一段程序,系统在刚刚启动的时候能够实现将某个ROM芯片中的程序映射到CPU能够寻址的地址空间中去,并且让CPU能够执行其中的指令,这些指令大部分都是用来做系统检测的,当检测完成后,如果系统中所有的基本硬件和核心硬件都没有问题的话,接下来就会根据BIOS中设定的系统启动次序(Boot Sequence

bash编程之 ~制作Mini Linux系统~

说明1:在一个Linux宿主机系统上,通过以上步骤,可以制作一个微小的Linux系统(可以放置在U盘中等),然后在其它的主机(虚拟机或者物理机)上运行,以实现最小化定制系统的目的. 说明2:上图中黑色部分是主要流程,蓝色部分是详细流程,棕色部分是注释说明等 对于上图中几点细节的详解: 阶段 说明 目标磁盘分区格式化挂载 目标磁盘是/dev/sdb,大小为1G,分区sdb1:100M,sdb2:500M即可 安装grub至目标磁盘 无 复制内核和initrd文件 VERSION是内核版本,如2.6