转至:https://www.cnblogs.com/baishou/p/13850258.html

Shell介绍

Shell在中文的意思是壳,寓意是操作系统的壳。Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务,简而言之就是只要能够操作应用程序的接口都能够称之为Shell。狭义的Shell指的是命令行方面的软件,广义的Shell则包括图形界面。

Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种解释器,也是一种程序设计语言。通常将使用Shell语言写的程序称之为脚本程序(Shell Script)。

Bash

sh(Bourne Shell)是一个早期的重要Shell,1978年由史蒂夫•伯恩编写,并同Version 7 Unix一起发布。

Bash(Bourbon-Again Shell)是一个为GNU计划编写的Unix Shell。1987年由布莱恩•福克斯创造。主要目标是与POSIX标准保持一致,同时兼顾对Sh的兼容,是各种Linux发行版标准配置的Shell,在Linux系统上/bin/sh往往是指向/bin/bash的符号链接。

Dash(Debian Almquist Shell)是一种Unix Shell。它比Bash小,只需要较少的磁盘空间,但是它的对话性功能也比较少。它由NetBSD版本的Almquist Shell(Ash)发展而来,于1997年由赫伯特•许(Herbert Xu)移植到Linux上,于2002年改名为Dash。

在CentOS 7上查看可以使用哪些Shell可以查看/etc/shells这个文件

[chirou@Chirou ~]$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

Shell交互式环境

用户登录后进入解释器Bash的交互式环境,可以输入命令

[chirou@localhost ~]$     $表示当前登录的是普通用户
[root@localhost ~]# #表示当前登录的是超级用户root chirou 表示当前登录的用户名
localhost 表示当前的主机名
~ 表示当前所在目录为家目录

Shell命令语法

命令组成格式:
Command [Option1] [Option1]... [Parameter1] [Parameter2]...

Command: 命令(必选)
Option: 选项,命令具体某个功能,根据需要可以有多个。
Parameter:参数,命令操作的对象,也可以有多个。
  • Linux对大小写敏感,大多数命令都是小写。

  • 命令选项和参数之间必须要用空格分隔,有多个空格Bash视为一个。

  • 使用选项时,通常会在前面加上横杠 - ,如果使用的是长选项则需要加上两个横杠 --,例如ls -a 和 --all,其实它俩指的是一个意思。多个短选项可以组合起来,只写一个横杠 -

    [root@Chirou ~]# ls -al
    [root@Chirou ~]# ls -a -l
    # 这俩是一个意思
  • 命令输入完成后,按下Enter就立即执行。

命令与路径补全

在Linux中可以使用Tab键进行命令和路径的补全。

  • 在输入命令的时候使用Tab键,Bash会自动寻找以已键入字符开头的命令。如果有多个相同开头的命令,连按两下Tab键会显示出所有的命令。

  • 对于某些特别长的路径,我们在输入的过程中也可以使用Tab键,Bash会寻找当前路径所有以已输入字符开头的文件补全。

Bash常用快捷键

  • Ctrl+c:立即停止前台正在运行的程序
  • Ctrl+d:退出,相当于exit命令。删除光标后的字符。
  • Ctrl+l:清屏,相当于clear命令。
  • Ctrl+a:光标移动到命令行的行首
  • Ctrl+e:光标移动到命令行的行尾
  • Ctrl+u:删除光标所在处至行首的字符
  • Ctrl+k:删除光标所在处至行尾的字符
  • Ctrl+r:利用关键字搜索命令历史
  • Alt+. :引用上一个命令的最后一个参数,想当于!$
  • Shift+PageUP/PageDown:如果某些命令的输出特别长,导致前面的内容以不在当前屏幕中,就可以使用这两个快捷键进行上下翻页。

命令历史

Bash会记录用户所有的输入,可以通过history命令来查看记录。history是记录在内存中的,当用户退出或登出shell时,会自动保存到~/.bash_history文件中。登录时,又会从文件中读取到内存。在内存中,历史命令默认能够存储1000条命令,数量是由环境变量HISTSIZE进行控制,HISTSIZE变量存在于/etc/profile中。

  • -c:将当前登录shell中的历史记录消除。对history文件没影响。
  • -w:将本次登录的历史记录写入命令历史文件中,默认在用户登出时才会写入文件中。
  • -r:将命令历史文件中的内容读入到目前shell的history记录中。
  • !n :执行历史中第n条命令
  • !字符串:执行命令中最近一个以‘字符串’开头的命令。
  • !$:引用上一个命令的最后一个参数

