Linux-Shell

1.什么是Bash shell(壳)

Bash Shell是一个命令解释器,它在操作系统的最外层,负责用户程序与内核进行交互操作的一种接口,将用户输入的命令翻译给操作系统,并将处理后的结果输出至屏幕。

通过xshell连接,就是打开了一个bash程序的窗口,不能点鼠标,只能输入命令

当我们使用远程连接工具连接linux服务,系统则会给打开一个默认的shell,我们可在这个界面执行命令、比如:获取系统当前时间,创建一个用户等等…

image

2.Bash Shell能干什么?

使用Shell实现对Linux系统的大部分管理,例如:
1.文件管理(文件创建,移动,复制,删除,编辑…)
2.权限管理(不同用户不通权限)
3.用户管理(创建,删除….)
4.磁盘管理(挂载)
5.网络管理
6.软件管理
.等等.

3.平时我们如何使用Shell呢?

输入命令 –> 效率低 –>适合少量的工作
Shell Script –> 效率高–>适合复杂重复性的工作
例如:创建100个用户,单纯输入命令需要执行100次,而Shell脚本只需要几行命令即可完成100个用户的创建

vim test.sh
for i in {1..100}
douseradd test$iecho "create test$i"
donebash test.sh

4.Shell提示符

# $ = 普通用户, # = root用户(超级管理员)
### [root@lqz ~]# 
# root:当前登录用户
# @ :没有意义
# lqz:主机名称,如果很长会显示不全,通过hostname查看
# ~:当前用户所在家目录
# #:通常指超级管理员
# $:普通用户
[root@lqz ~]# whoami
root[root@web01 ~]# useradd jack
[root@web01 ~]# passwd jack
Changing password for user jack.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
[root@web01 ~]# su jack
[root@web01 ~]# cd root   提示没有权限

5.Shell基础语法

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

#命令  选项  参数
command [-options] [arguments][root@lqz ~]# ls             #命令
[root@lqz ~]# ls -a          #命令+选项
[root@lqz ~]# ls -a /home/   #命令+选项+参数
ls -a -l
ls -la
ls --all
ls --list
ls -c
ls --color
ls -a /tmp
#命令: 整条shell命令的主体
#选项: 用于调节命令的输出效果#以 “-”引导短格式选项(单个字符),例如“-l”#以“--”引导长格式选项(多个字符),例如“--color”#多个短格式选项可以写在一起,只用一个“-”引导,例如“-al”
#参数: 命令操作的对象,如文件、目录名等
# 选项和参数可以出现位置调换,命令,选项,参数之间要至少有一个空格
# 命令必须开头, 选项和参数位置可以发生变化

2.Bash Shell基本特性

1.命令补全

当使用windows查找一个目录层级特别多的文件时,打开的效率会非常的慢,但如果使用linux查找一个目录层级特别多的文件时,可以通过tab键快速的补全

PS: tab键可以实现命令补全,路径补全,在实际生产中tab补全往往是我们使用的最多的, 因为可以减少执行命令以及路径出错率。

# yum provides ifconfig
# yum install net-tools#查看ip时忘记具体了命令
[root@lqz ~]# ifcon
#按下tab键会自动补全
[root@lqz ~]# ifconfig#按一下tab键没有反应, 按两下tab键列出所有if开头的命令
[root@lqz ~]# if
if         ifconfig   ifenslave  ifrename
ifcfg      ifdown     ifnames    ifup#linux目录较深,经常使用tab键进行补全, 如果路径出错是没有办法补全(带斜线表示是目录(window叫文件夹))
[root@lqz ~]# ls /etc/sysconfig/network-scripts/# 安装选项补全
yum install bash-comple*
yum install bash-completion 
# ls -- Tab建,空格上下翻

2.命令快捷键,快捷键可以帮助我们大大提升工作效率

Ctrl + a    #光标跳转至正在输入的命令行的首部
Ctrl + e    #光标跳转至正在输入的命令行的尾部
Ctrl + c    #终止前台运行的程序
Ctrl + d    #在shell中,ctrl-d表示推出当前shell。
Ctrl + z    #将任务暂停,挂至后台
Ctrl + l    #清屏,和clear命令等效。
Ctrl + k    #删除从光标到行末的所有字符
Ctrl + u    #删除从光标到行首的所有字符
Ctrl + r    #搜索历史命令, 利用关键字,Tab建选中
Ctrl + w    #按单词或空格进行向前删除
Ctrl + 左右建 #按单词或空格进行向前向后跳#在命令行前加面加 "#" 则该命令不会被执行

