Linux Shell(二)——Shell的环境配置

1 命令别名

1.1 设置命令的别名

将rm设为rm -i,这样只要输入rm就能拥有rm -i的功能,在删除的时候就会有提示:

alias rm='rm -i'

1.2 取消命令的别名

unalias即可删除已创建的别名:

unalias rm

1.3 查看所有别名

只输入一个alias即可查看所有已经设置的别名:

[root@iZ28st035lsZ ~]# alias
alias cp='cp -i'
alias fdisk='fdisk -H 224 -S 56'
alias l.='ls -d .*'
alias ll='ls -al'
alias mv='mv -i'
alias rm='rm -i'
alias sshmy='ssh root@115.28.217.42'

2 历史命令

2.1 history命令

系统会默认保留1000条最近执行的命令,可以使用history命令查看:

history 参数
n:列出最近的n条命令
-c:删除目前shell全部的命令
-raw fileName:将目前shell的命令写入指定文件中,若未指定文件则写入~/.bash_history中。

2.2 !命令

!n #执行第n条命令
!命令名 #执行最近的该条命令
!! #执行上一条命令

2.3 history的安全问题

~/.bash_history文件中存放最近1000条命令,如果root账户的这个文件被黑客攻陷,那存在安全隐患。

2.4 一账号同时登录的问题

如果开多个窗口,同时登录同一个账号,那么每个窗口都会拥有各自的内存记录本窗口执行的命令。由于历史命令在账户注销时才会被写入文件,因此最后一个账号注销时才算当前账户注销;因此,历史文件中只会记录最后一个注销账户的命令。

3 命令查找顺序

当用户在终端中输入一个命令后,系统会按照如下顺序查找命令: 1. 以输入命令的相对路径/绝对路径查找命令;若未找到,则进行下一步; 2. 通过alias查找命令,若未找到进行下一步: 3. 查找bash内置的命令(builtin); 4. 通过环境变量$PATH查找所有路径中第一个出现的命令;

4 登录欢迎信息

当我们登录系统时,会看到一大串信息,大概像这样:

Last login: Thu Aug 11 20:39:11 2016 from 218.94.83.132

Welcome to aliyun Elastic Compute Service!

这个信息分成两段,第一段显示一些动态信息,如上次登录时间、登录IP等;第二段显示静态信息。这些信息都可以进行设置。

4.1 设置动态信息

动态信息在/etc/issue中设置,它的语法和设置命令提示符PS1有写类似,不同的特殊字符代表不同的动态信息。

4.2 设置静态信息

静态信息在/etc/motd中设置,可以将系统公告写于此。

5 bash的环境配置文件

5.1 什么是bash的环境配置文件?

通过命令设置的所有变量、别名只有在本次登录期间内有效,一旦注销,这些信息也随之消失。若要长久保留,必须要将这些信息写入指定文件中,当系统启动或用户登录时会自动加载这些文件,将这里的变量、别名写入内存,这些文件就是bash环境配置文件。

5.2 login shell与non-login shell的区别?

login shell和non-login shell是两种shell登录的方式,它们登录后加载的环境配置文件有所不同。

5.2.1 login shell

在获取bash前需要进行一套完整的登录过程,这个登录过程就称为login shell。所谓“完整的登录过程”指需要输入用户名和密码。

5.2.2 non-login shell

获取bash不需要输入密码的登录过程称为non-login shell。如在bash中直接输入bash,从而打开一个子bash,这个过程不需要输入密码,因此称为non-login shell。

5.3 bash的环境配置文件

  • /etc/profile:系统级的环境变量(login shell才会读) 该文件存放系统级环境变量,所有的用户都会拥有,一般不建议修改这个文件。
  • ~/.bash_profile:用户个人的环境变量(login shell才会读) 当/etc/profile中的环境变量加载完毕后就会加载本文件,本文件中定义了当前用户的环境变量。
  • ~/.bashrc:non-login shell会读取的环境配置文件 当用户以non-login方式登录后,只会加载这个文件,该文件会对一些操作加上安全询问:
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias sshmy='ssh root@115.28.217.42'
alias ll='ls -al'

