0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在Linux系统中系统变量存在哪里呢?

阿铭linux 来源:阿铭linux 作者:阿铭 2022-11-16 09:46 次阅读

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

上面讲了很多系统变量,那么在Linux系统中,这些变量存在哪里呢?为什么用户一登录shell就自动有了这些变量呢?我们先来看看下面几个文件。

/etc/profile:这个文件预设了几个重要的变量,例如PATH、USER、LOGNAME、MAIL、INPUTRC、HOSTNAME、HISTSIZE、umask等。

/etc/bashrc:这个文件主要预设umask以及PS1。这个PS1就是我们在输入命令时前面的那串字符。例如,阿铭的Linux系统的PS1就是[root@localhost~]#,我们不妨看一下PS1的值,如下所示:

# echo $PS1
[u@h W]$

其中,u指用户,h指主机名,W指当前目录,$指字符#(如果是普通用户,则显示为$)。

除了以上两个系统级别的配置文件外,每个用户的主目录下还有以下几个隐藏文件。

bash_profile:该文件定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专属于自己的shell信息,当用户登录时,该文件仅仅执行一次。

bashrc:该文件包含专属于自己的shell的bash信息,当登录或每次打开新的shell时,该文件会被读取。例如,你可以将用户自定义的别名或者自定义变量写到这个文件中。

bash_history:该文件用于记录命令历史。

bash_logout:当退出shell时,会执行该文件。你可以将一些清理的工作放到这个文件中。

11.4Linux shell中的特殊符号

在学习Linux的过程中,也许你已经接触过某个特殊符号,例如*,它是一个通配符,代表零个或多个字符或数字。下面阿铭就介绍一下常用的特殊字符。

11.4.1*代表零个或多个任意字符

这个字符前面已经介绍过,这里再次提到,它的用法如下:

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

11.4.2?只代表一个任意的字符

这个字符的用法如下:

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

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

11.4.3注释符号#

这个符号在Linux中表示注释说明,即#后面的内容都会被忽略。用法如下:

#abc=123#aaaaa
#echo$abc
123

11.4.4脱义字符

这个字符会将后面的特殊符号(如*)还原为普通字符。用法如下:

#ls-dtest*
ls:
cannot access 'test*': No such file or directory

11.4.5再说管道符|

这个字符前面曾多次出现过,它的作用是将前面命令的输出作为后面命令的输入。这里提到的后面的命令,并不是所有的命令都可以的,一般针对文档操作的命令比较常用。

例如cat、less、head、tail、grep、cut、sort、wc、uniq、tee、tr、split、sed、awk等,其中grep、sed和awk是正则表达式必须掌握的工具,在后面会详细介绍。管道符的用法如下:

#cattestb.txt|wc-l
0

在上例中,wc -l用来计算一个文档有多少行。管道的作用在于将左边命令的输出内容作为右边命令的输入。

11.4.6特殊符号$

符号$可以用作变量前面的标识符,还可以和!结合起来使用。示例命令如下:

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

!$表示上条命令中的最后一个变量,本例中上条命令最后是testb.txt,那么在当前命令下输入!$则代表testb.txt。

11.4.7特殊符号;

通常,我们都是在一行中输入一个命令,然后回车就运行了。如果想在一行中运行两个或两个以上的命令,需要在命令之间加符号;。示例命令如下:

# mkdir testdir ; touch
test1.txt ; touch test2.txt; ls -d test*
test1.txt test2.txt 
testb.txt  testdir

11.4.8特殊符号~

符号~表示用户的家目录,root用户的家目录是/root ,普通用户则是/home/username。示例命令如下:

#cd~
#pwd
/root
#suaming
$cd~
$pwd
/home/aming

11.4.9特殊符号&

如果想把一条命令放到后台执行,则需要加上符号&,它通常用于命令运行时间较长的情况。比如,可以用在sleep后,如下所示:

#sleep30&
[1]
3808
#jobs
[1]+ 运行中               sleep 30 &

11.4.10重定向符号>、>>、2>和2>>

前面讲过重定向符号>和>>,它们分别表示取代和追加的意思。当我们运行一个命令报错时,报错信息会输出到当前屏幕。

如果想重定向到一个文本,则要用重定向符号2>或者2>>,它们分别表示错误重定向和错误追加重定向。示例命令如下:

#lsaaaa
ls:
cannot access 'aaaa': No such file or directory
#lsaaaa2>/tmp/error
#cat/tmp/error
ls:
cannot access 'aaaa': No such file or directory
#lsaaaa2>>/tmp/error
#cat/tmp/error
ls:
cannot access 'aaaa': No such file or directory
ls:
cannot access 'aaaa': No such file or directory

11.4.11中括号[]

中括号内为字符组合,代表字符组合中的任意一个,可以是一个范围(1-3,a-z),用法如下:

#cd/tmp/10
#ls-dtest*
test1.txt test2.txt 
testb.txt  testdir
#ls-dtest[1-3].txt
test1.txt test2.txt
#ls-dtest[12b].txt
test1.txt test2.txt 
testb.txt
#ls-dtest[1-9].txt
test1.txt test2.txt
#ls-dtest[1-9a-z].txt
test1.txt test2.txt 
testb.txt

11.4.12特殊符号&&和||