3.历史命令History, 追溯之前发生情况

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

#1.使用双 !! 可执行上一条执行过的命令
[root@lqz ~]# ls
lqz.com
[root@lqz ~]# !!
ls
lqz.com#2.输入!6, 执行history命令历史中第 6 行命令
[root@lqz ~]# !6
touch lqz.com#使用!cat, 调用history命令历史最近一次执行过的cat命令
[root@lqz ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
[root@lqz ~]# !cat  # 最近一次
cat /etc/sysconfig/network-scripts/ifcfg-eth0[root@lqz ~]# ls /etc/passwd
#调用上一条命令的最后参数或选项, 按下ESC松开, 然后按下 "."
[root@lqz ~]# cat
[root@lqz ~]# cat /etc/passwd
#第二种方式, 输入!$
[root@lqz ~]# ls !$
ls /etc/passwd
/etc/passwd# history -d 100  删除第100条历史记录
# history -c      清空记录(保存到文件中的还有)
# history -w      保存历史集合,保存到当前用户的家目录 .bash_history
# > .bash_history  清空文件的保存(操作完,不让别人看你执行的命令)

3.命令别名

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

#1.定义临时别名, wk为查看eth0网卡别名
[root@lqz ~]# alias wk='ifconfig'
# alias 查看一下是否成功,发现系统内置了很多
[root@lqz ~]# wk
# 取消别名(都是临时的)
[root@lqz ~]# unalias wk #2.如果定义命令本身, 会执行什么?
[root@lqz ~]# alias ifconfig='ifconfig eth0'
#绝对路径执行, 调用命令本身
[root@lqz ~]# /sbin/ifconfig
#通过转义字符, 调用命令本身
[root@WebServer ~]# ifconfig#3.取消别名
[root@lqz ~]# unalias ifconfig#4.永久生效,/etc/bashrc
[root@lqz ~]# echo "alias ifconfig='ifconfig eth0'" >> /etc/bashrc

3.Bash Shell获取帮助

1.命令 –help帮助

[root@lqz ~]# ls --help
用法: ls [选项]...[文件]...#ls 常见选项
-a  #查看目录下的所有文件,包括隐藏文件
-l  #以长格式的方式显示文件的详细内容
-h  #以人性化的方式显示内容,配合-l使用
-d  #只列出目录名,不列出目录以下的内容
-t  #按修改时间进行排序
-i  #显示文件的inode(该文件在该分区的一个编号)[root@lqz ~]# date --help
Usage: date [OPTION]... [+FORMAT]or:  date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]][root@lqz ~]# date +%F   #查看日期
2019-03-28
[root@lqz ~]# date -s 12:00  #修改时间#时间不是用来查看,而是有其他的用途
[root@web01 ~]# touch `date +%F`_file.txt
[root@web01 ~]# ls
2019-03-28_file.txt

2.命令 man手册

# man ls    #查看ls命令的手册

3.linux命令大全url传送门
linux命令大全
​​​​​​linux命令手册

4.Bash Shell命令流程

1.当我们执行一个命令, 整个命令执行流程如下:

  1. 判断命令是否通过绝对路径执行
  2. 判断命令是否存在alias别名
  3. 判断用户输入的是内部命令还是外部命令
  4. Bash内部命令直接执行,外部命令检测是否存在缓存
  5. 通过PATH路径查找命令,有执行,无报错

2.什么是内部命令,什么是外部命令

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

3.如何检查用户输入的命令是内部命令还是外部命令

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

4.如果是外置命令,Bash可以通过查找PATH变量,获取该命令的绝对路径。

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

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

5.如果是外置命令还会涉及到一个内存缓存,也就是说,当我们出现重复执行相同的命令,会通过缓存调取执行,也就意味着不会搜索PATH路径。

