bash shell设置,linux环境变量设置,-鸟哥的Linux私房菜基础版本(第二版)笔记8 | 梦回起点—试着去表达
ڼС
梦回起点—试着去表达
只为不让自己变成我讨厌的人
本站基于WordPress—主题by 设计窝
冀ICP备15003737号
梦回起点
Copyright © 2015-2018 All rights reserved.

bash shell设置,linux环境变量设置,-鸟哥的Linux私房菜基础版本(第二版)笔记8

首先强调一下,不保证所有的内容全是都是正确的,一方面下面的内容很大一部分是带着我的理解的,另一方面,字是我一个一个打上去的,所以呢肯定很有错误。如果发现错误,请随手在下面留个言,谢谢大家啦!

可以在~/.bashrc中设置一些启动就需要执行的命令 ( 下面还要介绍几个地方,但是推荐放在这里,一方面这里仅修改自己的设置,另一方面见效快,设置了退出再登录就可以了,其他地方需要重启,有的使用在tty1-7中的)
检查一下/etc/shells文件可以看到有多少可用的shell
登录取得的shell记录在/etc/passwd文件中
bash 主要优点:
     命令记忆功能
         使用↑↓功能键可以查看最近输入的命令,系统成功注销后,
         用过的命令将存入~/.bash_history
     命令与文件补全功能
         [tab]补全功能只有bash才有哦 第一个字后面是命令补全,
         第二个字后面是文件名补齐
     命令别名设置功能
         例如alias lm=’ls -al’ 用lm替换’ls -al’
     作业控制,前台,后台控制
     shell scripts的功能强大
     通配符
bash的内置命令:type
     type [-tpa] name
     选项:
         不加任何参数 type会显示出name是外部命令还是内置命令
         -t 会将name通过下面的方式显示出它的意义
             file:表示为外部命令
             alias:表示别名的命令
             builtin:表示该命令为内置命令
         -p 如果后面接的name为命令,会显示完整文件名或显示为内置命令
         -a 列出所有在PATH变量中包含name命令的路径
执行命令
     command [-opations] parameter1 parameter2
     如果命令过长,可以使用续行符\来换行输入,但\后面不能跟空格
     换行成功下一行会有>提示
bash的变量功能
     变量的获取与设置(以获取PATH为例)
         echo $PATH 或者 echo ${PAHT}
     变量设置的规则
         1.变量与变量内容之间用=连接
         2.等号两边不能直接接空格
         3.变量名只能是英文字母或数字,但不能数字打头
         4.若有空格,可是使用” 或 “”结合,双引号可以保持变量特性,
            单引号将变量解释为普通字符
         5.必要时需要用转义字符”\”将特殊字符变成一般符号
         6.在一串命令中,还需要通过其他命令提供的信息,可以使用
             “command” 例如 cd /lib/modules/uname -r/kernel
             (在一串命令中之内的命令会先执行,其执行的结果将作为
                 外部输入信息)
         7.若变量为扩展变量内容,需要以双引号及$变量名称继续累加内容
         8.若该变量需要在其他子程序中执行,需要用export使变量变为
             环境变量
         9.通常大写字母为系统默认变量,自行设置的变量可以用小写
         10.取消变量的方法"unset 变量名"
     注意:
         环境变量可以应用于子程序,普通变量不可以
环境变量的功能
     一些环境变量的说明:env(environment 环境 缩写)
     各个变量的作用:
         HOME 代表用户的家目录
         SHELL 告诉我们当前使用的是哪个shell
         HISSIZE  设置记录历史我们输入个数的变量
         ENV 这个是用户所用的个性化环境设置文件的读取文件
         MAIL 当使用mail命令收信时,系统会去读取的邮件信箱文件
         PATH 执行文件的搜索路径,目录之间用:分隔,顺序很重要
         LANG 语系文件
         RANDOM 随机数变量,打印这个变量就是一个随机数0~32767
     其他所有变量的说明:set
         PS1(提示符的设置)
             \d 代表日期,格式为:“星期 月 日”
             \H 完整的主机名称
             \h 仅取主机名称的第一个名字
             \t 显示时间为24小时格式,如: HH:MM:SS
             \T 显示时间为12小时格式
             \A 显示时间24小时格式 HH:MM
             \u 当前用户的账号名称
             \v bash的版本信息
             \w 完整的工作目录名称
             \W 利用basename取得工作目录名称,所以会列出最后一个目录名
             \# 执行第几个命令
             \$ 提示符,如果是root提示符为#,否则为$
         $ 本shell的PID
             打印本shell 的PID  echo $$
         ? 上一个命令的回传码
             ehco $?  可以打印上一个命令的回传码
         OSTYPE/HOSTTYPE/MACHTYPE 主机的硬件与核心的等级
     自定义变量转换成环境变量 exprot   
