《鸟哥的linux私房菜 基础篇》第十一章读书笔记(部分)

第十一章 认识与学习bash

为什么学习shell:不同固定distribution中的shell都是一样的;远程管理中,命令行界面比较快;管理系统很方便

我们常用的一类shell为Bourne Again SHell (bash).

支持的shell记录在/etc/shells文件中
登陆取得的shell记录在/etc/passwd文件中,不同的用户所取得的shell是不一样的。root一般为bash。

history命令,可以查询曾经执行过的命令
~/.bash_history中记录了前一次登陆以前所执行过的命令,至于这一次登陆所执行的命令都被暂存在临时内存中,当你成功注销系统后,该命令才会记录到.bash_history中。但无法记录时间

[tab]接在一串命令的第一个字后面,则为命令补全;
[tab]接在一串命令的第二个字后面,则为文件不全;

命名别名设置功能( alias):在命令行中输入alias,既可以知道当前的命名别名有哪些,也可以直接执行命令来设置命名别名,例如alias lm='ls -al'
取消命令别名: unalias lm

通配符:例如ls -l /usr/bin/X*  该目录下查找以X开头的文件

如果命令行太长,可以利用反斜杠\来进行换行,其实是一个转义[\enter],中间没有空格。

echo,变量的显示,需在变量前加上$符号,echo $variable,如echo $PATH或echo ${PATH}也可以
设置变量的内容:变量名=内容 即可
等号两边若有空格,需要用双引号或单引号括起来,双引号保留了原本的特性,单引号里面为一般字符(纯文本)
变量名开头不能为数字

为变量增加内容:如PATH="$PATH":/home/bin
若该变量需要在其他子进程执行,则需要以 export来使变量称为环境变量; export PATH
通常大写字符为系统默认变量,自行设置变量可以使用小写字符
取消变量:unset 变量名称,如unset myname

#bash进入子进程。这里的子进程是在目前这个shell的情况下,去打开另一个新的shell,新的shell就是子进程。一般的状态下,父进程的自定义变量是无法再子进程内使用的,但通过export将变量编程环境变量后,就能够在子进程下使用了。