前面提到了分号可作为多条命令间的分隔符,其实还有两个可以用于多条命令中间的特殊符号,那就是&&和||。下面阿铭列出以下几种情况:

command1 ; command2

command1 && command2

command1 || command2

使用;时,不管command1是否执行成功,都会执行command2。

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

使用||时,command1执行成功后则command2不执行,否则执行command2,即command1和command2中总有一条命令会执行。接下来,阿铭要通过做试验来说明&&与||这两个特殊符号的作用:

#rm-rftest*
#touchtest1test3
#lstest2&&touchtest2
ls:
cannot access 'test2': No such file or directory
#lstest2
ls:
cannot access 'test2': No such file or directory

本例中,只有当ls test2成功执行后,才会执行touch test2。因为test2不存在, ls test2没有执行成功,所以&&后面的touch test2并没有执行。

#lstest2||touchtest2
ls:
cannot access 'test2': No such file or directory
#lstest*
test1 test2 
test3

本例中,若ls test2执行不成功,则会执行touch test2。因为test2不存在,所以ls test2没有执行成功,转而执行||后面的touch test2,所以增加了test2这个文件。







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux系统
    +关注

    关注

    4

    文章

    567

    浏览量

    26908
  • Shell
    +关注

    关注

    1

    文章

    357

    浏览量

    22901

原文标题:我猜你这些shell基础知识很多都不知道

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    我猜你这些shell基础知识很多都不知道

    上面讲了很多系统变量,那么在Linux系统中,这些变量存在哪里呢?为什么用户一登录shell就自
    发表于 11-16 09:41 234次阅读

    中国和外国嵌入式系统上的差距在哪里

    本帖最后由 wangka 于 2011-9-27 16:11 编辑 一直想知道中国和外国嵌入式系统上的差距在哪里中国开发上是勤奋的。可是为什么产品就是比不上国外的
    发表于 09-27 15:52

    请问以下程序的几个变量在哪里定义?

    此文件是TI例程的文件,请问以下程序的几个变量在哪里定义? 我能不能访问? 因为整个工
    发表于 05-29 16:17

    Linux实时方面存在哪些不足? 如何去改进Linux内核的实时性?

    实时系统分为哪几类?Linux实时方面存在哪些不足?如何去改进Linux内核的实时性?怎样去设计抢占式内核体系结构?
    发表于 04-26 06:36

    嵌入式为什么要用到Linux系统

    串行外设接口SPI是什么?嵌入式为什么要用到Linux系统?Cache常见的替换算法有哪几种
    发表于 11-02 08:09

    嵌入式Linux系统的组成包括哪些

    。③ Linux内核Linux内核的最主要目的是去启动APP,APP保存在哪里?保存在“根文件系统”里。“根文件
    发表于 12-17 08:13

    请问OK3399-c Linux系统在哪里可以设置开机不进入界面?

    OK3399-c 开发板Linux系统启动后默认显示桌面,请问在哪里可以设置开机不进入界面。
    发表于 12-30 06:55

    求助,保存的全局变量在哪里

    我有一个关于全局变量的新手问题。我们定义是否将代码保存到 RAM 或 FLASH ,并带有函数属性。但是全局变量函数外部定义的)存储在哪里
    发表于 06-12 07:31

    可以了解的Linux 文件系统结构

    Linux中的文件是什么?它的文件系统又是什么?那些配置文件又在哪里?我下载好的程序保存在哪里了?在 Linux 中文件
    发表于 04-27 14:06 607次阅读
    可以了解的<b class='flag-5'>Linux</b> 文件<b class='flag-5'>系统</b>结构

    鸿蒙系统优势在哪里

    自从华为公布首批搭载鸿蒙学堂的消息之后,不少华为手机用户接到了鸿蒙操作系统的更新推送。鸿蒙系统到底能不能成?鸿蒙系统优势在哪里? 鸿蒙系统
    的头像 发表于 06-21 16:42 1w次阅读
    鸿蒙<b class='flag-5'>系统</b>优势<b class='flag-5'>在哪里</b>?

    鸿蒙系统在哪里可以下载 华为p20支持鸿蒙系统

    鸿蒙系统在哪里可以下载?下面就由小编为大家来简单介绍一下!
    的头像 发表于 07-05 09:52 3150次阅读

    鸿蒙系统在哪里 华为鸿蒙官网报名

    鸿蒙系统在哪里?有哪些优势呢?下面就由小编来为大家简单介绍一下!
    的头像 发表于 07-07 09:09 2061次阅读

    鸿蒙系统截屏功能在哪里

    华为鸿蒙系统发布后,目前为止很多小伙伴都升级了鸿蒙系统,截屏是手机使用过程中一个很基础的功能,那么鸿蒙系统截屏功能在哪里呢?下面小编就为大家带来鸿蒙
    的头像 发表于 07-09 15:44 1.1w次阅读

    通过env命令来查看Linux系统当前的环境变量

    Linux 系统中,环境变量是用来定义系统运行环境的一些参数,常见的环境变量有HOME,SHELL,PATH等等。
    的头像 发表于 01-18 16:10 1994次阅读

    VESD静电监控系统优势在哪里

    VESD静电监控系统优势在哪里?今天我们就从各个方面为您介绍。
    的头像 发表于 04-26 14:52 422次阅读
    VESD静电监控<b class='flag-5'>系统</b>优势<b class='flag-5'>在哪里</b>