社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 1512|回复: 0

[讨论] 每天一点私房菜--认识与学习bash

[复制链接]

3360

TA的帖子

422

TA的资源

五彩晶圆(中级)

Rank: 8Rank: 8

荣誉会员勋章

发表于 2012-11-29 13:01:50 | 显示全部楼层 |阅读模式
1、由于内核在内存中是受保护的块,因此我们必须要通过"Shell"将我们输入的命令与Kernel通信,好让Kernel 可以控制硬件来正确无误地工作。

2、学习shell的原因主要有:命令行界面的shell在各大distribution都一样;远程管理时命令行界面速度较快;shell是管理Linux系统非常重要的一环,因为Linux内很多控制都是以shell编写的。

3、系统合法的shell均写在/etc/shells文件中。

4、用户默认登录取得的shell记录于/etc/passwd的最后一个字段。

5、bash的功能主要有命令编辑功能、命令与文件补全功能、命令别名设置功能、作业控制、前台、后台控制、    程序化脚本、通配符。

6、type可以用来找到执行命令为何种类型,也可用于which相同的功能。
  [root@dell] # type [-tpa] name
   选项与参数:
       :不加任何选项与参数时,type 会显示出 name 是外部命令还是 bash 内建命令
   -t  :当加入 -t 参数时,type 会将 name 以底下这些字眼显示出他的意义:
   file    :表示为外部命令;
   alias   :表示该命令为命令别名所配置的名称;
   builtin :表示该命令为 bash 内建的命令功能;
   -p  :如果后面接的 name 为外部命令时,才会显示完整文件名;
   -a  :会由 PATH 变量定义的路径中,将所有含 name 的命令都列出来,包含 alias

7、变量就是以一组文字或符号等来替换一些设置或者是一串保留的数据。
   eg:echo ${PATH}
       unset 变量名称
       cd /lib/modules/$(uname -r)/kernel

8、变量主要有环境变量与自定义变量,或称为全局变量与局部变量。

9、使用env与export可查看环境变量,其中export可以将自定义变量转成环境变量。
   eg:env
   export 变量名称

10、set可以查看目前bash环境下的所有变量。

11、$?也为变量,是前一个命令执行完毕后的回传吗。在Linux回传码为0代表执行成功。

12、locale可用于查看语系数据。

13、可用read让用户由键盘输入变量得值。
    [root@dell ]# read [-pt] variable
     -p  :后面可以接提示字符!
     -t  :后面可以接等待的『秒数!』这个比较有趣~不会一直等待使用者啦!

14、ulimit可用以限制用户使用系统的资源情况。
    [root@dell ]# 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)数量。
    [root@dell ]# history [n]
    [root@dell ]# history [-c]
    [root@dell ]# history [-raw] histfiles
    选项与参数:
    n   :数字,意思是『要列出最近的 n 笔命令行表』的意思!
    -c  :将目前的 shell 中的所有 history 内容全部消除
    -a  :将目前新增的 history 命令新增入 histfiles 中,若没有加 histfiles ,
          则默认写入 ~/.bash_history
    -r  :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
    -w  :将目前的 history 记忆内容写入 histfiles 中!
15、bash的配置文件主要分为loginshell与non-login shell。login shell主要读取/etc/profile~/.bash_profile,non-login则仅读取~/.bashrc。

    cat /etc/issue 登录与欢迎信息
    source 配置文件名 读入环境配置文件的命令

16、通配符主要有*、?、[]等。

17、数据流重定向通过>、2>、<之类的符号将输出的信息转到其他文件或设备去。
    1)标准输入(stdin):代码0,使用<或<<;
    2)标准输出(stdout):代码1,使用>或>>;
    3)标准错误输出(stderr):代码为2,使用2>或2>>。
       >是覆盖,>>是累加
     eg:将命令的数据全部写入名为list的文件中
         find /home -name .bashrc >list 2>&1
         find /home -name .bashrc 2> /dev/null
         cat > catfile < ~/.bashrc

18、连续命令的执行可通过;&&、||等符号来处理。
   ;不考虑相关性
    cmd1 && cmd2  1. 若 cmd1 运行完毕且正确运行($?=0),则开始运行 cmd2。
                  2. 若 cmd1 运行完毕且为错误 ($?≠0),则 cmd2 不运行。
    cmd1 || cmd2  1. 若 cmd1 运行完毕且正确运行($?=0),则 cmd2 不运行。
                  2. 若 cmd1 运行完毕且为错误 ($?≠0),则开始运行 cmd2。

19、管道命令的重点是它仅会处理standard output,对于standard error output会予以忽略。管道命令必须要     能够接受来自前一个命令的数据称为standar input继续处理才行。

20、本章介绍的管道命令主要有cut,grep,sort,wc,uniq,tee,tr,col,join,paste,expand,split,     xargs
选取命令:cut grep
[root@dell ]# cut -d'分隔字符' -f fields <==用于有特定分隔字符
[root@dell ]# cut -c 字符区间            <==用于排列整齐的信息
选项与参数:
-d  :后面接分隔字符。与 -f 一起使用;
-f  :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
-c  :以字符 (characters) 的单位取出固定字符区间;

[root@dell ]# grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!

排序命令: sort, wc, uniq
[root@dell ]# sort [-fbMnrtuk] [file or stdin]
选项与参数:
-f  :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b  :忽略最前面的空格符部分;
-M  :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n  :使用『纯数字』进行排序(默认是以文字型态来排序的);
-r  :反向排序;
-u  :就是 uniq ,相同的数据中,仅出现一行代表;
-t  :分隔符,默认是用 [tab] 键来分隔;
-k  :以那个区间 (field) 来进行排序的意思

[root@dell ]# uniq [-ic]
选项与参数:
-i  :忽略大小写字符的不同;
-c  :进行计数

[root@dell ]# wc [-lwm]
选项与参数:
-l  :仅列出行;
-w  :仅列出多少字(英文单字);
-m  :多少字符;

双向重导向: tee
[root@dell ]# ls -l / | tee -a ~/homefile | more
# 要注意! tee 后接的文件会被覆盖,若加上 -a 这个选项则能将信息累加。

字符转换命令: tr, col, join, paste, expand

分割命令: split
[root@dell ]# split [-bl] file PREFIX
选项与参数:
-b  :后面可接欲分割成的文件大小,可加单位,例如 b, k, m 等;
-l  :以行数来进行分割。
PREFIX :代表前导符的意思,可作为分割文件的前导文字。
eg:cd /tmp; split -b 300k /etc/termcap termcap
关于减号 - 的用途
eg:tar -cvf - /home | tar -xvf -
上面这个例子是说:『我将 /home 里面的文件给他打包,但打包的数据不是纪录到文件,而是传送到 stdout; 经过管线后,将 tar -cvf - /home 传送给后面的 tar -xvf - 』。后面的这个 - 则是取用前一个命令的 stdout, 因此,我们就不需要使用 file 了!这是很常见的例子喔!注意注意!

[ 本帖最后由 qinkaiabc 于 2012-11-29 05:03 编辑 ]
此帖出自编程基础论坛


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-11-22 11:37 , Processed in 0.203272 second(s), 16 queries , Redis On.

快速回复 返回顶部 返回列表