《Linux 命令行与 shell 脚本编程大全(第三版)》学习笔记

第2章 走进shell

  • setterm命令:用于设置终端前背景色和背景色
    选项参数作用
    -backgroundblack、red、green、yellow、blue、magenta、cyan、white将终端背景设置为指定颜色
    -foregroundblack、red、green、yellow、blue、magenta、cyan、white将终端前景色改为指定颜色
    -inversescreenon、off交换背景色和前景色
    -reset 将终端恢复为默认外观并清屏
    -store 将终端当前设置存储,作为-reset的值

     

  • Ubuntu的Unity,可以用快捷键Ctrl+Alt+T快速调出终端。
  • 复制粘贴快捷键是Shift+Ctrl+C(V)。
  • Ctrl +和Ctrl -可以放大或者缩小窗口显示字体大小。Ctrl 0 恢复默认字体大小。

 

第3章 基本的bash shell命令

  • /etc/passwd中最后一个字段指定该用户用的shell程序
  • Linux将文件存储在单个目录结构中,这个目录被称为虚拟目录。虚拟目录将安装在PC上的所有存储设备的文件路径纳入单个目录结构中。
  • 波浪号~表示你正处于当前用户的home目录中,用户home目录也是在/etc/passwd中列出。
  • ls -R :显示包括当前目录的子目录中的内容
    ls -F :文件夹后加个/
  • file命令 可以查看文件类型。
  • tail 默认显示后10行,通过-n 2显示后两行。tail -f 可以让显示出来的内容随文件实时更新,通常用于一个终端输出日志文件,另一个监控日志文件。

 

第4章 更多的bash shell 命令

  • 默认情况下,ps命令只显示运行在当前控制台下的、属于当前用户的进程。
  • 查看系统上运行的所有进程,可以用ps -ef。
    UID:启动进程的用户
    PID:进程ID
    PPID:父进程ID
    C:进程生命周期中的CPU利用率
    STIME:进程启动时的系统时间
    TTY:进程启动时的终端设备
    TIME:运行进程需要的累计CPU时间
    CMD:启动的程序名称
  • ps只显示某个特定时间点的进程信息,而top是实时的。
  • killall支持通过进程名来结束进程,进程名支持通配符。
  • du命令用于显示当前目录的磁盘使用情况。
    -c:显示所有已列出文件总大小
    -h:易读形式显示,即用K\M\G单位
  • sort file:排序输出文件
    -f:默认情况下,大写字母会排在前面,这个参数将忽略大小写
    -m:将两个已经排序的数据文件合并
    -n:按字符串的数值来排序(不会转换浮点数)
    -o:将排序结果输出到指定文件
    -r:反向排序

 

第6章 使用Linux 环境变量

  • 全局环境变量:对于shell会话和所有生成的子shell都是可见的。
    局部环境变量:只对创建它们的shell可见。
  • 父shell export一个全局变量,子shell即使用export再修改,也不影响父shell。
  • 可以用unset命令删除环境变量,不用加$。
  • 5个启动文件:
    /etc/profile:bash shell默认的主启动文件
    $HOME/.bash_profile
    $HOME/.bashrc
    $HOME/.bash_login
    $HOME/.profile
  • 剩下4个启动文件,shell按照以下顺序找到第一个,余下被忽略(.bashrc一般是通过其他文件运行的):
    $HOME/.bash_profile
    $HOME/.bash_login
    $HOME/.profile
  • 所有用户都用到的变量,一般在/etc/profile设置(当一旦更新可能就没了,建议在/etc/profile.d中放一个.sh文件去导入);个人用户用到的变量,一般在$HOME/.bashrc设置。

 

第7章 理解Linux文件权限

  • /etc/passwd每一个用户信息:
    用户名:密码:UID:GID:备注:HOME目录:默认shell
  • passwd里面的密码都是x,真正密码存储在/etc/shadow中。
  • useradd参数:
    -c coment:给新用户添加备注
    -d home_dir:为主目录指定名字(如果不想用用户名作为主目录名)
    -e expire_date:账户过期日期
    -f inactive_days:账户密码过期多少天后被禁用
    -g initial_group:指定用户登陆组的GID或组名
    -G group:指定用户除登陆组之外所属的一个或多个附加组
    -k:必须和-m一起使用,将/etc/skel目录下的内容复制到新建用户的HOME
    -m:创建用户的HOME目录
    -M:不创建HOME目录
    -n:创建与用户同名的组
    -r:创建系统账户
    -s shell
    -p passwd
    -u uid
  • useradd -D显示默认值,-D后加-b(HOME目录) -e -f -g -s可以修改默认值
  • -代表文件,d代表目录,l代表链接,c代表字符型设备,b代表块设备,n代表网络设备。
  • 文件默认值为666,目录默认值为777。创建的默认值是减去umask的值得到的。
    通过umask 026设置,这时候创建的文件默认权限是640。

 

第11章 构建基本脚本

  • 有两种方法可以将命令输出赋给变量:
    ①反引号:test=`date`
    ②括号:test=$(date)
  • shell两种运算:
    ①expr命令:expr 5+2; expr 5 \* 2;
    ②方括号:var=$[$var1 * ($var2 - $var3) ]
  • 可以通过bc命令来计算浮点数:var=$(echo "options; expression" | bc)

 

