**环境**
[TOC]
## 第12章shell`history ![!] alias unalias`
12.1 查看命令行历史`history`
12.2 再次运行最近输入的命令`!!`
12.3 使用数字再次运行之前的命令`![##]`
12.4 使用字符串再次运行之前的命令`![sting]`
12.5 搜索之前输入的命令并运行`^-r(Ctrl+r)` `^-s(Ctrl+s)` `^-g(Ctrl+g)`
12.6 显示所有命令的别名`alias`
12.7 查看特定命令的别名`alias [aliasName]`
~~~
$ alias wgetpage
alias wgetpage="wget --html-extension --recursive --convert-links --page-requisites --no-parent"
~~~
12.8 创建新的临时别名`alias [aliasName]="[command]"`
在命令行中使用`alias`时,应该注意几点:
* 别名中不能包含有其他含义的等号`=`因为在定义别名时,会在名称后面立即跟上一个等号。 不过,在别名的实际内容中可以使用等号。
* 创建的别名只在当前会话有效时才存在。 退出会话后,别名也就不存在了。
12.9 创建新的永久别名`alias [aliasName]="[command]"`
如果想让别名能够在不同的shell会话中使用,就需要把它们添加到shell用来存储别名的文件中。
大多数情况下,这个文件是`.bashrc` 或`.bash_aliases`。
不管使用哪个文件,编辑它们时都要保持谨慎,因为错误的编辑会在以后登录时造成麻烦。 如果确实非常谨慎,可以在编辑文件之前先创建备份,这样才可以做到有备无患。
>[warning] 如何找出应该使用哪个文件保存别名?
> 1. 输入`ls -a ~`如果在结果中看到`.bash_aliases`,就使用这个文件;否则,可查看`.bashrc`,确定在其中是否定义了其他别名(然后表明使用`.bash_aliases`)。
> 2. 如果在`.bashrc`文件中没有看到任何别名,就可看一下`.profile`文件,偶尔也会用到该文件。
要在`.bash_aliases` 中添加新的别名,可使用首选的文本编辑器打开该文件,然后加入如下的一行:
`alias lsd="ls -d*/"`
保存文件并关闭,再重新加载该文件
`source ~/.bash_aliases`
新的别名就生效了。
12.10 删除别名`unalias`
`unalias`仅仅删除命令行中定义的别名。
要删除`.bash_aliases` 中定义的别名可以:
1. 删除别名定义的内容;
2. 用`#`注释定义别名的内容。
12.11 创建新的临时函数
如果在命令行上创建函数(毕竟这就是创建临时函数的方式)
`function [functionName] {}`
`[functionName] () {}`
可在单独一行中创建简短的、临时的函数
~~~
$ mkcd () { mkdir -p "$l"; cd "$l";}
$ mkcd lovecraft
$ pwd
/home/scott/lovecraft
~~~
如上述示例所示,首先使用`mkdir -p`创建新的目录,然后使用`cd`命令进入该目录。
注意:
* 使用单行方法,则必须在每个命令后面加上分号。
* 函数中的`$l`是一个定位参数,该参数会替换为函数名后输入的第一个实参。
函数也可以延伸到多行。 输入新函数的第一行并按Enter键之后,则会出现形如`>`的二级提示
符。`bash` 使用此提示符表明其需要更多输入才可以完成命令。例如:
~~~
$ mkcd () {
> mkdir -p "$l"
> cd "$l"
> }
~~~
在此例中,因为正在创建函数,所以`bash`会等待用户最终输入`}`并按下 Enter键。 在此之前,每当你输入函数的代码行并按Enter 键,随后一行都会从`>`开始,表明`bash`仍然在等待输入。
通过命令行创建的函数都只在shell会话活动期间才生效。一旦注销会话,该函数就会消失。
12.12 创建新的永久函数
??
12.13 显示所有函数
??
12.14 删除函数`unset `
??
12.15 何时使用别名以及何时使用函数
别名和函数都是随shell一起载入内存(现代计算机如此健全,函数占用的内存很少,因此你不需要担心载入内存带来的负面影响),并且都只能由当前的 shell 使用,因此只会影响目前使用的 shell环境(这一点不同于脚本)。
实际上,官方GNUBash 参考手册对于别名有如下说明:“从几乎每种用途来说,shell 中的函数都是比别名更优先的选择。“原因是:
* bash始终先执行函数后执行别名。
* 别名用于将长命令转变为更短、更容易记住的名称(例如,`alias wgetpage="wget --html-extension --recursive --convert-links --page-requisites--no-parent"`),或者用于将所需的实参添加到命令上(例如 `alias lsd="ls -d*/"`)。
* 函数面向更长或更复杂的命令序列,通常还带有逻辑和循环。
别名和函数重要的区别在于处理实参的方式:
* 别名基本上会将实参以输入的相同顺序直接传递到别名命令的末尾。
* shell函数可捕获实参,然后重新排列、测试、删除和操作这些实参。
`bash` 将实参置于别名中命令的末尾。
~~~
$ alias lstest="ls -l $l | grep tar"
$ lstest /bin
grep: /bin: Is a directory
$ unalias lstest
~~~
此代码执行失败的原因是:因为`bash`自动将实参`/bin`附加到末尾,即`gep tar`的后面。
因此,不是创建`ls -l /bin | grep ta`,而是实际地构造`ls -l |grep tar /bin`。这就是grep报告错误的原因:你告诉该命令在目录名中查找单词“tar”,这将无法找到;而改为在文件或文件列表中查找时,就可成功找到。
`bash` 将实参置于函数中的对应位置。
~~~
$ lstest () {ls -l $l | grep tar;}
$ lstest /bin
-rwxr-xr-x root root tar*
-rwxr-xr-x root root unicode start*
~~~
## 第13章 监视系统资源`uptime` `ps` `top` `lsof` `free` `df` `du`
13.1 显示计算机的持续运行时间`uptime`
13.2 查看正在运行的所有进程`ps aux`
表13-1 STAT列中字母的含义??
对于`ps`命令(process status),为了让操作更为方便统一,对于他的选项不要求用连字符。各选项的意义如下:
`a`:所有用户;
`u`:以面向用户的格式显示,或显示拥有每个进程的用户;
`x`:没有控制终端设备或终端屏幕的进程,“显示每个进程”的另一种说法。
`-w`:wrap,换行
13.3 查看进程树`ps axjf`
Linux系统中,所有的进程最初都来自`init`,它是所有进程之母,其PID始终为1。
各选项的意义如下:
`a`:所有用户;
`x`:没有控制终端设备或终端屏幕的进程,“显示每个进程”的另一种说法;
`j`:用于BSD作业控制格式,它确定了你所看到的列;
`f`:forest,源自`ASII art forest`。
![](https://box.kancloud.cn/abebacc9db225f0995fd9e7dc09a4a89_1149x1008.jpg)
注意其中的`PPID`列,该列为Parent Process ID(父进程编号)是创建PID进程的进程编号。
有了`PID`和`PPID`,就可以终止任何失控的进程。
查看进程树的另一种方式:`pstree`。但并不是所有系统都包含该命令,可能需要进行安装。
![](https://box.kancloud.cn/c22f899cc3b86f091d95d676568259bf_685x367.jpg)
13.4 查看特定用户拥有的进程`ps U [userName]`
13.5 终止正在运行的进程`kill` `killall`
表13-2 与kill命令关联的常用信号??
13.6 查看运行中进程的动态更新列表`top`
??
13.7 列出打开的文件`lsof`
??
13.8 列出某个用户打开的文件`lsof -u`
??
13.9 列出使用特定文件的用户`lsof [file]`
??
13.10 列出特定程序的进程`lsof -c [program]`
??
13.11 显示系统RAM的相关信息`free`
??
13.12 显示文件系统的磁盘使用情况`df`
??
13.13 报告目录使用的文件空间`du`
??
13.14 只报告目录使用的总空间`du -s`
??
## 第14章 安装软件
14.1 安装软件包(RPM)
14.2 删除软件包(RPM)
14.3 安装软件包及其依赖程序(RPM)
14.4 删除软件包及其依赖程序(RPM)
14.5 升级软件包及其依赖程序(RPM)
14.6 查找可供下载的软件包(RPM)
14.7 安装软件包(DEB)
14.8 删除软件包(DEB)
14.9 安装软件包及其依赖程序(DEB)
14.10 删除软件包及其依赖程序(DEB)
14.11 升级软件包及其依赖程序(DEB)
14.12 查找可供下载的软件包(DEB)
14.13 清除不再需要的安装包(DEB)
14.14 处理APT相天的错误(DEB)
- WebAPP
- Linux Command
- 入门
- 处理文件
- 查找文件单词
- 环境
- 联网
- Linux
- Linux目录配置标准:FHS
- Linux文件与目录管理
- Linux账号管理与ACL权限设置
- Linux系统资源查看
- 软件包管理
- Bash
- Daemon/Systemd
- ftp
- Apache
- MySQL
- Command
- Replication
- mysqld
- remote access
- remark
- 限制
- PHP
- String
- Array
- Function
- Class
- File
- JAVA
- Protocals
- http
- mqtt
- IDE
- phpDesigner
- eclipse
- vscode
- Notepad++
- WebAPI
- Javasript
- DOM
- BOM
- Event
- Class
- Module
- Ajax
- Fetch
- Promise
- async/await
- Statements and declarations
- Function
- Framwork
- jQurey
- Types
- Promise
- BootStrap
- v4
- ThinkPHP5
- install
- 定时任务
- CodeIgniter
- React.js
- node.js
- npm
- npm-commands
- npm-folder
- package.json
- Docker and private modules
- module
- webpack.js
- install
- configuration
- package.json
- entry
- modules
- plugins
- Code Splitting
- loaders
- libs
- API
- webpack-cli
- Vue.js
- install
- Compile
- VueAPI
- vuex
- vue-router
- vue-devtools
- vue-cli
- vue-loader
- VDOM
- vue-instance
- components
- template
- Single-File Components
- props
- data
- methods
- computed
- watch
- Event-handling
- Render Func
- remark
- 案例学习
- bootstrap-vue
- modal
- fontAwesome
- Hosting Font Awesome Yourself
- using with jquery
- using with Vue.js
- HTML
- CSS
- plugins
- Chart.js
- D3.js
- phpSpreadSheet
- Guzzle
- Cmder
- Git
- git命令
- git流程
- Postman
- Markdown
- Regular Expressions
- PowerDesigner
- 附录1-学习资源