反单引号(`)之内的命令将会被先执行,而其执行出来的结果将作为外部的输入信息。

env  查看环境变量。它是environment的缩写
  • HOME  用户的主文件夹cd ~
  • SHELL  使用的shell是哪个程序,默认/bin/bash
  • HISTSIZE  记录历史命令的条数设置
  • MAIL  在收信时系统会去读取邮箱文件
  • PATH  执行文件查找的路径,目录顺序也很重要
  • LANG  语系数据。一般中文编码为zh_CN.UTF-8
  • RANDOM  "随机数"的变量。随机数生成器即/dev/random文件,可以挺过这个随机数文件相关的变量($RANDOM)来随机取得随机数值。BASH下,它的范围是0~32767。如果要去0~9之间的数值,利用declare:declare -i number=$RAMDOM*10/32768 ; echo $number
set  查看所有变量(包括环境变量与自定义变量)

$ 本身也是个变量,表示本shell的PID,echo $$。
? 也是一个特殊的变量,它是上一个执行的命令所回传的值。上一个命令成功执行,回传为0,则echo $?会显示0.否则显示相应的错误代码
 
当你登陆linux并取得一个bash之后,这个bash就是一个独立的进程。接下来你在这个bash下面所执行的任何命令都是由这个bash所衍生出来的,那些被执行的命令就被称为子进程。
《鸟哥的linux私房菜 基础篇》第十一章读书笔记(部分)_第1张图片

环境变量与自定义变量的区别在于是否会被子进程所继续使用。
子进程仅会继承父进程的环境变量,子进程不会继承父进程的自定义变量。
export 变量名称”  设置环境变量   
若没有接变量名称,则会把所有的环境变量显示出来


locale -a 显示linux支持的语系
locale 不加参数,显示当前的语系信息
语系文件放置在/usr/lib/locale/这个目录中。整体系统默认的语系定义在/etc/sysconfig/i18n文件中

变量键盘读取、数组与声明:read, array, declare
read [-pt] variable,由键盘读取变量的内容
-p:后面接提示符
-t:后面接等待的秒数,不会一直等待用户

ulimit命令:可以限制用户的某些系统资源,包括打开的文件数量、可以使用的CPU时间、可以使用的内存总量等。

变量内容的删除、替代与转换,暂时略过

路径或命令查找顺序:先alias,再builtin(bash内置的),再由$PATH找到路径

bash的登录与欢迎信息:/etc/issue, /etc/motd
bash环境配置文件,终端机的环境设置stty,set,暂时略过


通配符
*   代表0个到无穷多个任意字符
? 代表一定有一个任意字符
还有[], [-], [^]三个

特殊符号
#  批注符号,常用在script中,相当于注释
\   转义符号
|   管道pipe,分割两个管道命令的界定
; 连续命令执行分隔符
~  用户的主文件夹
$   使用变量前导符,即变量之前需要加的变量替代值
&   作业控制job control,将命令变成背景下工作
>, >>  数据流重定向,输出导向,分别是替换与累加
<, <<  数据流重定向,输入导向
‘’    单引号,不具有变量置换功能
“”   双引号,具有变量置换功能
``  两个`中间为可以先执行的命令,也可以使用$()
()   在中间位子shell的起始于结束
{}   在中间为命令块的组合

数据流重定向
  1. 标准输入stdin,代码为0,使用<或<< , <<代表结束输入的意思,当输入为<<后面的内容时,就是结束了输入
  2. 标准输出stdout,代码为1,使用>或>>,>>为累加,>会覆盖原先的内容
  3. 标准错误输出stderr,代码为2,使用2>或2>>
/dev/null垃圾桶黑洞设备,它可以吃掉任何导向这个设备的信息

将命令的数据全部写入名为list的文件中:
错误:find /home -name .bashrc > list 2>list  不同文件的时候这样用,相同文件下,两条数据可能会交叉写入该文件内,造成次序混乱
正确:find /home -name .bashrc > list 2>&1
正确;find /home -name .bashrc &> list

$?命令回转码
cmd1 && cmd2  若cmd1执行完毕且正确执行($?=0),则开始执行cmd2
                        若cmd1执行完毕且为错误($?≠0),则cmd2不执行
cmd1 || cmd2    若cmd1执行完毕且正确执行($?=0),则cmd2不执行
                        若cmd1执行完毕且为错误($?≠0),则开始执行cmd2

判断式:command1 && command2 || command3,一般这样放置,且从左至右来判断,command2和command3会防止肯定可以执行成功的命令

管道命令
界定符号:“|”。
管道命令仅能处理经由前面一个命令传来的正确信息,也就是standard output的信息,对于standard error并没有直接处理的能力。
《鸟哥的linux私房菜 基础篇》第十一章读书笔记(部分)_第2张图片

在每一个管道后面接的第一个数据必定是“命令”。而这个命令必须要能够接受standard input的数据才行。

选取命令
cut, grep

cut是在一行信息中取出某部分我们想要的,grep是分析一行的信息,若当中有我们所需要的信息,就将该行拿出来。
grep [-acinv] [--color=auto] '查找字符串' filename
-a   将binary文件以test文件的方式查找数据
-c   计算找到'查找字符串'的次数
-i    忽略大小写的不同
-n   顺便输出行号
-v   反向选择,即显示出没有'查找字符串'内容的那一行
--color=auto 可以将找到的关键字部分加上颜色显示

排序命令:sort, wc, uniq
双向重定向:tee
字符转换命令:tr, col, join, paste, expand
参数代换:xargs
减号 - 的用途 

你可能感兴趣的:(linux命令,读书笔记,linux)