Linux shell基础知识

1  shell介绍

2  命令历史

3  命令补全和别名

4  通配符

5 输入输出重定向

6 管道符和作业控制

7,8 shell变量

9 环境变量配置文件

10 shell特殊符_cut命令

11 sort_wc_uniq命令

12 tee_tr_split命令

13 shell 特殊符号

 

 

1,什么是Shell:

Shell是一个命令解释器,提供用户和机器之间的交互

支持特定的语法:比如逻辑判断

还有zsh,ksh等

2,命令历史

Linux 可以记录每个用户所使用的命令, 并记录到 ~/.bash_history 文件中

当用户以 bash 登入 Linux 主机后, 系统会主动地由 ~/.bash_history 读取命令历史

当用户注销时, 会将最近的 HISTFILESIZE 个记录写入 ~/.bash_history 文件中

Linux shell基础知识_第1张图片

这里默认最大记录1000条,记录之前操作的命令

变量则为histor

history -c: 清除当前内存内的全部命令记忆

history -r: 将 history 文件中的命令记忆读出到当前内存中 #一般登录时会自动进行

history -w: 将目前的内存中的命令记忆写入 history 文件中 # 一般登出时会自动进行

 

3,命令补全和别名

命令补全 TAB

安装命令yum install -y bash-completion  ,安装完之后需要重启

Linux shell基础知识_第2张图片

 

这时候用tab命令 我们可以看到有对应的目录出来

常用的对目录或者目录下的文件输入第一个字符,TAB可以自动弹出,不再描述

Linux shell基础知识_第3张图片

命令别名 alias例如,将ls –l 命令用成111

Linux shell基础知识_第4张图片

删除alias用unalias

查看有哪些存在的alias等,cat .bashrc,这里代表用户家目录下就有3条

Linux shell基础知识_第5张图片

Linux shell基础知识_第6张图片

有些的在这里记录

Linux shell基础知识_第7张图片

 

4. 通配符与特殊符号

 

符号

意义

*

代表0-无穷个 任意字符

?

代表有且只有一个字符

[ ]

代表有且仅有一个字符,且为[...]中所枚举的其中一个, 如 [13579]

[-]

同上,只不过是一个范围,如[ 0-9 ],[a-z]等

[^]

有且仅有一个,且不是所枚举的任何字符,如:[^a-zA-Z] 代表该位不是字母

例如

Linux shell基础知识_第8张图片

这里不做详细的解释,主要是^代表非

[^][^a-z] 则代表不以小写字母开头的

[A-Za-z0-9]如果需要匹配字母和数字,则可以这么写

2>代表错误的输出

特殊符号

符号

内容

#

批注号

\

转义符号,将特殊字符或通配符还原成一般字符

|

管道符

;

命令衔接符,连续执行两条命令

~

当前用户家目录

$

取用变量符号

&

工作控制,将指令变成后台工作

!

逻辑非

>、>>

数据流重定向,output

<、<<

数据流重定向,input

' '

单引号,无法引用变量

" "

双引号,可以引用变量

\转义符,举例说如果我们需要查找一个特定word

这种\则代表转义

Linux shell基础知识_第9张图片

 

& 让程序去后台执行,这个也是非常重要的

正常写命令这里没有写完的时候会卡住的

如果加了&则可以去后台运行

dd if=/dev/zero of=bigfile bs=1M count=1000 &

可以实际操作,不再举例

也可以用top或者或者top &

5. 输入输出重定向

 流程图如下

Linux shell基础知识_第10张图片

 

标准输出,即命令成功执行时,将执行结果输出至文件 or 设备

符号:> (覆盖导出) 或 >> (追加导出)

例如将1覆盖到1.txt的目录下

Linux shell基础知识_第11张图片

 

再覆盖一次2,发现这里是覆盖,不是追加

Linux shell基础知识_第12张图片

用>>则代表追加

 

