shell-程序员宅基地

技术标签: 建站学运维  

shell

什么是shell:

现在我们使用的操作系统(Windows、Mac OS、Android、iOS等)都是带图形界面的,简单直观,容易上手,对专业用户(程序员、网管等)和普通用户(家庭主妇、老年人等)都非常适用;计算机的普及离不开图形界面。
然而在计算机的早期并没有图形界面,我们只能通过一个一个地命令来控制计算机,这些命令有成百上千之多,且不说记住这些命令非常困难,每天面对没有任何色彩的“黑屏”本身就是一件枯燥的事情;这个时候的计算机还远远谈不上炫酷和普及,只有专业人员才能使用。
对于图形界面,用户点击某个图标就能启动某个程序;对于命令行,用户输入某个程序的名字(可以看做一个命令)就能启动某个程序。这两者的基本过程都是类似的,都需要查找程序在硬盘上的安装位置,然后将它们加载到内存运行。换句话说,图形界面和命令行要达到的目的是一样的,都是让用户控制计算机。然而,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁。
由于安全、复杂、繁琐等原因,用户不能直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核。如此一来,用户和内核之间就多了一层“代理”,这层“代理”既简化了用户的操作,也保护了内核。
用户界面和命令行就是这个另外开发的程序,就是这层“代理”。在Linux下,这个命令行程序叫做 Shell。

2.shell 作用详析:

Shell 除了能解释用户输入的命令,将它传递给内核,还可以:
调用其他程序,给其他程序传递数据或参数,并获取程序的处理结果;
在多个程序之间传递数据,把一个程序的输出作为另一个程序的输入;
Shell 本身也可以被其他程序调用。
由此可见,Shell 是将内核、程序和用户连接了起来。
Shell 本身支持的命令并不多,但是它可以调用其他的程序,每个程序就是一个命令,这使得 Shell 命令的数量可以无限扩展,其结果就是 Shell 的功能非常强大,完全能够胜任 Linux 的日常管理工作,如文本或字符串检索、文件的查找或创建、大规模软件的自动部署、更改系统设置、监控服务器性能、发送报警邮件、抓取网页内容、压缩文件等。
Shell 并不是简单的堆砌命令,我们还可以在 Shell 中编程,这和使用 C/C++、Java、Python 等常见的编程语言并没有什么两样。
Shell 虽然没有 C/C++、Java、Python 等强大,但也支持了基本的编程元素,例如:
if…else 选择结构,switch…case 开关语句,for、while、until 循环;
变量、数组、字符串、注释、加减乘除、逻辑运算等概念;
函数,包括用户自定义的函数和内置函数(例如 printf、export、eval 等)。
站在这个角度讲,Shell 也是一种编程语言,它的编译器(解释器)是 Shell 这个程序。我们平时所说的 Shell,有时候是指连接用户和内核的这个程序,有时候又是指 Shell 编程。
Shell 主要用来开发一些实用的、自动化的小工具,而不是用来开发具有复杂业务逻辑的中大型软件,例如检测计算机的硬件参数、一键搭建Web开发环境、日志分析等,Shell 都非常合适。

3.3.常见的shell类型有 sh、bash、csh、tcsh、ash 等。

常见的 Shell

sh
sh 的全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。
sh 是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 Shell。

csh
sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计的,这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。
Bill Joy 是一个风云人物,他创立了 BSD 操作系统,开发了 vi 编辑器,还是 Sun 公司的创始人之一。
BSD 是 UNIX 的一个重要分支,后人在此基础上发展出了很多现代的操作系统,最著名的有 FreeBSD、OpenBSD 和 NetBSD,就连 Mac OS X 在很大程度上也基于BSD。

tcsh
tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。

ash
一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。

bash
bash shell 是 Linux 的默认 shell,本教程也基于 bash 编写。
bash 由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。
bash 兼容 sh 意味着,针对 sh 编写的 Shell 代码可以不加修改地在 bash 中运行。
尽管如此,bash 和 sh 还是有一些不同之处:
一方面,bash 扩展了一些命令和参数;
另一方面,bash 并不完全和 sh 兼容,它们有些行为并不一致,但在大多数企业运维的情况下区别不大,特殊场景可以使用 bash 代替 sh。

历史命令

1.history 查询历史命令
历史命令文件存放在 /root/.bash_history