命令别名

Bash中为了简化用户输入,可以将一行命令设置一个别名。

alias:查看所有别名

alias a_name='ls /etc/sysconfig/network-scripts/'
#设置别名
unalias a_name
#取消别名

alias命令设置别名是临时设置,登出后即消失。若要永久设置,需要将设置的别名写入~/.bashrc配置文件。

type查看命令类型

Bash解释器自带有一些内置命令。这些命令通过man命令查询帮助手册时,显示的是Bash解释器的手册页,而非命令的手册页。通过type命令就可以查看命令是否输入内置命令。type会显示命令的路径,和which命令类似。

[root@Chirou ~]# type [-tpa] command_name
不加任何选项与参数时,type会显示出name是外部指令还是内置指令
-t :当加入-t参数时,type会将name以底下这些字符显示出它的意义:
file :表示为外部指令;
alias :表示该指令为命令别名所设定的名称;
builtin :表示该指令为bash内建的指令功能;
-p :如果后面接的name为外部指令时,才会显示完整档名;
-a :会由PATH变数定义的路径中,将所有含name的指令都列出来,包含alias

命令查找优先级

Bash 查找命令的顺序:

  • 1、以绝对路径或相对路径执行命令
  • 2、alias
  • 3、Compound Command (复合命令)
  • 4、function
  • 5、build_in
  • 6、hash
  • 7、PATH环境变量所包含的路径
  • 8、上面都找不到就会报错,command not found

Linux查询帮助信息

--help选项

很多命令可以通过--help选项查看命令的大致用法。

[root@Chirou ~]# ls --help
用法:ls [选项]... [文件]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified. Mandatory arguments to long options are mandatory for short options too.
-a, --all 不隐藏任何以. 开始的项目
-A, --almost-all 列出除. 及.. 以外的任何项目
--author 与-l 同时使用时列出每个文件的作者
-b, --escape 以八进制溢出序列表示不可打印的字符
--block-size=SIZE scale sizes by SIZE before printing them; e.g.,
'--block-size=M' prints sizes in units of
1,048,576 bytes; see SIZE format below

man手册页

man是manual的简写。

[root@Chirou ~]# man [-a] command
# 不带选项会直接显示该命令的详细文档
-a:显示所有匹配项

man命令一共有9个章节,通过man 7 man命令可以查看

  • 1 普通用户在shell中可以使用的命令的用法
  • 2 系统内核可调用的函数与工具等
  • 3 一些常用的库文件调用
  • 4 查看一些设备文件,通常是/dev下的文件例如:# man 4 null
  • 5 配置文档的信息
  • 6 内置游戏的玩法
  • 7 一些杂项,比如网络协议等
  • 8 只有管理员能够执行的文件,例如一些系统管理类命令。
  • 9 Linux 内核 API

常用的是1、5、8章节。

info命令

info与man的用途其实差不多,都是用来查询指令详细信息的命令。 但是与man page一口气输出一堆文档不同的是, info page则是将档拆成一个一个的段落,每个段落用自己的页面来撰写,并且在各个页面中还有类似网页的“超链接”来跳到各不同的页面中,每个独立的页面也被称为一个节点(node) 。

不过你要查询的目标资料的说明文件必须要以info的格式来写成才能够使用info的特殊功能(例如超链接)。而这个支援info指令的文件预设是放置在 /usr/share/info/ 这个目录当中的。

参考文件/配置模块文件

一般而言,命令或者软件制作者,都会将自己的命令或者软件的说明制作成线上说明文件。但是,毕竟不是每个都需要做成线上说明文件,还有相当多的说明需要额外的文件!这些说明文件一般就放在/usr/share/doc这个目录里。

对于新手用户来说,这些通篇英文的文档可能会大大增加学习Linux的难度,所以一般而言,如果对某些命令不了解,更推荐通过上网找答案。但如果要真正深入理解,还是需要看官方文档才行。

常用命令

hostnamectl设置主机名,重启生效

[root@Chirou ~]# hostnamectl set-hostname chirou

在集群系统中,使用主机名能方便管理员识别每台服务器。

date

查看时间
~~~Python

[chirou@duorou ~]$ date '+%Y-%m-%d %H:%M:%S'
2020-10-20 19:18:25
~~~

设置时间
[chirou@duorou ~]$ date -s '2222-1-3 22:22:6'
2222年 01月 03日 星期四 22:22:06 CST

