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的起始和结束 |
{} |
中间为命令块 |
- 采访Philipp Crocoll:安卓平台上整合Java和C#
- “AS3.0高级动画编程”学习:第一章高级碰撞检测
- AI分析师PK人类分析师,结果竟然是……
- 纯代码修改WordPress 默认 Gravatar 头像的方法
- 这些行业的饭碗要被机器人抢了 再不努力就被它们PK掉了!
- DeveWork.com 上线“前端工具箱”(附源码下载)
- Debug和Release之本质区别
- ArgoUML -- 开源UML 建模工具
- 性能分析工具-PerfView
- c#测试字符串是否为GUID的几种方法
- 编译错误CS1595
- 分享一款带尖角浮出 公告栏 样式
- 在asp.net页面上得到Castle容器的实例
- WordPress自带TinyMCE编辑器相关功能增强
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 《闲扯Redis十》Redis 跳跃表的结构实现
- 图数据库HugeGraph源码解读 (1) —— 入门介绍
- String及StringTable(一):String源码解读
- 四、原型模式与建造者模式详解
- LeetCode 23. 移动零
- LeetCode 11. 盛最多水的容器
- 29.MyBatis体系结构与工作原理
- 五、代理模式详解
- 六、门面模式与装饰器模式详解
- 七、享元模式与门面模式详解
- 如何白嫖3个月的JetBrains全家桶(包括Java神器IDEA)
- 潘石屹用Python解决100个问题 | 打印菱形
- 八、适配器模式与桥接模式详解
- 九、委派模式与模板模式详解
- 白嫖JetBrains全家桶第二波与第三波