[root@localhost ~]# ls  /root/.bash_history  
/root/.bash_history
[root@localhost ~]# cat !$
cat /root/.bash_history
chmod ~/.ssh 700
chmod /~.ssh 700
iptable
ipaddr
ip addr
dhclient
ip addr
ping www.baidu.com
ip route
vi /etc/sysconfig/network-scripts/ifcfg-ens33 
ip addr
ifconfig
vi /etc/sysconfig/network-scripts/ifcfg-ens33 
systemctl restart network
ping www.baidu.com
mkidr ~/.ssh/
mkdir ~/.ssh/
ls
cd /
cd 
ls
cd ..
ls
cd /.ssh
cd
ls
cd ~/.ssh
vi authorized_keys
chmod 600authorized_keys
chmod 600 authorized_keys
ls
cd ..
ls
cd ..
cd ~
ls
cd ~/.ssh
ls
ll
vi authorized_keys 
chmod 600 authorized_keys 
vi authorized_keys 
chmod 600 authorized_keys 
cd 
ls
cd ..
ls
chmod 700 home
yum install -y lrzsz
ls
sz anaconda-ks.cfg 
ls
rz

3.修改系统摩恩的存储历史命令的条数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.设定history命令显示时间

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.历史命令的调用

使用上下箭头调用以前的历史命令
使用 !n 重复执行第n条历史命令
使用 !! , !-1 重复执行上一条命令 Ctrl+p+enter亦可
使用 !ls 重复执行最后一条以ls开头的命令

命令补全和别名

tab键补全命令:在输入命令的时候,输入命令的一部分,可以按两下tab键补全命令

centos6 可以使用tab键补全命令,不支持补全选项;
centos7 也可以使用tab键补全命令,也支持补全选项,但是需要安装一个bash-completion的包,安装完成后需要重启。

在这里插入图片描述

自定义别名

在这里插入图片描述

别名的配置文件:~/bash.rc 和 /etc/profile.d/

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

取消别名

在这里插入图片描述

通配符、输出重定向

通配符

符号 作用
* 匹配任何字符串/文本,包括空字符串;*代表任意字符(0个或多个)
匹配任何一个字符(不在括号内时)?代表任意1个字符
[abcd] 匹配abcd中任何一个字符
[a-z] 表示范围a到z,表示范围的意思 []匹配中括号中任意一个字符
{…} 表示生成序列. 以逗号分隔,且不能有空格
[!abcd]或[^abcd] 表示非,表示不匹配括号里面的任何一个字符

在这里插入图片描述

在这里插入图片描述

输出重定向

符号 作用
> 正确输出重定向
>> 正确追加输出重定向
2> 错误输出重定向
2>> 错误追加输出重定向
&> 不管正确与否,输出重定向
&>> 不管正确与否,追加输出重定向
< 输入重定向

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

管道符、作业控制

符号 作用
| 把前面命令的结果给后面的命令

在这里插入图片描述

作业控制

命令 作用
ctrl+c 发送SIGINT信号,终止一个进程。
ctrl+z 发送SIGSTOP信号,挂起一个进程,将作业放置到后台(暂停状态)。与此同时,可以通过fg重启前台被中断的任务,也可以通过bg把中断的任务放到后台执行。
jobs 查看当前有多少在后台运行的命令
fg 将后台中的命令调至前台继续运行,如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
bg 将一个在后台暂停的命令,变成继续执行,如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
命令+& 这个用在一个命令的最后,可以把这个命令放到后台执行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40964554/article/details/100899628

智能推荐

pygame.error: Couldn't open images\ship.bmp的解决办法-程序员宅基地

文章浏览阅读2.7w次,点赞28次,收藏16次。在《python编程:从入门到实践》这本书中的《外星人入侵》的项目里有如下代码:import pygameclass Ship(): def __init__(self,screen): """初始化飞船并设置其初始位置""" self.screen = screen # 加载飞船图像并获取其外接矩形 self.image =

SpringBoot2.X学习之Intercepter拦截器_handlerinterceptor.super.prehandle-程序员宅基地

文章浏览阅读796次。本节课对SpringBoot2.0以及之前版本的拦截器进行讲解在SpringBoot1.x的版本中实现拦截器,首先写一个自定义拦截器实现addInterceptors接口,实现其三个方法:package com.qzsun.springbootdemo.intecpter;import javax.servlet.http.HttpServletRequest;import jav..._handlerinterceptor.super.prehandle

语音识别_android 编写语音识别利用rnn架构-程序员宅基地

文章浏览阅读289次。* Copyright (C) 2008 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain_android 编写语音识别利用rnn架构

让你COPY 自己的声音,GPT-SoVits 人声模型训练_做声音模型的程序-程序员宅基地

