Linux的BASH操作环境和设置

管理整个计算机硬件的其实是操作系统的核心 (kernel),我们一般使用者就只能通过 shell 来跟核心沟通,以让核心达到我们所想要达到的工作。

1、Bash shell的功能

1)bash 主要的优点:

  • 命令编修能力
  • 命令与文件补全功能:([tab] 按键的好处)
  • 命令别名设置功能: (alias)
  • 程序化脚本: (shell scripts)
  • 万用字符: (Wildcard)

2)查询指令是否为 Bash shell 的内置命令: type

格式:type [-tpa] name

选项与参数:

        :不加任何选项与参数时,type 会显示出 name 是外部指令还是 bash 内置指令

        -t :当加入 -t 参数时,type 会将 name 以下面这些字眼显示出他的意义:         

                file :表示为外部指令;

                alias :表示该指令为命令别名所设置的名称;

                builtin :表示该指令为 bash 内置的指令功能;

        -p :如果后面接的 name 为外部指令时,才会显示完整文件名;

        -a :会由 PATH 变量定义的路径中,将所有含 name 的指令都列出来,包含 alias

2、Shell 的变量功能

1)”变量“就是让某个特定字符串代表不固定的内容。

  • 变量的取用:echo

  •  “设置”或者是“修改” 某 个变量的内容

 变量名称 myname 的内容就带有 VBird 这个数据。在 bash 当中,当一个变量名称尚未被设置时,默认的内容是“空”的。 另外,变量在设置时,还是需要符合某些规定的,否则会设置失败。

  • 利用变量进入目前核心的模块目录:

 由于每个 distributions 的这个值都不相 同,但是我们却可以利用 uname -r 这个指令先取得版本信息。就可以通过上面指令 当中的内含指令 $(uname -r) 先取得版本输出到 cd。

  • 取消变量设置:unset

  •  双引号仍然可以保有变量的内容,但单引号内仅能是一般字符 ,而不会有特殊符号。

  • 在一串指令中, 反单引号( )在 之内的指 令将会被先执行,而其执行出来的结果将做为外部的输入信息。

 2)环境变量功能

  • 查看系统默认的环境变量:env 与 export

关键变量的功能:

  1.  HOME 代表使用者的主文件夹。
  2. SHELL 告知我们,目前这个环境使用的 SHELL 是哪支程序。
  3. HISTSIZE 这个与“历史命令”有关,记录的“笔数”则是由这个值来设置的
  4. MAIL 当我们使用 mail 这个指令在收信时,系统会去读取的邮件信箱文件 (mailbox)。
  5. PATH 就是可执行文件搜寻的路径
  6. LANG 就是语系数据
  7. RANDOM 这个玩意儿就是“随机乱数”的变量
  • 用 set 观察所有变量 (含环境变量与自订变量)

 上头那些变量当中,大概有这几个比较重要

PS1:(提示字符的设置)

$:(关于本 shell 的 PID)

?:(关于上个执行指令的回传值)

  • export: 自订变量转成环境变量

要让该变量 内容继续的在子程序中使用

语系变量 :locale

  •  整体系统默认的语系定义

 在 CentOS 7 当中,你要让 LC_ALL 生效时,得要使用 export 转成环境变量才行

  • 变量内容键盘读取:read

read [-pt] variable

选项与参数:

-p :后面可以接提示字符!

-t :后面可以接等待的“秒数!

 3)文件系统及程序的限制关系: ulimit

ulimit [-SHacdfltu] [配额]

选项与参数:

-H :hard limit ,严格的设置,必定不能超过这个设置的数值;

-S :soft limit ,警告的设置,可以超过这个设置值,但是若超过则有警告讯息。 在设置上,通常 soft 会比 hard 小,举例来说,soft 可设置为 80 而 hard 设置为 100,那么你可以使用到 90 (因为没有超过 100),但介于 80~100 之间时, 系统会有警告讯息通知你!

-a :后面不接任何选项与参数,可列出所有的限制额度;

-c :当某些程序发生错误时,系统可能会将该程序在内存中的信息写成文件(除错用), 这种文件就被称为核心文件(core file)。此为限制每个核心文件的最大容量。

-f :此 shell 可以创建的最大文件大小(一般可能设置为 2GB)单位为 KBytes

-d :程序可使用的最大断裂内存(segment)容量;

-l :可用于锁定 (lock) 的内存量

-t :可使用的最大 CPU 时间 (单位为秒)

-u :单一使用者可以使用的最大程序(process)数量。

eg1:列出你目前身份(假设为一般帐号)的所有限制数据数值

3、对命令设置别名和历史命令

1)对命令设置别名: alias, unalias

 删除 lm 命令别名

 2)查看历史纪录:history

  • history 的用法:

        history [n]

        history [-c]

        history [-raw] histfiles

选项与参数:

n :数字,意思是“要列出最近的 n 笔命令列表”的意思!

-c :将目前的 shell 中的所有 history 内容全部消除

-a :将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles , 则默认写入 ~/.bash_history

-r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;

-w :将目前的 history 记忆内容写入 histfiles 中!

  •  执行历史命令

        !number

        !command

        !!