语系文件的变量(locale)
     可以通过下面的变量来改变编码:
     LANG 主语言的环境
     LC_CTYPE 字符辨别的编码
     LC_NUMERIC 数字系统的显示消息
     LC_TME 实现系统的显示数据
     LC_COLLATE  字符串的比较与排序等
     LC_MONETARY 币值格式的显示
     LC_MESSAGES 消息显示的内容,如菜单,错误信息等
     LC_ALL 语言环境整体的设置
变量的有效范围
     注意脚本程序中,如果多个脚本程序执行同时执行任务,则需要把变量设置
     为环境变量,这样才能在另一个脚本中使用当前脚本的变量
变量键盘的读取,数组,与声明
    read 读取来自键盘输入的变量
     选项:
         -p 后面可以接提示信息(一个字符串)
         -t 后面可以接等待的秒数,不必因为用户没有输入而一直等待
     declare/typeset 两个命令功能一样,声明变量的属性
     选项:
         -a 将后面的变量定义为数组
         -i 将后面的变量定义为整数数字
         -x 用法与export一样,将后面的变量定义为环境变量
         -r 将一个变量设置为只读,不可更改内容,也不可取消定义
数组属性array说明
     建议使用${数组}来读取 设置方法和C相似 array[i]=xxx
与文件系统及程序限制关系ulimit
    ulimit [-SHacdflmnpstuv] [配额]
     选项:
         -H hard limit 严格设置,必定不能超过设置值
         -S soft limit 警告设置,可以超过这个值,但是会收到警告
                         但是还是无法超过严格设置
         -a 列出所有的限制额度
         -c 可建立的最大核心文件容量
         -d 程序数据可使用的最大容量
         -f 此shell可以建立的最大文件容量(一般设置为2G),单位为KB
         -l 可用于锁定(lock)的内存量
         -p 可用于管道处理(pipe)的数量
         -t 可使用的最大CPU时间(单位为秒)
         -u 单用户可以使用的最大进程数量
