Linux的shell基础知识

本文深入讲解Shell的功能特性,包括命令历史记录、补全、别名、通配符、输入输出重定向、管道符等,同时介绍了环境变量的管理和常用Shell命令,如cut、sort、wc等,帮助读者掌握Shell的高级用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

shell的认识

shell是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机去执行各种操作。

1、记录命令历史
!!:连续两个!表示执行上一条指令

#pwd
/root
#!!
pwd
/root

!n:这里n是数字,表示执行历史命令中的第n条指令。

#!1002
pwd
/root

!字符串(字符串大于等于1):!pw表示执行命令历史中最近一次以pw开头的命令。

#!pw
pwd
/root

2、命令和文件名补全
按tab键可以帮助补全一个命令、一个路径或者一个文件名。连续两次tab键,系统会把所有的命令或者文件名列出来。

3、别名
通过alias把一个常用的并且很长的指令另取名为一个简单易记的指令。

#alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'

也可以自定义的别名,alias【命令别名】=【具体的命令】

#alias cloud='pwd'
#cloud
/root

4、通配符
可以使用*来匹配零个或者多个字符。

#ls -d /tmp/4_6/test*
/tmp/4_6/test1 /tmp/4_6/test4 /tmp/4_6/test5

5、输入/输出重定向
输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。输入重定向的命令是<,输出重定向的命令是>。

#echo "123" > 123.txt
#cat 123.txt
123
#echo "123" >> 123.txt
#cat 123.txt
123
123

6、管道符
用于将前一个指令的输出作为后一个指令的输入。

#cat /etc/passwd|wc -l

7、作业控制
进入编辑模式时发现错误了,可以按Ctrl+c组合强制退出,使用Ctrl+z组合暂停任务(要在一般模式下)。如果提示停止了,可以使用fg命令恢复它。如果想把暂停的任务放在后台重新运行,使用bg命令 。通过tail -f 文件名查看有没有在后台运行。

变量

使用一个较简单的字符来替代某些具有特殊意义的设定以及数量。有了PATH这个变量,运行某个命令时,不再需要输入全局路径,直接输入命令名即可。

#echo $PATH(显示变量值)
#echo $PWD
/root

1、命令env
可以列出系统预设的全部系统变量。登录不同的用户,这些环境变量的值也不同。
HOSTNAME:表示主机名称。
SHELL:表示当前用户的shell类型。
HISTSIZE:表示历史记录数。
MAIL:表示当前用户的邮件存放目录。
PATH:该变量决定了shell将到哪些目录中寻找命令或程序。
PWD:表示当前目录。
LANG:这是与语言相关的环境变量
HOME:表示当前用户的家目录。
LOGNAME:表示当前用户的登录名。
env命令显示的变量只是环境变量,系统预设的变量其实还有很多。

2、命令set
也是可以输出环境变量。不仅可以显示系统预设的变量,也可以显示用户自定义的变量。

#myname='aming'
#set |grep myname 
myname=aming

只能在当前shell中生效。

#bash//执行命令会进入一个shell环境中
#echo $myname

使用bash可以再打开一个shell,此时先前设置的myname变量已经不存在了,退出当前shell回到原来的shell,myname变量还在。
允许系统内所有用户登录后都能使用该变量,就要在/etc/profile文件的最后一行加入export myname=aming,然后运行source /etc/profile可以生效。

#echo "exprot myname=aming" >> /etc/profile
#source !$
source /etc/profile
#bash
#echo $myname
aming
#exit

仅允许当前用户使用变量,就要在用户目录下的.bashrc文件的最后一行加入export myname=aming,然后运行source .bashrc就可以生效了。
设定变量的格式为a=b,a为变量名,b为变量内容。
变量名只能是字母,数据下划线组成,不能以数字开头。
当变量内容带有特殊字符时,需要加上单引号。

系统环境变量与个人环境的配置文件

