学习shell
什么是shell
shell 就是一个程序,它接受从键盘输入的命令, 然后把命令传递给操作系统去执行
- df 查看磁盘空间剩余数量
- free 显示空闲内存数量
- exit 结束终端会话
文件系统跳转
文件命名规则
- 以”.”开头的文件名是隐藏文件,使用ls -a显示
- 文件名大小写敏感
- 没有文件扩展名概念
- 文件名可能包含空格标点,但是标点符号仅限使用”.”,”-“,”_”,最好不要使用空格
操作系统
一些命令
- less 浏览文件内容
- ls 可以列出多个指定目录的内容
- ls -a 全部
- ls -d 目录
- ls -F 在名字后面加上指示符
- ls -h 以刻度格式列出
- ls -l 长格式显示结果
- ls -r 相顺序来显示结果
- ls -S 按文件大小排序
- ls -t 按修改时间来排序
确定文件类型
- file filename
less命令
- Page UP or b 向上一页
- Page Down or space 向下一页
- UP Arrow 向上一行
- Down Arrow 向下一行
- G 移到最后一行
- 1G or g 移到开头一行
- /characters 向前查找指定字符串
- n 向前查找下一个出现的字符转
- h 显示帮助屏幕
- q 退出less程序
linux系统中的目录
- / 根目录
- /bin 包含系统启动和运行所需的二进制程序
- /boot 包含Linux内核,初始RAM磁盘映像
- /dev 包含所有设备节点
- /etc 包含系统层面的配置文件
- /home 用户目录
- /lib 包含核心系统程序送所需共享库
- /mnt 可移动介质挂载点
- /opt 安装商业软件
- /usr 包含普通用户所需的所有程序和文件
符号链接
一个文件可能被子多个文件名所指向
操作文件和目录
基本命令
- cp
- mv
- mkdir
- rm
- ln
通配符
- * 匹配任意多个字符(包括0个)
- ? 匹配任意一个字符(不包括0个)
- [characters] 匹配任意一个字符集中的字符
- [!characters] 匹配任意一个不是字符集中的字符
- [[:class:]] 匹配任意一个属于指定字符类的字符
- [:alnum:] 匹配任意一个字符或数字
- [:alpha:] 匹配任意一个字母
- [:digit:] 匹配任意一个数字
- [:lower:] 匹配任意一个小写字母
- [:upper:] 匹配任意一个大写字母
cp复制文件和目录
- -a 复制文件和目录以及属性
- -i 在重写已存在的文件之前提示用户确认
- -r 递归复制目录以及目录中的内容
- -u 当把文件从一个目录复制到另一目录
- -v 显示具体的操作信息
mv移动和重命名文件
- -i 提示确认
- -u 只移动不存在的文件夹
- -v 显示具体的操作信息
rm删除文件和目录
- -i 提示确认
- -r 递归删除
- -f 忽视不存在文件
- -v 显示具体操作信息
小心rm命令
- rm * .html 这会删除所有数据
ln创建链接
- ln file link 符号链接
- ln -s item link 硬链接
硬链接
每个文件默认有一个硬链接,硬链接给予文件名字。每创建一个硬链接,就为一个文件创建了一个额外的目录项。
硬链接的局限:
硬链接不能关联所在文件系统之外的文件,也不能关联一个目录。
符号链接
类似于快捷方式,关联修改但是不关联删除。
使用命令
基本命令
- type 解释一个命令名
- which 显示可执行程序的位置
- man 显示命令手册页
- apropos 显示一系列适合的命令
- info 显示命令info
- whatis 显示一个命令的简洁描述
- alias 建立命令别名
什么是命令
- 可执行程序
- 内建于shell自身的命令
- 一个shell函数
- 一个命令别名
重定向
命令简介
- cat 连接文件
- sort 排序文本行
- uniq 报道或省略重复行
- grep 打印匹配行
- we 打印文件中的换行符,字和字节个数
- head 输出文件第一部分
- tail 输出文件最后一部分
- tee 从标准输入读取数据
标准输出
- “>” 将标准输出重定向到除屏幕以外的一个文件
- “>>” 追加
标准错误
shell内部使用0、1、2来重定向文件。
0标准输入,1标准输出,2错误
eg: ls -l /bin/usr 2 > ls-error.txt
标准输出和错误到同一文件
2>&1
eg: > ls-output.txt 2>&1 注意输出与错误的顺序
eg: 2>&1 > ls-output.txt 定向到屏幕
处理不需要的输出
ls -l /bin/usr 2> /dev/null
标准输入重定向
eg:cat > lazy_dog.txt
eg: cat < lazy_dog.txt
管道线
“|”一个命令的标准输出可以通过管道送至另一个命令的标准输入
过滤器
过滤器接受输入,以某种方式改变它,然后输出它
eg: ls /bin /usr/bin | sort | less
uniq报道或忽略重复行
常与sort命令结合
eg: ls /bin /sur/bin | sort | uniq | less
wc打印行数、字数、字节数
grep打印匹配行
eg: grep pattern [file…]
eg: ls /bin /usr/bin | sort | uniq | grep zip
方便选项:
-i 使得执行搜索时忽略大小写
-v 会告诉grep只打印不匹配的行
head / tail
打印文件开头部分/结尾部分,
用在管道中:
ls /usr/bin | tail -n 5
tee
从Stdin读取数据,并同时输出到Stdout和文件
eg: ls /usr/bin | tee ls.txt | grep zip
从shell眼中看世界
(字符)展开
eg: echo * 将目录下文件名字展开
路径名展开
eg: echo D or echo [[upper]]
隐藏文件路径名展开
eg: echo . 会显示工作目录和父目录
eg: ls -d .[!.]? 以圆点开头,第二个字符不包含圆点,再包含至少一个字符
算术表达式展开
eg: echo $((expression))
取幂:**
花括号展开
eg: echo Front-{A,B,C}-Back
Front-A-Back Front-B-Back Front-C-Back
eg: echo Number_{1..5}
Number_1 Number_2 Number_3 Number_4 Number_5
eg: echo a{A{1,2},B{3,4}}b
aA1b aA2b aB3b aB4b
那么这对什么有好处呢?最常见的应用是,创建一系列的文件或目录列表
参数展开
eg: echo $USER
命令替换
eg: echo $(ls)
双引号
双引号可以阻止单词分割
单引号
参数与表达式都不能生效,直接使用字符串
转义字符
反斜杠
权限
拥有者、组成员和其他人
uid gid group
读取、写入、执行
使用ls命令列出文件信息时,可以看到类似-rwxrwxrwx的字符串
第一个字符表明文件类型:
- - 普通文件
- d 一个目录
- l 符号链接,符号链接的权限属性是虚拟的,真正的权限是所指向文件的属性
- c 字符设备文件
- b 块设备文件
后九个字符是权限属性:
- 前三个是所有者的权限
- 中间三个是所有者的组成员的权限
- 后面三个是所有人的权限
chmod改变文件模式
八进制表示法
符号表示法
进程
查看进程
- ps 查看进程
- ps x 展示所有进程,不管由什么终端控制
- aux “BSD风格”结果,可以查看进程USE,%CPU,%MEM,VSZ,RSS,START
进程状态 Stat
- R 运行中
- S 正在睡眠
- D 不可中断睡眠
- T 已停止
- Z 死进程
- < 高优先级进程
- N 低优先级进程
top 动态查看进程
进程放置到后台
&
进程前后台切换
jobs 查看后台进程
fg %job序号
bg %job序号
停止一个进程
kill pid
kill [-signal] PID
- HUP 挂起 1
- INT 中断(Crtl-c) 2
- KILL 杀死 9
- TERM 终止 15
- CONT 继续 18
- STOP 停止 19
默认为TERM
killall
给多个进程发送信号,杀死所有用户启动的进程
更多相关命令
- pstree 树形结构进程
- vmstat 输出系统资源使用快照,要看到连雪的结果,则在命令后加上更新操作延时的时间
- tload 在终端中的xload程序