这个文件不管哪种登录方式都会被加载,因此这里可以存放别名。

  • /etc/man.conf:设置man的存放路径 如果使用源码安装软件的话(非rpm、yum),一般软件会安装在自定义的目录中(一般为/usr/local/软件名)。那么软件中的man文件就无法被系统找到,从而无法通过“man+命令”找到这个软件的命令帮助文档。我们需要手动将该软件的man目录添加到/etc/man.conf中去,从而执行“man+命令”就能找到这个目录的帮助文档。
  • ~/.bash_history:存储用户历史命令
  • ~/.bash_logout:记录注销后系统执行的操作

6 bash通配符和特殊字符

6.1 通配符

符号

含义

*

代表任意多个字符

?

代表一个字符

[]

[abcd]:代表该范围内的一个字符

[-]

[a-z]:代表a-z之间的一个字符

[^]

[^a-z]:代表除了a-z以外的所有字符

6.2 特殊字符

符号

含义

#

注释

\

转移字符,将特殊字符转为普通字符

;

分隔多个目录,使得依次执行

~

用户主目录

$

变量的起始符

&

将目录置于后台执行

!

/

目录分隔符

,>>

数据流重定向

<,<<

数据流重定向

不含变量置换功能

“”

含有变量置换功能

中间为待执行的命令,和$()一致

()

中间为子shell的起始和结束

{}

中间为命令块

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏零基础使用Django2.0.1打造在线教育网站

零基础使用Django2.0.1打造在线教育网站(十一):登录页面实现

努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

1861
来自专栏ionic3+

brew和npm小记

在Ubuntu中,常用apt-get来管理安装应用,与之对应,在Mac的OSX系统常用的是Homebrew,简称brew,使用上有点像npm。

902
来自专栏圣杰的专栏

VSTS 执行git pull报错问题修复

因此我们在执行git pull之前添加一个Command Line指令去执行git config即可,具体配置如下:

482
来自专栏xcywt

《Linux命令行与shell脚本编程大全》第十五章 呈现数据

15.1 理解输入和输出 现在知道两种显示脚本输出的方法 1)在显示器屏幕上显示 2)将输出文件重定向到文件中 15.1.1 标准文件描述符 Linux系统将每...

2006
来自专栏北京马哥教育

ansible常用模块简单介绍

本篇介绍下常用的模块。根据官方的分类,将模块按功能分类为:云模块、命令模块、数据库模块、文件模块、资产模块、消息模块、监控模块、网络模块、通知模块、包管理模块、...

830
来自专栏along的开发之旅

linux关于bashrc与profile的区别

其实打开~/.profile, ~/.bashrc和~/.bash_profile文件,我们就可以看到区别. 1.首先说~/.profile: 这里有一...

761
来自专栏lgp20151222

SVN错误:SVN Working copy XXX is too old

这是因为使用了低版本的svn生成了.svn内文件内容,但是,使用高版本svn同步时便出现该问题。

661
来自专栏pangguoming

使用sshfs挂载远程服务器目录

服务器日志查看,是开发人员和服务器运维人员在工作中经常会遇到的一件事情,只有一台服务器时,比较好办,直接登录服务器使用tail -f file-path 命令就...

1324
来自专栏别先生

'mysql' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

1、C:\Users\Aiyufei>mysql -h 127.0.0.1 -u root 'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件。...

823
来自专栏Java后端技术

原来实现项目多环境打包部署是如此的简单

   在软件开发和部署过程中,我们的软件往往需要在不同的运行环境中运行,例如:开发人员本地开发环境、测试团队的测试环境、生产仿真环境、正式生产环境,不同的公司可...

723

扫码关注云+社区