注意,Linux有两个时间,一个是系统时间,是由Linux系统启动后维护的。另一个是硬件时间,硬件时间是指主板上的时钟设备,在BIOS设定的时钟。硬件时间存放于CMOS中。当Linux启动时,Linux系统将时间从CMOS中读到系统时间变量中,之后系统时钟即独立运作。所有Linux相关指令与函数都是读取系统时钟的设定。

Linux系统设置硬件时钟时,提供两种时区选择,一种为本地时区,中国使用的是东8区,此时硬件时间与系统时间相同。另一种是UTC时区,就是世界标准时间,此时硬件时间存的是UTC时间,系统初始化时会转换为本地时间后再设置为系统时钟的时间。

为了保证系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约11分钟)进行的,在我们执行date -s 后,如果马上重启机器,修改时间就有可能没有被写入CMOS。

将系统时间写入CMOS

[root@duorou ~]# date -s '2020-2-2 2:2:2'
2020年 02月 02日 星期日 02:02:02 CST
[root@duorou ~]# hwclock
2020年10月20日 星期二 19时54分56秒 -0.416221 秒
[root@duorou ~]# hwclock -w
2020年02月02日 星期日 02时02分31秒 -0.056272 秒

将硬件时间同步给系统时间

[root@duorou ~]# date
2222年 01月 03日 星期四 22:50:35 CST
[root@duorou ~]# hwclock
2020年10月20日 星期二 19时50分19秒 -0.964076 秒 [root@duorou ~]# hwclock -s [root@duorou ~]# date
2020年 10月 20日 星期二 19:50:35 CST

为了使系统时间准确,最好还是使用ntp方式。Centos7用chrony替换ntp。

NTP(Net Time Protocol)网络时间协议。

使用ntpdate命令从网络同步时间,再同步到硬件时钟。

[root@duorou ~]# date
2020年 02月 02日 星期日 02:07:28 CST
[root@duorou ~]# hwclock
2020年02月02日 星期日 02时07分19秒 -1.033182 秒
[root@duorou ~]# ntpdate ntp1.aliyun.com
20 Oct 20:17:55 ntpdate[2323]: step time server 120.25.115.20 offset 22615794.922528 sec
[root@duorou ~]# date
2020年 10月 20日 星期二 20:18:13 CST
[root@duorou ~]# hwclock -w
[root@duorou ~]# hwclock
2020年10月20日 星期二 20时19分06秒 -0.611573 秒

阿里云提供了7个NTP时间服务器。

ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
ntp4.aliyun.com
ntp5.aliyun.com
ntp6.aliyun.com
ntp7.aliyun.com

重启命令

init 6 # 将系统级别设置为6,即重启级别
reboot # 立即重启
shutdown -r 0 # 立即重启,0相当于now
shutdown -r 3 # 3分钟后重启,且会显示在登录用户的当前屏幕中
shutdown -r 8:30 # 会在最近的8点30分重启

关机命令

init 0 # 将系统级别设置为0,即关机级别
halt # 立即关机
poweroff # 立即关机
shutdown -h 0 # 立即关机,0相当于now

取消已设定的关机或重启任务

[root@duorou ~]# showdown -c

Linux系统一般作为服务器系统,服务器在生产环境中很少会关机。若要关机,一定要将内存中的数据写入硬盘后再关机。推荐使用shutdown命令,它在关机前会先将内存中的数据写入硬盘,然后再关机。另外只有管理员root权限才能执行关机命令。

注销或登出账号

[root@duorou ~]# exit
[root@duorou ~]# logout
或使用快捷键 Ctrl+d