6. 管道符

管道的概念与数据流重定向不同,管道只是在输出至屏幕前多加一道工序,而配合管道的这些工序,往往是字符处理软件

例子:

Linux shell基础知识_第13张图片

ls /etc/ | more # 原本要直接输出至屏幕的信息, 用 more 进行了加工

Linux shell基础知识_第14张图片

ls /etc/ | grep "bash" # 原本直接输出至屏幕的信息, 用 grep "bash" 进行了加工, 筛选出了关键字

 

7. 作业控制

foreground: 前台, 平常执行命令的界面,通用命令fg

background: 后台, 看不到的地方

什么样的工作适合放到后台: 不需要与用户交互的命令

放入后台的工作是无法用 Ctrl + c 来终止的

后台的工作有两种状态: 暂停(stop) 和 运行中( running)

 

例如

Linux shell基础知识_第15张图片

 

按下 ctrl+z, 将正在执行的top扔到后台且置为暂停 [1]-  已停止

例如:

Linux shell基础知识_第16张图片

查看后台命令用jobs

 Job参数:

-l:同时列出任务的 PID

-r: 仅列出后台中处于 "running" 的任务

-s: 仅列出后台中处于 "stop" 的任务

 

将后台工作拿回到前台来(fg)

 

将后台暂停的任务激活用bg

直接移除后台 则使用kill或者pkill

kill 发送信号给一个或多个进程(经常用来杀死一个进程)

 

Linux shell基础知识_第17张图片

一般命令是kill -9 pid

上面我们再看的时候则只有一个top进程

 

8. Shell 变量

之前我们接触过PATH,它是shell预设的一个变量

通常shell预设的变量都是大写的。变量就是使用一个较简单 的字符串来替代某些具有特殊意义的设定以及数据

1)预设的变量除了PATH外,可以使用env命令来查看系统常用的变量

Linux shell基础知识_第18张图片

2)用户自定义变量

Linux shell基础知识_第19张图片

3)变量名规则:字母、数字下划线、首位不能为数字

4)变量的累加,当变量中有其他的变量是可以将该变量使用双引号单独引起来。

例如

Linux shell基础知识_第20张图片

可以用w表示在那个TTY下

在当前终端下设置的变量在其他的shell下是没有的,因为还没有进行全局变量。在一个终端下执行bash就进入到了一个子shell,也就是打开了另一个shell

要想使该终端下的所有子shell都能识别某个变量,需要进行全局变量。并且是向下生效的。

注意-1:如果变量值中存在空格,需要用单引号或双引号将变量值括起来

注意-2:如果变量值中有引用其他变量,需要用双引号将变量值括起来

变量的相关命令echo

功能:打印变量的内容

[root@choco-01 ~]# echo $LANG zh_CN.UTF-8

export

功能:将变量转换为环境变量

声明变量为环境变量,进入子 shell 后,变量仍让有效

Linux shell基础知识_第21张图片

常用的环境变量有(这里不再举例)

常用环境变量

HOME: 当前用户的家目录

HOSTNAME: 该主机的主机名

USER: 当前用户的用户名

SHELL: 当前使用的 shell 类型

HISTSIZE: 可存储的历史命令条数

MAIL: 当前用户的邮箱

PATH: 可执行命令的所在目录

LANG: 当前语系

PS1: 命令提示符的格式, 可玩性较高, 但工作中不常用, 可自行 manbash 查看 PS1 的设置方法

PS2: 输入命令时强制换行后的提示符

OSTYPE: 当前操作系统类型

MACHTYPE: 安装的机器类型

HOSTTYPE: 主机的位数, x86 还是 x86_64

 

9. 环境变量配置文件

login 与 non-login

ogin shell:取得 bash 时需要完整的登录流程。如由 tty1-tty6登录时,需要输入用户的账号和密码

读取的文件:

/etc/profile :系统整体的设定,对所有用户皆生效

