zoukankan      html  css  js  c++  java
  • 别人的Linux私房菜(11)认识与学习BASH

    Linux下使用BASH   Bourne Again Shell        另外一种由用于Unix的伯克利大学的Bill Joy设计的C Shell

    系统中合法的shell会写入到/etc/shells文件,便于其他用户登录设置。

    用户登录后取得的shell记录在/etc/passwd这个文件内

    命令记录在.bash_history,为上一次登录执行的命令。bash-completion软件可以使用选项参数补齐。【tab】

    查询命令是否为bash的内置命令: -t 显示命令的意义(外部,别名,shell命令)  -a由path定义的路径

    如:type ls    type -t ls ; type -a ls;type cd

    ctrl +u向前删除命令行ctrl+k向后删除命令行

    ctrl+a光标移动到命令行最前   ctrl+e光标移动到命令行最后

    显示部分环境变量:

    变量要求:

     等号赋值,英文字母或者数字,字母开头。使用双引号,内的$后加变量。使用单引号内的变量为字符串常量。

    ``和$可以用于额外命令执行如  version=$(uname -r)或version='uname -r'

    想要知道每个和crontab相关的文件名的权限:ls -ld `locate crontab`

    使用转义字符将回车$空格‘等转换为一般字符

    变量如果需要在其他子程序执行则需要export使变量变为环境变量。 export PATH

    取消变量的办法为unset 如:unset myname

    在PATH中累加路径:PATH="$PATH":/home/        PATH=${PATH}:/home/

     在变量中累加变量:name=“$name”yes    name=${name}yes

     进入字进程bash   退出exit   在子进程中调用父进程的变量使用export

    子进程仅继承父进程的环境变量,所以自定义变量需要export将变量放入子进程

     在~/.bashrc配置文件中有用户定义的变量别名,可以使用。

    列出shell中所有环境变量和内容:env,如主机名,类型,条数,shell,使用者,语系,账号登录名等

    用set观察环境变量和自定义变量:set

    获得随机数:declare -i number=$RANDOM*10/32768;echo $number

    PS1提示字符的命令行设置:具体的转义可以man bash

     $本shell的PID(Process ID)echo $$   

    ?上次执行命令的返回值,正确执行返回0

    显示支持语系:locale -a

     显示当前编码:locale。设置编码只需要设置LC_ALL和LANG即可。

     系统默认语系的位置:/etc/locale.conf

    read读取来自键盘的变量。如:read  atest

    -p加入提示字符,-t等待输入的秒数。如:read -p “input:” -t 30 named

    declare和typeset相同,声明变量的类型。如显示变量名:declare

     将后面的变量定义为-a数组,-i整数-r只读。-x变量成为环境变量

    如 declare -i sum=100+200等echo $sum

     限制用户使用系统单资源:ulimit

    -a所有,-f建立最大的文件容量

     如列出所有限制额度:ulimit -a

    如限制建立文件的大小:ulimit -f 10240 一般用户身份只能缩小建立的大小,不能增大

    删除变量中的字段:

    #删除变量从头开始符合要求的最小变量段        

    ##删除变量从头开始的符合要求的最大变量段

    如:echo {path#/*:}删除了环境变量中的第一个路径

    echo {path#/*:}剩下了环境变量中的最后一个路径(介于斜线和冒号之间)

    %删除变量从尾开始符合要求的最小变量段

    %%删除变量从尾开始符合要求的最大变量段

    /   /将旧字符串的第一个替换为新字符串

    //    /将旧字符串全部替换为新字符串

    如:echo {$path/sbin/SBIN}和echo {$path//sbin/SBIN}

    此外还有:-将不存在的变量替换为新变量,存在则不变:username=${usernae-root}

    此外还有:: =不论存在与否都替换。?旧变量不存在告知信息:var=${str?noThis}

    命令别名设置:alias lm=‘ls -al | more’

    取消别名:unalias lm

    显示所有输入过的命令:history

    -c全部清除 -a新增入histfile,若没有则增如入~/.bash_history -w写入文件 -r读取那个文件

    记录的数据条数和bash的HISTFILESIZE大小有关

     !239执行第239条命令          !!执行上一条命令             !al执行最近的以al开头的命令

     ~/.bash_logout显示退出时间

    bash执行命令时的路径查找顺序:以相对路径查找,通过alias查找,通过bash内置命令,通过PATH查找第一个

    如:type -a echo可以查看echo的顺序

    bash的欢迎信息在/etc/issue中,/etc/issue.net提供了telnet远程登录的欢迎信息。

    而用户登录后的欢迎信息在/etc/motd中。所有一般账户和root登录后显示

    bash启动时会读取配置文件,包括全局系统配置文件,个人偏好配置文件。

    每个用户登录后,系统的整体设置:/etc/profile,主要有BASH、MAIL、USER、HOSTNAME、HISTSIZE、umask等

    之后该文件调用其他文件,如/etc/profile.d/*.sh(别名,颜色等)     /etc/locale.conf(语系)    /usr/share/bash-completion/completions/*

     用户个人设置:~/.bash_profile或~/.bash_login或~/.profile之一。按顺序选择读取

    (会调用  ~/.bashrc)

    source命令或.命令读入配置文件,如:source ~/.bashrc      .  ~/.bashrc

    non-login shell(如bash子进程)仅会读取~/.bashrc

    以上都会调用/etc/bashrc,定义出在不同UID下的umask,PS1,/etc/profile.d/*.sh的设置等

    /etc/man_db.conf#man page路径到哪里寻找

    ~/.bash_history#历史命令文件

    ~/.bash_logout#注销bash后执行完里面的操作再离开

    终端的环境设置

    stty -a列出所有按键与按键内容(快捷键)

    如intr 中断,quit退出,erase向后删除,kill删除命令行,eof结束输入,start重启输出,stop停止输出,等

    如stty erase ^h(ctrl h)

    一些变量利用set来显示,如显示所有设置的值:echo $-

    -u未设置的变量显示错误信息,-x命令显示前会显示++提示等

    如:设置:set -u   取消设置:set +u

    通配符号与特殊符号:

    *多字符          ?一字符            []一定有一个在内           [-]顺序内的所有     [^]反向选择

    &将任务变成后台任务的命令

    标准输入,代码0:<    <<

    原本由键盘输入的数据改由其它,

    如创立文件并写入信息:cat >catfile  [ctrl +d 退出]。

    创立文件把文件bashrc写入:cat >files < ~/.bashrc

    <<为结束的输出字符设置,如cat >catfile <<"eof"

    标准输出,代码1:>    >>

    如ll  /  > ~/rootfile 将正确的输出信息存入文件,若使用>>则为新增效果

    标准错误输出,代码2:2>    2>>

    如:find /home --name .bashrc > list_right 2>list_error,将输出数据分别显示

    将错误和正确信息写入一起:find /home --name .bashrc > list 2>&1或find /home --name .bashrc &> list 

    垃圾桶设备,/dev/null

    如:find /home --name .bashrc 2>/dev/null则只显示正确的数据。

    连续命令执行的特殊字符

    ;连续执行的命令

    &&前命令执行正确则执行后命令

    ||前命令执行错误则执行后命令

    |管道命令

    仅处理标准输出     后接能接受标准输入的命令如:less,more,head,tail,而不能是ls cp mv

    选取命令将数据一行一行分析,cut和grep

    cut  -d加入分隔字符  -f根据-d的分隔字符将信息划分数段  -c以字符单位取出固定字符区间  --color=auto颜色特殊显示

    如:echo ${PATH} |cut -d ':' -f 3,5#列出第三和第五段数据

    如:export | cut -c 12- #取出每行的第12到最后字符

    grep -c找到次数  -i忽略大小写  -n输出行号  -v反向选择

    如:last 输出信息中,取出没有root的每行  last | gerp -v “root”

    排序命令:sort

    sort  -n使用纯数字排序  -t分隔符号设置(默认tab)    -k排序区间选定等(默认字符排序)

     如:cat /etc/passwd | sort

    如:cat /etc/passwd | sort -t ':' -k 3以:作为分隔符用第三列进行排序

    uniq  计数命令 -i忽略大小写,-c进行计数

    如:last | cut -d ‘  ’ -f1  | sort  | uniq -c 计数每个人的登录总次数

    wc计算输出信息的整体数据 ,-l输出行,-w字母数,-m字符数

    如:cat /etc/man_db.conf | wc

    tee双向重定向,转存文件,-a累加方式

    ls -l / | tee -a ~/homefile | more #将文件数据显示到屏幕并转存一份到文件

    tr删除或替换文字        -d加删除字符,-s替换重复的字符

    如:last | tr '[a-z]' '[A-Z]'    #小写变大写

    如:cat ~/passwd | tr -d ' ' > ~/passwd.Linux#将/r去掉,即dos2unix,并另存

    col   -x将tab按键,转换为空格

    如:cat /etc/man_db.conf | col -x | cat -A  | more #转换并显示结果,包括特殊按键

    join处理两个文件之间的数据,将相同一行加在一起

    -t 分隔字符  -i忽略大小写  -1  第一个文件栏位,-2第二个文件栏位

    如:join -t ‘:’ /etc/passwd /etc/shadow | head -n 3 相同合并并选前三行显示

    如:join -t ‘:’ -1 4 /etc/passwd -2 3 /etc/shadow | head -n 3 自定义合并并显示

    合并前应排序

    paste将两行贴在一起,tab分隔开 -d选择分隔符  

    如:paste /etc/passwd /etc/shadow#合并

    expand 将tab转为空格 -t 指定替换为空格的个数

    如:grep ‘^MANPATH’ /etc/man_db.conf | head -n 3 | expand -t 8 - |cat -A#其中的file写成了-,为标准输入数据。

    split划分命令:-b加划分文件大小  -l以行数来划分。

    如:cd /tmp; split -b 300k /etc/services newfile#划分后出现newfile[a-z]等

    将文件合并:cat newfile* >> newfile.back

    又如:ls -al / | split - l 10 - lsboot#以行数划分

    xargs参数,产生某个命令的参数个数,-n加次数 -p询问 等

    如:id root;

    cut -d ‘:’ -f 1 /etc/passwd | head -n 3 | xargs -n 1 id #一次给予id一个参数,并完成全部显示

    -,做标准输入或输出使用,代替文件名

     

  • 相关阅读:
    解决端口被占用
    Oracle查询所有表的字段明细
    Spring cron表达式
    Java爬取12306余票
    Activiti工作流框架——快速上手
    ERROR 1045 (28000): Access denied for user 'xxx'@'localhost' (using password: YES)【奇葩的bug】
    一分钟学会JavaMail(假)__手动滑稽
    通过Servlet实现汉字验证码
    使用ServletContext对象读取资源文件
    编写一个简单的java服务器程序
  • 原文地址:https://www.cnblogs.com/bai2018/p/10715579.html
Copyright © 2011-2022 走看看