- 什么是 Shell ?
- 计算机需要代码和指令才可以执行,但是我们操作计算机不能每次都写一段 C 的代码,然后编译给计算机执行,所以需要一种方法能够完成特定的任务
- 计算机开始是提供给科学计算实验和教育领域使用的,而最初它们经常被用于处理文本,所以我们发现一切都是文本的形式操作
- 常见的 shell 有 sh, bash, zsh, fish-shell and more
- Shell 本身就是一个二进制程序,它能读取用户输出,加载其他程序到CPU和内存,然后获取输出
- 然后约定了一些输入输出的参数
- 输出 main(args); 输出 exit code, stdout err
- shell 的 login-shell and non-login-shell
- 要分清楚哪个是终端,哪个是 shell
- 如何知道当前使用的是什么 shell 环境? $0
- Login shell and non-login-shell http://www.mehnle.net/software/bash-startup
- 文件系统
- 一个非常重要的概念是,Linux 中一切都是文件
- 可以说文件系统是一个 Tree,而我们在这个 Tree 的 Nodes 中漫游
- cd 可以由树中的某一个树叉跳到另一个树叉
- pwd 可以告诉我们现在在哪一个树叉上
- ls 可以告诉我们某个分叉下面还有那些子分叉或者叶子
- 文件类型
- l - link
- 软连接与硬连接
- 软连接是一个特殊的符号链接文件,如果指向的 target 删除它就无效了
- 硬连接是指向 inode 的指针,要想删除这个文件必须删除所有硬连接
- 软连接与硬连接
- - - 文件
- d - 目录
- c - char 类型设备
- cat /dev/urandom | hexdump
- b - block 类型设备
- p - pipe
- l - link
- 文件权限
- 文件权限介绍,三段式
- r,w,x 8进制
- chown 修改所有者
- chmod 修改权限
- u - user
- g - group
- o - other
- a - all
- + - = ,
- 文件权限介绍,三段式
- 内置命令与外部命令
- 内置命令是 shell 环境提供的,外部命令是二进制文件
- type 命令可以告诉我们该命令是什么类型的
- 你问我一共有多少个命令?我不知道
- 你可以 ls /usr/bin /bin /usr/local/bin
- usr 并不是 user 的意思,而是 user shared resources
- sbin vs. bin s = superadmin = root 便于管理
- 你可以 ls /usr/bin /bin /usr/local/bin
- Shell 如何查找命令的?
- PATH 环境变量 “:” 分割,依次查询
- 重定向 / 管道
- 介绍标准输出,标准错误,标准输入
- > /dev/null 2> &1
- cut
- -c1-2
- -d‘:’ -f2
- cat
- cat > a.txt <<EOF
- sort
- uniq
- grep
- B - Before
- A - After
- C - Context
- tail
- head
- tee
- awk ‘{ print $1, $4 }’
- -F ‘:’ { print $1 }
- 介绍标准输出,标准错误,标准输入
- 键盘操作
- mode
- set -o vi or emacs
- tab
- clear
- history
- 关于快捷键的历史, Emacs 快捷键,Vim 快捷键
- ctrl-a 开头
- ctrl-e 结尾
- Ctrl-f forward
- Ctrl-b backward
- Ctrl-t swap two charts
- mode
- 编程
- 解释器
- #!/usr/bin/env bash
- 可以结合使用
- 变量
- 大写小写均可,赋值操作不能有空格 a=1
- 获取变量用 “$”
- 删除变量用 unset
- 函数内定义变量可以用 local 关键字
- 变量展开 {1..100} {a..z} {1,3,4} *
- 如何防止展开?‘’
- $((3*3))
- 特殊变量
- $@ $0, $1 第 n 个参数
- $_ 上条命令的最后一个参数
- $? 上条命令的退出状态
- 逻辑判断/条件分支
- if-else 判断依据是 exit code
- test 程序
- [[ ]] 这是个二进制
- 循环 / Loop
- for
- for-loop 通常需要一个序列,产生序列的几个办法
- echo
- find
- while
- for
- 使用 Node.js 编写工具
- curl -s https://api.lsong.org/beijingair | parse-json -e 'd => d.filter(x => parseInt(x.AQI, 10) < 70)'
- 解释器
- 最佳实践
- 看手册 man command
- 1 - user
- 2 - system calls
- 3 - C lib
- 4 - Device
- 5 - File Formats
- 8 - sysadmin
- 不要频繁 cd,频繁切换目录会让你搞不清楚当前在哪里,尽量使用 ls,pwd
- 操作任何文件时使用 echo 输出看是否是想要的结果,避免误操作
- 服务器的 root 用户要禁止使用密码登录,改用 ssh key
- 使用变量时记得使用 “” ,避免变量中存在空格当成两个参数传递
- 不要长时间在 root 账户下工作,临时完成后记得退出到普通权限用户操作
- 看手册 man command
Shell 编程入门
最新推荐文章于 2024-04-23 15:24:21 发布