文章浏览阅读1.2k次,点赞14次,收藏26次。一个最快速、方便的声音copy模型,一个强大的少量语音转换和文本转换到语音 WebUI——GPT-SoVITS!_做声音模型的程序

ssm和ssh到底是什么?_ssm和ssh是什么-程序员宅基地

文章浏览阅读2.6k次,点赞3次,收藏3次。_ssm和ssh是什么

使用python循环完成对列表的选择排序_Python中选择排序Selection Sort-程序员宅基地

文章浏览阅读709次。介绍排序虽然是一项基本操作,但却是计算机应执行的最重要的操作之一。它是许多其他算法和过程(例如搜索和合并)的基础。了解不同的排序算法可以帮助您更好地理解不同算法背后的思想,并帮助您提出更好的算法。在选择排序算法排序通过找到未排序部分的最小值,然后与所述第一未排序的元件交换它的阵列。它是就地算法,这意味着您不需要分配其他列表。尽管速度很慢,但在内存有限的系统中,它仍被用作主要的排序算法。在本文中,我..._使用循环结构试编写列表的排序(sort)操作(简单选择法)

随便推点

python和台达plc通讯_台达PLC通信协议ModbusASCII(DVP)-程序员宅基地

文章浏览阅读528次。-精品文档--精品-台达PLC通信协议ModbusASCII(DVP)编撰:李浩特日期:2013/11/12版本:Ver:3.2例1:读D0(地址为1000H)寄存器数据-------------------------------2例2:读D0-D8(D0地址为1000H,D8地址为1008H)寄存器数据----------3例3:把0010H写入D0数据寄存器-----------------..._python解析台达plc通讯协议

云计算关键技术-程序员宅基地

文章浏览阅读1.3k次,点赞18次,收藏11次。云计算的实现采用分层架构,其中的关键技术包括虚拟化技术、分布式数据存储技术、资源管理技术、云计算平台管理技术和多租户隔离技术等。今天就来介绍下云计算的关键技术内容

C++构造函数初始化列表和构造函数函数体内赋值-程序员宅基地

文章浏览阅读616次。C++构造函数初始化列表和构造函数函数体内赋值大多数情况下构造函数初始化列表和构造函数函数体内赋值的效果是一样的,const常量和引用只能使用构造函数的初始化列表的方式进行初始化class A{public: A(int& a, int b, int c): _a(a),_b(b),_c(c) { //_a = a; //错误,引用必须在初始化列表中初始化 //_b = b; //错误,const成员变量必须在初始化列表中初始化 _c = c; //正确,和在初始化列

计算机专业的学生应该怎样提高自己的编程能力?_自学编程超过计算机专业的学生-程序员宅基地

文章浏览阅读1.9k次,点赞7次,收藏20次。本人国内某重点大学渣渣专业大一在读,专业对编程要求较高。大一刚学编程(C/C++),感觉有点吃力,求指点。我们平时练习都是做的OJ(老师负责选一些题让我们做,也可以自己随便刷),一些题还好,可是有些题难度感觉很大,有时好不容易有了思路,转化成代码都要老半天,别人一个小时就搞定的事情,我可能要花三四个小时,而且我本人比较粗心,经常被一些小错误坑了很久。最后就算千辛万苦地做出来,感觉也不值得,毕竟时间消耗太大。还有些题一些思路也没有,但是其他人(也是新手)就能搞定,基本就是别人过10道我过7道的水平。这_自学编程超过计算机专业的学生

vue小demo_vuexiaodemo-程序员宅基地

文章浏览阅读62次。小黑记事本基于vue的小demo<template> <div> <!-- 主体区域 --> <section id="todoapp"> <!-- 输入框 --> <header class="header"> <h1>小黑记事本</h1> <input v-model="addValue" @keyup.enter="l_vuexiaodemo

关于ArcGIS Server Gp Rest Result Return 在IE内核中产生挂起的错误解决-程序员宅基地

文章浏览阅读171次。在建设某业务系统的图形的时候,发现使用IE内核的浏览器在执行gp分析(我用的是rest)的时候会产生当获取到jobid后就被挂起的现象,使用馋猫和欧朋的内核的浏览器就不会,当时怀疑是网络的问题(公司的网络这段时间异常的不稳定,服务器内部中毒导致了时不时的短个网),经验证网络一切正常后,正在纳闷为产生此问题的时候,刚好测试部门的同时在JIRA中提出了一个BUG需要修改,因为JIRA在...

推荐文章

热门文章

相关标签