附加的变量设置功能
     ${变量}的形式可以用来修改输出内容
     例如 变量duxing的内容为:/home/duxing/testing/testing.x.sh
         echo ${duxing##/*/}
         输出结果为testing.x.sh
         echo ${duxing#/*/}
         输出结果为duxing/testing/testing.x.sh
     ##为贪婪的删除,#查找最短符合的字符串删除
     从后面开始删除%
         echo ${duxing%%/*/}
         输出结果为/home/duxing/testing/testing.x.sh
         echo ${duxing%%/*}
         输出结果为(删完了)   
         echo ${duxing%/*}
         输出结果为/home/duxing/testing
     替换/
         echo ${duxing/testing/TEST}
         输出结果为/home/duxing/TEST/testing.x.sh   
         echo ${duxing//testing/TEST}
         输出结果为/home/duxing/TEST/TEST.x.sh   
         一个的话仅替换第一个,两个会替换全部
     变量的设置方式P216
    
命令别名与历史命令
     变量别名的设置 alias unalias
     历史命令:history
         选项 :
             n 数字,要列出最近n行的命令
             -c 将当前shell中所有的history全部删除
             -a 将当前新增的histroy命令加入histfiles文件中
                 若没有文件则默认写入~/.bash_history
             -r 将histfiles的内容读到当前shell的历史记忆中
             -w 将当前的历史记忆内容写入histfiles文件中
    
     !n n为数字,可以执行第n条数据
     !command 由最近的命令向前搜索“命令串含command”的命令,并执行
     !! 执行上一条命令
Bash Shell 使用环境
     登录消息显示数据:/etc/issue、/etc/motd
         修改前者可以更改登录的时候的提示字符串
                 issue内各代码的含义
         \d  本地端时间的日期
         \l  显示是第几个终端接口
         \m  显示硬件的等级
         \n  显示主机的网络名称
         \o  显示域名
         \r  操作系统的版本 相当于uname-r
         \t  显示本地端的时间
         \s  操作系统的名称
         \v  操作系统的版本
         /etc/issue/net用来提供telnet远程登录使用的
         如果想在用户登录后获取一些消息可以将消息加入到/etc/motd中
     环境设置文件:bashrc,~/.bashrc,~/.profile,profile...,
                     /etc/inputrc,source
         注意:在命令行输入的变量,命令别名等,仅针对此次登录有效
         系统设置值
         /etc/sysconfig/i18n(FC4) ubuntu为/etc/default/locale
             语系由i18n维护,不建议在这里修改
         /etc/profile(不论哪个linux版本皆如此)
             设置几个重要的变量 例如 PAHT USER MAIL HOSTNAME
             HISTSIZE umake等,设置要小心,因为所有用户都使用
             这个文件的信息
         /etc/bashrc   ubuntu在/etc/bash.bashrc
             这个文件确定umask的功能,同时确定了提示符的内容
         /etc/profile.d/sh
             针对bash以及C-shell规范了一些数据
         /etc/man.config ubuntu /etc/man_db.conf、/etc/manpath.config
             确定了使用man的时候,系统到哪里去查看帮助文档
             最重要的是MANPATH路径的设置,确定了到哪个目录查找
     个人设置值
         ~/.bash_profile,~/.bash_login,~/.profile
             三个文件只要有一个即可,查找顺序如上
         ~/.bashrc
             每次执行shell脚本时候都会重新读取这个文件,而
             ~/.bash_profile只有在登录的时候才读取
         ~/.bash_history
             历史命令都记录在这里,记录多少与HISTSIZE变量有关默认1000
         ~/.bash_logout
             记录当我注销bash的时候系统再帮我做完什么操作再离开
     设置文件的读取顺序
         先读取/etc/profile 然后根据该文件的内容,读取/etc/profile.d
         etc/inputrc等附加设置文件的内容
         然后根据不同的用户,到用户家目录去读取~/.bash_profile等文件
         最后根据不同用户,到用户家目录读取~/.bashrc
         一般来说修改完设置文件,下次登录就会重新读取设置文件
         如果需要立刻应用该文件的设置,可以执行如下命令
         source file
         . file
         利用source或者.都可以将设置文件的内容读入当前shell环境中
     登录shell与非登录shell差别
         读取的环境设置文件不同
         登录shell时 会读取,~/.bash_profile ~/.bash_login ~/.profile
         而非登录shell只会读取 ~/.bashrc
终端的环境设置:stty set
    stty 查看当前的一些按键内容(可以设置按键的功能)
         选项:
             -a 列出当前的stty参数
         解释:
             ^ 表示ctrl键
             eof 文件结束(即结束输入)
             erase 向后删除字符
             intr 给当前正在运行的程序发送一个interrupt信号
             kill 删除当前命令行上所有的字符ctrl+u
             quit 给当前运行的程序发出一个quit信号ctrl+\
             start 在某个程序停止运行之后重新启动它 ctrl+q
             stop 停止当前屏幕的输出 ctrl+s
             susp 给正在运行的程序发送一个terminal stop信号
         可以通过stty erase ^h 来设置删除键为ctrl+h 改回来stty erase ^?
     set 设置整个命令输出、输入环境  如:记录历史命令,显示错误命令
         选项:
             -u 默认不启用 启用后,当使用未设置的变量时会报错
             -v 默认不启用 启用后,在消息输出前会先显示消息原始内容
             -x 默认不启用 启用后,在命令执行前会显示命令内容
             -h 默认启用,与历史命令有关
             -H 默认启用,与历史命令有关
             -m 默认启用,与工作管理有关
             -B 默认启用,与[]的作用有关
             -C 默认不启用,若使用 > 等 文件存在时不会覆盖
         echo $-会显示所有set的设置
         还有其他按键设置功能在文件/etc/inputrc中设置(不建议修改)
通配符与特殊符号
         符号                 内容
           *         通配符,代表0个或多个字符
           ?            通配符,代表一个字符
           #         注释,用在shell脚本
           \            转义字符 将特殊字符转换为一般字符
           |            分隔两个管道命令
           ;            连续命令的分隔符
           ~            用户的家目录
           $            变量之前需要加的变量替换值
           &         将命令变成后台执行(放在命令后面)
           !            逻辑运算意义上的非
           /            路径分隔的符号
           > >>        输出导向 分别是替换和追加
           '            不具有变量转换的功能
           ""        具有变量转换的功能
          
        之间为先执行的命令可以用 $(command) 替代
           ()        中间为子shell的起始和结束
           []        中间为字符的组合
           {}        中间为命令区块的组合
         组合按键        执行结果
        ctrl+c            终止当前命令
         ctrl+d            输入结束
         ctrl+m          就是enter键
         ctrl+s            暂停屏幕的输出
         ctrl+q           恢复屏幕的输出
         ctrl+u            删除整行命令
         ctrl+z            暂停当前命令

     例:
         cp test[1-3] /tmp 若test1 test2 test3 存在的话就复制到/tmp
         cp test[!1-3] /tmp 除est1 test2 test3 外都复制到/tmp
         cd /lib/modules/
uname -r`/kernel/drivers 到 这个目录中
         cp *[A-Z]* /tmp 只要文件中含有大写字母就复制到
数据流重导向
     标准输出 stdout 代码为0 使用<或<<
     标准输入 stdin 代码为1 使用>或>>
     标准错误 stderr 代码为2 使用2>或2>>
     学会使用/dev/null这个垃圾桶
     如果将标准输出和错误输出 输出到相同的文件中可以如下使用
         find /home -name testing >list 2>&1(注意这几个字符中间不能有’ ‘)
     <<符号表示“结束的输入字符“ 例如,要用cat输入消息到test文件中,用eof
     结束,可以使用如下的命令:
         cat > test <<eof
     下面的场合需要使用输出重导向
         屏幕上的信息很重要,我们需要保存下来
         后台执行的程序,我们不希望它干扰屏幕
         一些命令的执行结果,我们需要保存下来
         一些命令产生的错误,可能需要丢弃
         错误消息与正确消息需要分开
命令执行的判断依据: ; && ||
     ; 一次可以执行多个命令 例如关机时希望执行两次sync
         sync; sync; shutdown -h now
     && 与操作,可以如果前面的一半不满足,后面的一半不执行
         可以用下面的命令来判断目录是否存在
             ls /tmp && touch /tmp/abc
         也可以利用$?判断
     || 或操作,如果前面一半满足,后面一半不执行
         可以用它来执行如果目录不存在就创建它
             ls /abc || mkdir /abc
     注意:这两个操作符是没有优先级的问题的
管道命令(pipe)   |
     管道命令仅能通过前面一个命令传过来的正确信息,也就是标准输出的
     信息进行处理,对于标准错误输出,没有能力直接处理
选取命令: cut gerp
     cut -d ‘分隔符’ -f fields
     cut -c 字符范围
     注意:是以行为单位处理的,处理多个空格连在一起的情况比较吃力
     选项:
         -d 后面接分隔符,与-f一起使用
         -f 根据-d的分隔符将消息分成数段,用-f取第几段的意思
         -c 以字符为单位去除固定的字符范围
     例如,取出PATH中的第三个路径 和第五个路径
         echo $PATH | cut -d ‘:’ -f 3,5(注意中间会用分隔符分开)
         取出第12个字符以后的内容
         export | cut -c 12-
     grep 分析一行数据,若其中有需要的信息就将 该行 取出
         grep [-acinv] ‘搜索字符串’ filename
     选项:
         -a 将二进制文件以文本文件的方式搜索数据
         -c 统计找到 ‘搜索字符串’的次数
         -i 忽略大小写的不同,所以大小写视为相同
         -n 顺便输出行号
         -v 反向选择的,即显示出没有‘搜索内容’那些行的内容
     例如,
         将last中出现duxing的那一行取出来 last | grep ‘duxing’
         将last中没有出现duxing的取出来  last | grep -v ‘duxing’
排序命令 sort wc uniq
     sort [-fbMnrtuk] [file or stdin]
     选项:
         -f 忽略大小写的差异
         -b 忽略最前面的空格符部分
         -M 以月份的名字来排序
         -n 使用串数字进行排序
         -r 反向排序
         -u uniq 相同的数据仅出现一次
         -t 分隔符 默认为 tab
         -k 按那个字段 field 来进行排序
     例如:/etc/passwd 内容是以”:”分隔的,以第三列排序
         cat /etc/passwd | sort -t ‘:’ -k 3
     uniq  如果排序完成了,想要将重复的数据仅显示一次
     uniq [-ic]
         -i 忽略大小写
         -c 进行计数
     例:如果想知道每个人的登陆次数
         last | cut -d ‘ ‘ -f1 | sort | uniq -c
     wc 显示一个文件中有多少词 行 字符等
         -l 仅显示有多少行
         -w 仅显示有多少词
         -m 多少字符
双向重导向 tee (输出到文件的同时,屏幕上也有输出)
         tee [-a] file
         选项:
             -a 以累加的方式将数据加入file中
字符转换命令 tr col join paste expand
     tr 删除一段消息中的文字,或者进行文字消息替换
         tr [-ds] SET1 …
     选项:
         -d 删除消息中的SET1字符串
         -s 替换连续的重复的字符
     例如,将所有的小写字母全部换成大写字母
         last | tr ‘[a-z]’ ‘[A-Z]’
         将 /etc/passwd输出的消息中所有 : 删除
         cat /etc/passwd | tr -d ‘:’
         将DOS文件的换行符^M符号删除
         cat /home/test/dostxt | tr -d ‘\r’ > dostxt-noM
     col [-x]
     选项:
         -x 将tab键转换成对等的空格键
     join 是在处理两个文件之间的数据 有相同数据的行就将它们加在一起
     选项:
         -t join默认是以空格符分隔数据的,而且比较第一个字段的数据
             如果两个文件相同,则会将两个数据联成一行
         -i 忽略大小写
         -1 表示 第一个文件要用那个字段来分析
         -2 表示第二个文件要用那个字段来分析
         P238
     paste 直接将两行贴在一起,中间用tab隔开
     选项:
         -d 后面可以接分隔符 默认tab分隔
         –  如果file部分写成 – 表示来自标准输入的信息
     例如,现将/etc/group 独处,然后与后面的内容贴在一起,仅列出前三行
         cat /etc/group | paste /etc/passwd /etc/shadow | head -n 3
     expand 将tab按键转换成空格键
     选项:
         -t 后面可以接数字,可以自定义一个tab用多少空格来了替换
     unexpand 将空白转换成tab
     拆分命令split [-lb] file PREFIX
     选项:
         -b 后面接要拆分的文件大小,可加单位,b,k,m
         -l 按行数进行拆分
     例如/etc/termcap300k 想要拆成120k大小的文件
         split -b 120k /etc/termcap termcap
         使用ls -al / 输出信息中,每10个记录成一个文件
         ls -al / | split -l 10 – lsroot
参数代换 xargs [-0epn] command
     将前面命令或者标准输入的内容作为参数传给command
     选项:
         -0 如果输入的stdin含有特殊字符,例如空格 \等 这个参数可以还原
             成一般字符
         -e 这是EOF的意思,后面可以接一个字符串,当分析到这个字符串时
             就会停止继续工作
         -p 在执行每个命令的参数时,都会询问用户的意思
         -n 后面接次数,每次command命令执行时 要使用几个参数
         没有参数,默认以echo输出
减号(-)的用途
         前一个命令的stdout作为这次的stdin 这些命令需要用到文件的名称
         来处理,stdin与stdout可以用-来替代
             tar -cvf – /home | tar -xvf –
             将/home 里面的文件打包,但打包的数据不是记录到文件中,
             而是传送到stdout,经过管道后,将tar -cvf – /home 传送给
             后面的tar -xvf 后面的这个-则是取用前一个命令的stdout 因此
             就不需要file了

2015-12-24
bash shell设置,linux环境变量设置,-鸟哥的Linux私房菜基础版本(第二版)笔记8已关闭评论