Bash初识与常用命令
阅读原文时间:2023年07月08日阅读:1

转至: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