热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第05篇系统入门linux系统Bash初始

1.Linux系统终端概述\x0a2.Linux系统Bash管理\x0a2.1.Bash特性:命令补全\x0a2.2.Bash特性:命令快捷键\x0a2.3.Bash特性:命令别名

01
Linux系统终端概述



服务器终端切换: Ctrl + Alt + F1 … F6

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

虚拟终端由mingetty程序生成


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

[root@liyanzhao ~]# tty

/dev/tty1

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

[root@liyanzhao ~]# tty

/dev/pts/1


02
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@liyanzhao ~]# echo $SHELL

/bin/bash


查看Linux可用的 shell

[root@liyanzhao ~]# cat etc/shells

/bin/sh

/bin/bash

/sbin/nologin

/bin/dash

/bin/tcsh

/bin/csh

/bin/zsh


Bash Shell提示符

[root@liyanzhao ~]# echo $PS1

[\u@\h \W]\$

[root@liyanzhao ~]# date

Sat Jan 20 09:45:40 EST 2018

[root@liyanzhao ~]# whoami


Shell 语法

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

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

[student@desktop0 ~]$

//bash Shell 执行命令

//命令  选项  参数

command [-options] [arguments]

[root@liyanzhao ~]# ls             #命令

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

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


命令: 命令的主体

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

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

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

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

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

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

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


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

  1. 文件管理

  2. 权限管理

  3. 用户管理

  4. 磁盘管理

  5. 网络管理

  6. 软件管理


使用Shell的方式

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

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


BASH所支持的功能:

  1. 命令行编辑快捷键

  2. 内部命令与外部命令

  3. 命令补全与路径补全

  4. 命令别名与命令历史

  5. 转义字符与路径展开

  6. 通配符与特殊字符

  7. 重定向与管道技术



2.1
Bash特性:命令补全



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

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

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

1.命令补全

2.提示功能

3.减少出错


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

[root@liyanzhao ~]# ifcon

//按下tab键会自动补全

[root@liyanzhao ~]# ifconfig

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

[root@liyanzhao ~]# if

if         ifconfig   ifenslave  ifrename

ifcfg      ifdown     ifnames    ifup

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

[root@liyanzhao ~]# 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 条行

history命令历史相关快捷键

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

[root@liyanzhao ~]# ls

liyanzhao.com

[root@liyanzhao ~]# !!

ls

liyanzhao.com

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

[root@liyanzhao ~]# !6

touch liyanzhao.com

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

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

[root@liyanzhao ~]# !cat

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

[root@liyanzhao ~]# ls etc/passwd

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

[root@liyanzhao ~]# cat

[root@liyanzhao ~]# cat etc/passwd

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

[root@liyanzhao ~]# ls !$

ls etc/passwd

/etc/passwd




2.3
Bash特性:命令别名


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


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

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

[root@liyanzhao ~]# if0

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

[root@liyanzhao ~]# alias ifcOnfig='ifconfig eth0'

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

    [root@liyanzhao ~]# sbin/ifconfig

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

    [root@WebServer ~]# \ifconfig


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

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

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


//3.取消临时别名

[root@liyanzhao ~]# unalias ifconfig 



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@liyanzhao ~]# type -a  ping

ping is bin/ping


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

//echo所见即所得

[root@liyanzhao ~]# echo "123"

123

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

123

456


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

[root@liyanzhao ~]# echo $PATH

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


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

//修改PATH变量

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

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

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

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


//表缓存命令所在位置

[root@liyanzhao ~]# hash

hits    command

   1    /usr/bin/tty

   3    /sbin/ifconfig


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

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

[root@liyanzhao ~]# ifconfig

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


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

[root@liyanzhao ~]# hash -d ifconfig

[root@liyanzhao ~]# ifconfig


//当然可以清空缓存表

[root@liyanzhao ~]# 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下路径展开用花括号包括, 逗号分隔, 这样花括号里的内容会被展开形成列表。



[root@liyanzhao ~]# 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@liyanzhao ~]# rm -rf tmp/{zz,yy}


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

[root@liyanzhao ~]# 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类常用转义字符

反斜杠(\):使反斜杠后面的一个变量变为字符串。

单引号(’’):转义其中所有的变量为单纯的字符串。

双引号(””):保留其中的变量属性,不进行转义处理。

反引号(``):把其中的命令执行后返回结果。



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

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

shoping is 00

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

shoping is $500


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

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

shoping is $500


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

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

The Directory is /root


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

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

The Directory is /root


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

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

[root@liyanzhao ~]# ls

file-2017-12-03-04-18

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

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



<关注下方公众号系列好文持续推送>





       

           
更多推荐
           

第01篇 系统简介-Linux系统课程介绍

第02篇.系统简介-Linux系统命令整理

第03篇 系统简介-Linux系统历史介绍

第04篇 系统入门-虚拟环境安装Linux

       


推荐阅读
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
author-avatar
赵春柱_626
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有