第12章 使用结构化命令

  • Shell的 if 语句是判断后面的命令的退出状态码,如果是0既执行后面内容。
  • 数值比较:-eq 相等;-ge 大于等于;-gt 大于;-le 小于等于;-lt 小于;-ne 不等于。
  • file1 -nt file2(file1 -ot file2):file1是否比file2新(旧)
  • [ condition1 ] || [ condition2 ]
    [ condition1 ] && [ condition2 ]
  • case命令:
    case variable in 
    pattern1 | pattern2) commands;;
    pattern3) command;;
    *) default command;;
    esac
  • 使用双括号进行判断,可以用类似于C风格的判断:
    if(($var>20))

 

第13章 更多的结构化命令

  • 可以用通配符来读取目录:
    for file in /home/* ; do
    ​​​​​​​    commands
    done

     

  • C风格的for命令:
    for((a=1;a<10;a++));do
        commands
    done
    
    for((a=1,b=10;a<=10;a++,b--));do
        commands
    done

     

  • 通过更改IFS变量,可以更改for循环读数据时的默认分隔符:
    IFS=$'\n'
    for var in $(cat $file)
  • break支持跳出循环层级,通过break n指定要跳出几层循环。(continue也同理)

 

第14章 处理用户输入

  • $*将所有命令行输入变量当成一个整体;$@则会将其当做多个独立单词,可以通过for循环遍历(for var in "$@")
  • read命令从标准输入或另一个文件描述符中接受输入:
    read -p "Please enter a num:" num 
    echo "${num}"

     

  • read 后面可以指定多个变量,输入的每一个数据值都会分配给列表中的下一个变量,如果变量数目不够,剩下的所有数据会分配给最后一个变量。
  • 加入-s选项,避免read命令输入的数据出现在显示器上(输密码时可以用)。

 

第15章 呈现数据

  • command 2> errlog 1> log:
    将错误输出重定向到 errlog,正常输出重定向到 log
  • command &> log 所有输出重定向到log,此时错误输出优先级较高,他们会集中在一起。
  • echo "err message" >&2 脚本中输出临时重定向到错误输出。
  • exec 0/1/2>log 永久将错误或标准输出或标准输入重定向,重定向前最好要先备份下防止回不来:
    exec 3>&1    #备份
    exec 1>log   #重定向
    #……
    exec 1>&3    #恢复

     

  • 可以将不想看到的输出重定向到/dev/null
  • 通过tee命令可以同时把输出重定向到其他地方,又同时打印到屏幕:
    commands | tee logfile(默认覆盖文件内容,追加要加入-a参数)

 

第16章 控制脚本

  • 可以通过trap命令,捕获Ctrl+C等Linux信号,然后做相应的操作:
    trap commands signals
  • 调度优先级从-20(最高优先级)到+19(最低优先级),默认以优先级0来启动进程。改变一个脚本的优先级,通过nice命令做到:
    nice -n 10 ./test.sh &
    nice -10 ./test.sh &
  • at [-f filename] time:定时运行作业。
    time的格式很灵活,可以是:
    10:15
    10:15 PM
    MMDDYY;MM/DD/YY; DD.MM.YY
    Jul 4
    +25min

 

第17章 创建函数

  • 通过echo返回的函数值,可以是任何值,并且保存进变量:ret=$(fun)
  • source有一个快捷别名,称为点操作符。只要:. ./funcs.sh 即相当于source ./funcs.sh

 

第18章 图形化桌面环境中的脚本编程

  • echo本不可以输出非字符,例如制表符和换行符,加入-e选项后可以。
  • echo加入-n,可以取消自动换行。
  • 通过select命令可以简化菜单选择编程:
    select option in "option1" "option2" "option3";do
        case $option in
        "option1")
            break ;;
        "option2")
            func2 ;;
        "option3")
            func3;;
        esac
    done

     

 

第19章 初识sed和gawk

  • 加入-e选项可以在sed中执行多个命令:
    sed -e 's/brown/green/; s/dog/cat/' data.txt
  • gawk中:$0代表整个文本行;$1代表文本行第一个字段;$2代表第二个字段……
  • gawk可以通过-F选项指定字段分隔符,默认是任意的空白符(空格或制表符等)
  • 可以在处理脚本前或者后运行一些程序:
    gawk 'BEGIN{print "Pre:"} {print $0} END{print "End of file"}' data.txt

     

  • 数字方式寻址:
    sed '2s/dog/cat/g' data.txt      #第二行
    sed '2,4s/dog/cat/g' data.txt   #第二到第四行
    sed '2,$s/dog/cat/g' data.txt   #第二行开始的所有行
  • sed '/Samantha/s/bash/csh/g'  datat.txt #匹配有Samnantha的行,然后再执行替换
  • i:在指定行前添加一个新行;a:在指定行后添加一个新行。
    sed '1i/this is new line' data.txt

 

第20章 正则表达式

  • 通过()对表达式里面的内容进行分组,后面可以通过$0 $1来表示这些分组。

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值