选项与参数:

number :执行第几笔指令的意思;

command :由最近的指令向前搜寻“指令串开头为 command”的那个指令,并执行;

!! :就是执行上一个指令(相当于按↑按键后,按 Enter

4、Bash Shell 的操作环境详解

1)一个指令被执行后搜寻顺序

1. 以相对/绝对路径执行指令,例如“ /bin/ls ”或“ ./ls ”;

2. 由 alias 找到该指令来执行;

3. 由 bash 内置的 (builtin) 指令来执行;

4. 通过 $PATH 这个变量的顺序搜寻到的第一个指令来执行。

先 alias 再 builtin 再由 $PATH 找到 /bin/echo 。

2) bash 的环境配置

  • 一般来说,login shell 其实只会读取这两个配置文件:

1. /etc/profile:这是系统整体的设置,你最好不要修改这个文件;

2. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人设置,你要改自己的数据,就写入这里!

  • /etc/profile (login shell 才会读)

bash 的 login shell 情况下所读取的整体环境配置文件其实只有 /etc/profile,但是 /etc/profile 还会调用出其他的配置文件.

  • ~/.bash_profile (login shell 才会读)

bash 在读完了整体环境设置的 /etc/profile 并借此调用其他配置文件后,接下来则是会读取使 用者的个人配置文件。 在 login shell 的 bash 环境中,所读取的个人偏好配置文件其实主要 有三个,依序分别是:

1. ~/.bash_profile

2. ~/.bash_login

3. ~/.profile

其实 bash 的 login shell 设置只会读取上面三个文件的其中一个, 而读取的顺序则是依照上 面的顺序。也就是说,如果 ~/.bash_profile 存在,那么其他两个文件不论有无存在,都不会 被读取。

 由于 PATH 在 /etc/profile 当中已经设置过,所以在这里就以累加的方式增加使用者主文件夹下的 ~/bin/ 为额外的可执行文件放置目录。这也就是说,你可以将自己创建的可执行文件放置到你 自己主文件夹下的 ~/bin/ 目录,那就可以直接执行该可执行文件而不需要使用绝对/相对路 径来执行该文件。

  • source :读入环境配置文件的指令

source 或小数点 (.) 都可以将配置文件的内容读进来目前的 shell 环境中,而不需要登入登出操作使设置生效。

5、数据流重导向

当你执行一个指令操作后,会有三种执行结果:标准输入、标准输出、标准错误输出。

标准输出指的是“指令执行所回传的正确的讯息”,而标准错误输出可理解为“ 指令 执行失败后,所回传的错误讯息”。

当有多个数据输出到屏幕上时,可以用数据流重定向分别传送到其他的文件或设备。而分别传送所用的特殊字符则如下所示:

  • 1. 标准输入 (standard input) :代码为 0 ,使用 <(取代键盘的输入) 或 <<(结束的输入字符) ;
  • 2. 标准输出 (standard output):代码为 1 ,使用 > (覆盖)或 >>(累加) ;
  • 3. 标准错误输出(standard error output):代码为 2 ,使用 2> (覆盖)或 2>>(累加) ;

  •  /dev/null 垃圾桶黑洞

如果我知道错误讯息会发生,所以要将错误讯息忽略掉而不显示或储,存这个 /dev/null 可以吃掉任何导向这个设备的信息。

 2)执行命令的判断依据: ; , &&, ||

  • cmd ; cmd (不考虑指令相关性的连续指令下达)

  • $? (指令回传值) 与 && 或 ||
指令下 达情况说明
cmd1 && cmd21. 若 cmd1 执行完毕且正确执行($?=0),则开始执行 cmd2。 2. 若 cmd1 执行完毕且为错误 ($?≠0),则 cmd2 不执行。
cmd1 || cmd21. 若 cmd1 执行完毕且正确执行($?=0),则 cmd2 不执行。 2. 若 cmd1 执 行完毕且为错误 ($?≠0),则开始执行 cmd2。

如果 /tmp/abc 不存在时,touch 就不会被执行,若 /tmp/abc 存在的话,那么 touch 就会开始执行.

 6、管线命令:pipe

  • 管线命令仅会处理 standard output,对于 standard error output 会予以忽略
  • 管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理才行。

1)、撷取命令: cut, grep

  • cut用法(一行讯息当中,取出某部分我们想要的):

        cut -d'分隔字符' -f fields  用于有特定分隔字符

        cut -c 字符区间                 用于排列整齐的讯息

选项与参数:

-d :后面接分隔字符。与 -f 一起使用;

-f :依据 -d 的分隔字符将一段讯息分区成为数段,用 -f 取出第几段的意思;

-c :以字符 (characters) 的单位取出固定字符区间;

  • grep用法(分析一行讯息, 若当中 有我们所需要的信息,就将该行拿出来):

        grep [-acinv] [--color=auto] '搜寻字串' filename

选项与参数:

-a :将 binary 文件以 text 文件的方式搜寻数据

-c :计算找到 '搜寻字串' 的次数 -i :忽略大小写的不同,所以大小写视为相同