Bash初识与常用命令的更多相关文章

  1. bash 和 powershell 常用命令集锦

    Linux Shell # 1. 后台运行命令 nohup python xxx.py & # 查找替换 ## 只在目录中所有的 .py 和 .dart 文件中递归搜索字符"main ...

  2. 初识linux&常用命令&目录文件的浏览和管理

    Linux系统的主要用途:主要用于服器务器,特别是网络服务 Linux命令格式 命令   [选项]  [ 参数] 命令:告诉操作系统做什么,执行什么 选项:说明命令的运行方式(可以改变命令的功能).选 ...

  3. windows下通过Git Bash使用Git常用命令

    Git跟SVN最大不同的地方就是分布式.SVN的集中式与Git的分布式决定各自的业务场景.既然是分布式的,那么大部分操作就是本地操作.一般Git操作都是通过IDE,比如Eclipse,如果装了Git ...

  4. linux初识-02常用命令

    文件目录操作命令 ls 现实文件和目录列表 ls -l 列出文件的详细信息 ls -a 列出当前目录所有文件 包括隐藏的文件 mkdir 创建目录 -p 父目录不存在的情况下先生成父目录 cd 切换目 ...

  5. bash vim等常用命令

    生成的txt一不小心带了./,用vim: :%s/\.\/single/single #%s/xxx/yyy/g是全文本替换,这里用\将特殊字符.和/转换成普通字符 结果还不错: ---------- ...

  6. Linux bash脚本及常用命令--不断更新中

    1.如何在向alias命令传递参数: 这种用法的话就需要使用函数来配合使用. 如要cd到指定目录,并且ls当前目录下的文件可以使用:  alias cdls='cdls(){ cd $1; ls; } ...

  7. Linux学习之CentOS(二)--初识linux的一些常用命令

    Linux学习之CentOS(二)--初识linux的一些常用命令 在VM上安装完了CentOS6.4以后,看着linux系统成功跑起来,心里小激动了一把......但是前方学习的道路还很遥远... ...

  8. Bash,Vim,gdb&git常用命令

    Bash 目录 pwd  //查看当前目录 mkdir dir1 dir2  //创建目录 tree dir1 mv test1.cpp test2.cpp dir1 dir  //移动文件/目录到目 ...

  9. bash shell学习笔记(一)—— 常用命令

    一.基本的bash shell命令 1.默认bash shell 提示符是美元符号($); 2.bash手册 使用man命令来访问存储在Linux系统上的手册页面,如: bogon:~ Mac$ ma ...

随机推荐

  1. gin初识

    Gin 是一个用 Go (Golang) 编写的 web 框架. 它是一个类似于 martini 但拥有更好性能的 API 框架, 由于 httprouter,速度提高了近 40 倍. 如果你是性能和 ...

  2. .NET SourceGenerators 根据 HTTPAPI 接口自动生成实现类

    目录 摘要 元数据分析 使用 Source generators 实现 使用 Source generators 实现程序集分析 使用方法 SourceCode && Nuget pa ...

  3. 记一次 .NET 某智能交通后台服务 CPU爆高分析

    一:背景 1. 讲故事 前天有位朋友加微信求助他的程序出现了CPU爆高的问题,开局就是一个红包,把我吓懵了! 由于是南方小年,我在老家张罗处理起来不方便,没有第一时间帮他处理,朋友在第二天上午已经找出 ...

  4. 基于Python的某大学某学院新生高考成绩分析

    # coding=gbk import pandas as pd import numpy as np import matplotlib.pyplot as plt from pylab impor ...

  5. CSS实现事件穿透与背景图不跟随滚动条

    1. 事件穿透属性:pointer-events: none  // auto默认值.none:不捕捉target事件(实现穿透) 用途:当需要使用透明遮罩并且允许点击遮罩下方元素时,或需要使用背景容 ...

  6. 后缀自动机 (SAM)

    后缀自动机 定义 定义 SAM 为一个有限状态自动机,接受且仅接受 \(S\) 的一个后缀. 同时,SAM 是这样的自动机中最小的那个,其中状态数至多为 \(2n - 1\),转移数至多为 \(3n ...

  7. [USACO18DEC]The Cow Gathering P

    首先可以思考一下每次能删去的点有什么性质. 不难发现,每次能删去的点都是入度恰好为 \(1\) 的那些点(包括 \(a_i \rightarrow b_i\) 的有向边). 换句话说,每次能删去的点既 ...

  8. Java面试必问之线程池的创建使用、线程池的核心参数、线程池的底层工作原理

    一.前言 大家在面试过程中,必不可少的问题是线程池,小编也是在面试中被问啥傻了,JUC就了解的不多.加上做系统时,很少遇到,自己也是一知半解,最近看了尚硅谷阳哥的课,恍然大悟,特写此文章记录一下!如果 ...

  9. JAVA多线程学习十一-线程锁技术

    前面我们讲到了synchronized:那么这节就来将lock的功效. 一.locks相关类 锁相关的类都在包java.util.concurrent.locks下,有以下类和接口: |---Abst ...

  10. Python调用windows下DLL详解 - ctypes库的使用

    在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分数据的交互.使用python中的ctypes模块可以很方便的调用windows的dll(也包括linux下的so等文件),下面将详 ...