~/.bash_profile 或 ~/.bash_login 或 ~/.profile:用户的个人设定

但是各个文件中可能又会调用其他的文件,所以一般来说,login shell 读取的文件如下图所示:

non-login shell:取得 bash 接口的方法不需要重复登录的举动,如在 bash 环境下,再次执行bash命令进入子 shell 时,不需要输入账号和密码

  1. /etc/profile (login shell)

该文件会根据用户的 UID 设定好许多环境变量以及参数

 

 

设定环境变量

PATH:根据 UID 决定PATH 变量是否要包含 sbin 目录

USER:根据 id 命令的结果,显示用户名

LOGNAME:等于 USER

MAIL:配置好用户的邮箱

HOSTNAME:根据 hostname 指令,决定该变量值

HISTSIZE:直接设定历史命令记录的条数为 1000

 

~/.bash_profile (login shell)

根据之前流程图的描述,bash shell 读取完通用配置后,才开始进行用户个性化配置的读取。

其实用户个性化配置的文件不止 ~/.bash_profile 一个,还可能有 ~/.bahs_login 和 ~/.profile

所以我们往往只能见到 ~/.bash_profile 而已

Bash profile的内容如下

Linux shell基础知识_第22张图片

他的意思是/.bash_profile 调取了 ~/.bashrc 文件, 并将 ~/bin 目录加入到 PATH 变量中

~/.bashrc

查看catBashrc

Linux shell基础知识_第23张图片

当通过 non-login shell 取得 bash 后, 仅会读取 ~/.bashrc 文件

 

10  shell特殊符_cut命令

 

*任意一个任意字符 

?任意一个字符

#注释字符

|管道符

Linux shell基础知识_第24张图片

Linux shell基础知识_第25张图片

利用cut我们可以截取需要的展现的数据,例如下面的-c,可以看到对应的信息

Linux shell基础知识_第26张图片

11 sort_wc_uniq命令

Linux shell基础知识_第27张图片

用sort

Linux shell基础知识_第28张图片

//-t 指定分隔符,作用与cut -d 一样 


-n 表示用纯数字排序 ,特殊符号或者字母会按0排序

-r 逆向排序

Linux shell基础知识_第29张图片

wc -l 可以查看对应的行数

uniq命令用来删除重复的行,其中-c选项用来统计重复的行数。前提是排序后执行uniq

一般携带-c参数

Linux shell基础知识_第30张图片

tee命令后面跟文件名,其作用类似于重定向>,但他比重定向多一个功能,即把文件写入后面所跟的文件时同时显示在屏幕上,追加使用-a选项

例如

Linux shell基础知识_第31张图片

加上-a之后 相当于追加

Linux shell基础知识_第32张图片

将2.txt的内容已经追加到了3.txt

 

tr命令应用于替换字符,常用来处理文档中出现的特殊符号。

例如将z替换成Z

split命令用于切割文档,把一个很大的文件分成指定的大小等

-b 100M 例如切割成100M的一个文档,例如常用以下命令格式

find /etc/ -type f -name "*conf" -exec cat {} >> a.txt \; //将所有找到*conf文件全部写入a.txt中

split -b 1000 a.txt zcx. //表示分割后的小分件的文件名前缀为zx.xx,这里做个测试

Linux shell基础知识_第33张图片

split -b 1000 a.txt

Linux shell基础知识_第34张图片

Linux shell基础知识_第35张图片

指定每个100k

 

13 shell特殊符号

$变量前缀,!$组合,,正则里面表示行尾

~ 用户家目录,在正则表达式中表示匹配符

;多命令写到一行则用分号分开

> 正确重定向,会把之前文件的内容全部覆盖掉

[]定字符中的一个,[0-9],[a-zA-Z],[abc]

|| 用在shell中表示或者

&& 表示当第一条命令成功后,才会执行第2条命令。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Linux shell基础知识)