-n :顺便输出行号

-v :反向选择,亦即显示出没有 '搜寻字串' 内容的那一行!

--color=auto :可以将找到的关键字部分加上颜色的显示喔!

 

 1)排序命令: sort, wc, uniq

  • sort用法,可以依据不同的数据型态来排序。

        sort [-fbMnrtuk] [file or stdin]

选项与参数:

-f :忽略大小写的差异,例如 A 与 a 视为编码相同;

-b :忽略最前面的空白字符部分;

-M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;

-n :使用“纯数字”进行排序(默认是以文字体态来排序的);

-r :反向排序;

-u :就是 uniq ,相同的数据中,仅出现一行代表;

-t :分隔符号,默认是用 [tab] 键来分隔;

-k :以那个区间 (field) 来进行排序的意思

eg:个人帐号都记录在 /etc/passwd 下,请将帐号进行排序。

eg :/etc/passwd 内容是以 : 来分隔的,我想以第三栏按数字类型来排序,

  •  uniq用法(排序完成了,想要将重复的数据仅列出一个显示)

        uniq [-ic]

选项与参数:

-i :忽略大小写字符的不同;

-c :进行计数

eg:使用 last 将帐号列出,仅取出帐号栏,进行排序后仅取出一位,并且要知道每个人的登陆总次数。

  •  wc用法(可以知道文件里面有多少字?多少行?多少字符?):

        wc [-lwm]

选项与参数:

-l :仅列出行;

-w :仅列出多少字(英文单字);

-m :多少字符;

ge:那个 /etc/man_db.conf 里面到底有多少相关字、行、字符数?

 3)双向重导向: tee

tee 会同时将数据流分送到文件去与屏幕:

        tee [-a] file

选项与参数:

-a :以累加 (append) 的方式,将数据加入 file 当中

ge:这个范例可以让我们将 last 的输出存一份到 last.list 文件中;

 4)字符转换指令:tr, col, join, paste, expand

  • tr

tr 可以用来删除一段讯息当中的文字,或者是进行文字讯息的替换。

        tr [-ds] SET1 ...

选项与参数:

-d :删除讯息当中的 SET1 这个字串;

-s :取代掉重复的字符!

eg1:将 last 输出的讯息中,所有的小写变成大写字符:

eg2 :将 /etc/passwd 输出的讯息中,将冒号 (:) 删除

  •  col

将 [tab] 按键取代成为空 白键

        col [-xb]

选项与参数:

-x :将 tab 键转换成对等的空白键

  • join

在处理两个文件之间的数据, 而且, 主要是在处理“两个文件当中,有 "相同数据" 的那一行,才将他加在一起”的意思。

        join [-ti12] file1 file2

选项与参数:

-t :join 默认以空白字符分隔数据,并且比对“第一个字段”的数据, 如果两个文件相同,则将两笔数据联成一行,且第一个字段放在第一个!

-i :忽略大小写的差异;

-1 :这个是数字的 1 ,代表“第一个文件要用那个字段来分析”的意思;

-2 :代表“第二个文件要用那个字段来分析”的意思。

  • paste

直接“将两行贴在一起,且中间以 [tab] 键隔开”。

        paste [-d] file1 file2

选项与参数:

-d :后面可以接分隔字符。默认是以 [tab] 来分隔的!

- :如果 file 部分写成 - ,表示来自 standard input 的数据的意思。

  • expend

这玩意儿就是在将 [tab] 按键转成空白键

        expand [-t] file

选项与参数:         

-t :后面可以接数字。一般来说,一个 tab 按键可以用 8 个空白键取代。 我们也可以自行定义一个 [tab] 按键代表多少个字符呢!        

5)分区命令: split

如果你有文件太大,导致一些携带式设备无法复制的问题。split可以帮 你将一个大文件,依据文件大小或行数来分区,就可以将大文件分区成为小文件了。

        split [-bl] file PREFIX

选项与参数:

-b :后面可接欲分区成的文件大小,可加单位,例如 b, k, m 等;

-l :以行数来进行分区。

PREFIX :代表前置字符的意思,可作为分区文件的前导文字。

eg1:我的 /etc/services 有六百多K,若想要分成 300K 一个文件

6)参数代换指令:xargs在产生某个指令的参数的

        xargs [-0epn] command

选项与参数:

-0 :如果输入的 stdin 含有特殊字符,例如 `, \, 空白键等等字符时,这个 -0 参数 可以将他还原成一般字符。这个参数可以用于特殊状态!

-e :这个是 EOF (end of file) 的意思。后面可以接一个字串,当 xargs 分析到这个字串时, 就会停止继续工作!

-p :在执行每个指令的 argument 时,都会询问使用者的意思;

-n :后面接次数,每次 command 指令执行时,要使用几个参数的意思。

当 xargs 后面没有接任何的指令时,默认是以 echo 来进行输出

eg1:将 /etc/passwd 内的第一栏取出,仅取三行,使用 id 这个指令将每个帐号内容秀出来

管线命令的重点是:“管线命令仅会处理 standard output,对于 standard error output 会 予以忽略” “管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理 才行。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值