#表缓存命令所在位置
[root@lqz ~]# hash
hits    command1    /usr/bin/tty3    /sbin/ifconfig#已缓存命令,如果移动位置会导致无法找到该命令
[root@lqz ~]# mv /sbin/ifconfig /bin/
[root@lqz ~]# ifconfig
-bash: /sbin/ifconfig: No such file or directory#删除缓存过的ifconfig命令, 即可执行
[root@lqz ~]# hash -d ifconfig
[root@lqz ~]# ifconfig#当然可以清空缓存表
[root@lqz ~]# hash -r#注意: 命令缓存hash需要注意如下情况:
1.只要执行外部命令1次就会对该命令进行缓存
2.如果将命令移动了位置,该如何执行a.使用绝对路径执行b.删除hash表的缓存指令

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

  1. 检查执行的命令是否使用的是绝对路径执行的。
  2. 检查ping命令是否存在alias别名
  3. 检查ping命令是内部命令还是外部命令
  4. 如果是内部命令Bash直接执行,如果是外部命令,首先检查Hash缓存,存在则直接调取
  5. 如果该命令不存在Hash缓存,则通过PATH路径进行逐行查找该命令所在的位置
  6. 如果PATH路径没有查找到该命令所在的路径,则返回错误码。command not found

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/11514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniAPP 视频图片预览组件

效果图 思路&#xff1a;处理文件列表&#xff0c;根据文件类型归类 已兼容 H5 ios 设备&#xff0c;测试已通过 浙政钉&#xff0c;微信小程序 视频资源因为&#xff0c;没有预览图&#xff0c;用灰色图层加播放按钮代替 <template><!--视频图片预览组件 -->&l…

《面试1v1》Kafka与传统消息系统区别

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

React AntDesign写一个导出数据的提示语 上面有跳转的路径,或者点击知道了,关闭该弹层

效果如下&#xff1a; 代码如下&#xff1a; ForwardDataCenterModal(_blank);export const ForwardDataCenterModal (target?: string) > {let contentBefore React.createElement(span, null, 数据正在处理中&#xff0c;请稍后前往);let contentAfter React.creat…

lightGBM实例——特征筛选和评分卡模型构建

数据还是采用这个例子里的数据&#xff0c;具体背景也同上。 添模型构建——使用逻辑回归构建模型&#xff0c;lightGBM进行特征筛选 lightGBM模型介绍请看这个链接&#xff1a;集成学习——Boosting算法&#xff1a;Adaboost、GBDT、XGBOOST和lightGBM的简要原理和区别 具体代…

Docker复习

目录 1. Docker的理解1.1 Docker三要素 2 安装Docker2.1 安装命令2.2 配置阿里云加速器 3 Docker命令3.1 启动类命令3.2 镜像类命令 4 实战4.1 启动容器&#xff0c;自动创建实例4.2 查看Docker内启动的容器4.3 退出容器4.4 其他4.5 导入导出文件4.6 commit 5 Dockerfile5.1 理…

Vue 3:玩一下web前端技术(二)

前言 本章内容为VUE目录结构解析与相关工程技术讨论。 下一篇文章地址&#xff1a; Vue 3&#xff1a;玩一下web前端技术&#xff08;一&#xff09;_Lion King的博客-CSDN博客 下一篇文章地址&#xff1a; &#xff08;暂无&#xff09; 一、目录结构 1、为什么要了解目…

uniapp:H5定位当前省市区街道信息

高德地图api&#xff0c;H5定位省市区街道信息。 由于uniapp的uni.getLocation在H5不能获取到省市区街道信息&#xff0c;所以这里使用高德的逆地理编码接口地址接口&#xff0c;通过传key和当前经纬度&#xff0c;获取到省市区街道数据。 这里需要注意的是&#xff1a;**高德…

0基础学习VR全景平台篇 第69篇:VR直播-如何设置广告

直播间可以插入轮播广告&#xff0c;并且支持外链跳转&#xff0c;能够有效地提升VR直播活动的转化率。 1、点击&#xff0c;添加广告 2、广告图展现形式分为两种&#xff1a;普通广告和全屏广告&#xff0c;普通广告在非全屏播放的直播间显示&#xff0c;全屏广告在全屏播放的…

Raki的读paper小记:LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

Abstract&Introduction&Related Work 研究任务 对大模型进行部分微调 已有方法和相关工作 现有技术通常通过扩展模型深度引入推理延迟&#xff08;Houlsby 等人&#xff0c;2019&#xff1b;Rebuffi 等人&#xff0c;2017&#xff09;&#xff0c;或通过减少模型可用序…

redis的四种模式优缺点