/etc/prifile:这个文件预设了几个重要的变量,PATH、USER、LOCNAME、MAIL、INPUTRC、HOSTNAME、HISIZE、umask。
/etc/bashrc:这个文件主要预设umask以及PS1。PS1就是输入命令时前面的那串字符。(\u指用户,\h指主机名,\w指当前目录,$指字符#)
.bash_profile:该文件定义了用户的个人路径与环境的文件名称。每个用户都可以使用该文件输入专属于自己的shell信息,当用户登录时,该文件仅仅执行一次。
.bashrc:该文件包含专属于自己的shell的bash信息,当登录或每次打开新的shell时,该文件会被读取。
.bash_history:该文件用于记录命令历史。
.bash_logout:当退出shell时,会执行该文件。

Linux shell中的特殊符号

*1、代表零个或多个任意字符

#ls /tmp/4_6/test*
/tmp/4_6/test1 /tmp/4_6/test4 /tmp/4_6/test5

2、?只代表一个任意字符

#touch /tmp/4_6/testa
#ls -d /tmp/4_6/test?
/tmp/4_6/test1 /tmp/4_6/test4 /tmp/4_6/test5

不管是数字还是字母,只要是一个字符,都能匹配出来。

3、注释符号#
#后面的内容都会被忽略。

#abc=123 #aaaaa
#echo $abc
123

*4、脱义字符*
这个字符会将后面的特殊符号还原为普通字符

#ls -d test\*

5、管道符|
它的作用是将前面命令的输出作为后面命令的输入。

#cat testb.txt |wc -l
0

6、命令cut
cut命令用来截取某一个字段。
-d:后面跟分隔字符,分隔字符要用单引号括起来。
-c:后面接的是第几个字符。
-f:后面接的是第几个区块。

#cat /etc/passwd|cut -d ':' -f 1 |head -5
root
bin
daemon
adm
lp
#head -n2 /etc/passwd|cut -c2
0
1
#head -n2 /etc/passwd|cut -c1
r
b

7、命令sort
用作排序。sort 【-t 分隔符】【-kn1,n2】【-nru】
-t:后面跟分隔字符。
-n:表示使用纯数字排序。
-r:表示反向排序。
-u:表示去重复。
-kn1,n2:表示由n1区排序到n2区之间。

#head -n5 /etc/passwd |sort -t: -k3 -n
#head -n5 /etc/passwd |sort -t: -k3 -r(反向排序)

8、命令wc
wc命令用于统计文档的行数、字符或词数。。-l统计行数,-m统计字符数,-w统计词数。

#wc /etc/passwd
45 90 2361 /etc/passwd
#wc -l /etc/passwd
45 /etc/passwd
#wc -m /etc/passwd
2361 /etc/passwd
#wc -w /etc/passwd
90 /etc/passwd

9、命令uniq
命令uniq用来删除重复的行。该命令只有-c比较常用,表示统计重复的行数,并把行数写在前面。

#vi testb.txt
111
222
111
333
#uniq testb.txt
111
222
111
333
#sort testb.txt |uniq(使用uniq前先给文件排序)
111
222
333
#sort testb.txt |uniq -c
2 111
1 222
1 333

10、命令tee
tee命令后面加文件名,作用类似重定向,但它可以把文件写入后面,同时还显示在屏幕上。

#echo "aaaaaaaaaaaaa" |tee testb.txt
aaaaaaaaaaaaa

11、命令tr
tr命令用于替换字符,常用来处理文件中出现的特殊字符。
-d:表示删除某个字符,后面跟要删除的字符。
-s:表示删除重复的字符。
tr ‘[a-z]’ ‘[A-Z]’

12、命令split
命令split用于切割文档。
-b:表示依据大小来分割文档。

#mkdir split_dir
cd !$
cd split_dir
#cp /etc/passwd ./
#split -b 500 passwd
#ls
passwd xaa xab axc axd axe

13、特殊字符$
符号用作变量前面的标识符,还可以和!结合起来用

#cd ..
#ls testb.txt
testb.txt
#ls !$
ls testb.txt
testb.txt

14、特殊字符;
如果想在一行中运行两个或两个以上的命令,需要在命令之间加符号。

#mkdir testdir ; touch test1.txt ; touch test2.txt

15特殊符号~
表示用户的家目录,root用户的家目录是/root,普通用户则是/home/username

#cd ~
#pwd
/root

16、特殊字符&
如果想把命令放到后台执行,则需要加上符号&。

#sleep 30 &

17、重定向符号>>,>
分别表示取代和追加的意思,2>或者2>>,它表示错误重定向和错误追加重定向。

18、中括号[]
中括号内为字符组合,代表字符组合的任意一个。

19、特殊符号&&和||

#command1; command2
#command1 && command2
#command1 || command2

使用;时,不管command1是否执行,都会执行command2
使用&&时,只有command1执行成功后,command2才会执行。
使用||时,command1执行成功后则command2不执行,否则执行command2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值