redis简介 Redis是一个完全开源的内存数据结构存储工具&#xff0c;它支持多种数据结构&#xff0c;以及多种功能。Redis还提供了持久化功能&#xff0c;可以将数据存储到磁盘上&#xff0c;以便在重启后恢复数据。由于其高性能、可靠性和灵活性&#xff0c;Redis被广泛应用于…

Linux Tips

1 查找某字段在哪个文件出现过 发现某个网址或者字段有问题&#xff0c;但是down的项目找不到在哪&#xff0c;可以&#xff1a; grep -r "https://xxxxx.com"# 递归搜索当前文件夹及其子文件夹下的所有 CMakeLists.txt 文件 find . -name "CMakeLists.txt&qu…

什么是 MyBatis?

经过前几篇博客的学习 Spring 系列的基本操作已经实现的差不多了&#xff0c;接下来&#xff0c;我们来学习更重要的知识&#xff0c;将前端传递的数据存储起来&#xff0c;或者查询数据库里面的数据。 一、MyBatis 是什么&#xff1f; MyBatis 是一款优秀的持久层框架&…

东南大学轴承故障诊断(Python代码,CNN模型,适合复合故障诊断研究)

运行代码要求&#xff1a; 代码运行环境要求&#xff1a;Keras版本>2.4.0&#xff0c;python版本>3.6.0 本次实验主要是在两种不同工况数据下&#xff0c;进行带有复合故障的诊断实验&#xff0c;没有复合故障的诊断实验。 实验结果证明&#xff0c;针对具有复合故障的…

面试—Redis相关

文章目录 一、概述二、缓存1、缓存穿透2、缓存击穿3、缓存雪崩4、双写一致性5、持久化6、数据过期策略7、数据淘汰策略 三、分布式锁四、其它面试题1、主从复制2、哨兵3、分片集群结构4、I/O多路复用 一、概述 使用场景&#xff1a; Redis的数据持久化策略有哪些什么是缓存穿透…

智能安全配电装置应用场景有哪些?

安科瑞 华楠 一、应用背景 电力作为一种清洁能源&#xff0c;给人们带来了舒适、便捷的电气化生活。与此同时&#xff0c;由于使用不当&#xff0c;维护不及时等原因引发的漏电触电和电气火灾事故&#xff0c;也给人们的生命和财产带来了巨大的威胁和损失。 为了防止低压配电…

SkyEye与Jenkins的DevOps持续集成解决方案

在技术飞速发展的当下&#xff0c;随着各行各业的软件逻辑复杂程度提升带来的需求变更&#xff0c;传统测试已无法满足与之相对应的一系列测试任务&#xff0c;有必要引入一个自动化、可持续集成构建的DevOps平台来解决此类问题。本文将主要介绍SkyEye与Jenkins的持续集成解决方…

C++OpenCV(5):图像模糊操作(四种滤波方法)

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 &#x1f506; OpenCV项目地址及源代码&#xff1a;点击这里 文章目录 图像模糊操作均值滤波高斯滤波中值滤波双边滤波 图像模糊操作 关于图片的噪声&#xff1a;指的是图片中存在的不必要或者多余的干扰数…

【前端JS交互篇】函数、参数、返回值、闭包函数、递归函数、内存、模块化编程

一、函数的声明与调用 1.1 函数概述 函数可以封装一些功能&#xff0c;可以供外部去重复的调用。所以&#xff0c;一般我们把函数叫做具有重复功能的代码块。 JavaScript 基础到高级 Canvas游戏开发 原生JavaScipt案例合集 JavaScript DOM基础 假设饭店就是一个函数&#xf…

windows下搭建php开发环境

http://wed.xjx100.cn/news/139397.html?actiononClick https://www.bilibili.com/read/cv23429835/ https://www.php.cn/faq/498307.html 安装iis 选择卸载程序 安装php 官网https://www.php.net/下载 选择线程安全 国内地址 下载完成后解压放到想存放的路径 添加p…

数据可视化 - 动态柱状图

基础柱状图 通过Bar构建基础柱状图 from pyecharts.charts import Bar from pyecharts.options import LabelOpts # 使用Bar构建基础柱状图 bar Bar() # 添加X轴 bar.add_xaxis(["中国", "美国", "英国"]) # 添加Y轴 # 设置数值标签在右侧 b…