p3
终端仿真器(terminal emulater)与 shell 进行交互,让用户访问 shell.
p11
Linux 没有文件扩展名的概念,类 Unix 不使用文件扩展名来决定文件内容或用途,但
有些应用程序却这么做了.
文件名中不要嵌入空格,这回事很多命令行任务变得困难,使用下划线吧.
p15
ls [-a, -d, -F, -h, -l, -r, -S, -t]
p17
less 命令:
PgUp / b 后翻一页 PgDn / Spacebar 前翻 向上/下箭头 向上/下一行 G / g 文本末尾/开头 /chr 查找
p19
- /bin 包含系统启动和运行所必须的二进制文件(程序)
- /boot 包含 Linux 内核,最初的 RAM 磁盘映像以及自启动加载程序
- /boot/grub/grub.conf or menu.lst, 用来配置启动加载程序
- /boot/vmlinuz, Linux 内核
- /dev 包含设备节点的特殊目录,内核将它能够识别的所有设备存放在这个目录
- /etc 包含所有系统层面的配置文件,同时也包含了一系列 shell 脚本.
- /etc/crontab 定义了自动化任务的运行时间
- /etc/fstab 存储设备以及相关挂载点的列表
- /etc/passwd
- /home
- /lib 包含核心系统程序使用的共享库文件
- /lost+found 当文件系统崩溃时,该目录用户恢复分区,一般该目录为空除非有严重问题
- /media 包含可移除设备的挂载点
- /mnt (以前)包含手动挂载的可移除设备的挂载点
- /opt 安装其他可选软件
- /proc
- /root
- /sbin 系统二进制文件
- /tmp
- /usr 包含普通用户使用的所有程序和相关文件
- /usr/bin 放置了一些发行版安装的可执行程序
- /usr/lib /usr/bin 中的程序使用的共享库
- /usr/local 系统使用的程序安装目录,有源代码编译好的程序通常安装在 /usr/local/bin
- /usr/sbin 系统管理程序
- /usr/share 包含 /usr/bin 中程序所使用的全部共享数据,包括默认配置文件,
图标,屏幕背景,音频文件等 - /usr/share/doc 文档文件
- /var 数据库,假脱机文件,用户邮件等
- /var/log 日志文件
p24
通配符:
- *, 任意多个字符
- ?, 单个
- [characters], 任意一个属于字符集中的字符
- [!characters]
- [[:class:]], 匹配任意一个属于指定字符类中的字符
字符类:
- [:alnum:] (任意一个字母或者数字)
- [:alpha:]
- [:digit:]
- [:lower:]
- [:upper:]
p26
cp [-a, -i, -r, -u, -v]
p27
mv [-i, -u, -v]
p28
rm [-i, -r, -f, -v]
p29
ln [-s] item link
- type
- which
- man
- apropos
- info
- whatis: 显示一条命令的简述.
- alias:
alias name='string'; unlias name
p47
- cat: 连接;
cat > lazy_dog.txt - sort
- uniq
- wc
- grep
- head/tail:
tail -f xxx.log - tee
p50
- 标准输出重定向:
ls -l /usr/bin > ls-output.txt - 标准错误重定向:
ls -l /bin/usr 2> ls-error.txt - 标准输出和标准错误重定向到同一文件:
ls -l /bin/usr &> ls.txtls -l /bin/usr > ls.txt 2>&1
- 处理不想要的输出:
ls -l /bin/usr 2> /dev/null
p60
echo
路径名扩展,破浪线扩展,算术扩展(echo $((2+2))), 花括号扩展,参数扩展
双引号,单引号,转义
p70
光标移动
| 组合键 | 作用 |
|---|---|
| ctrl-a | 光标移动到行首 |
| ctrl-e | 光标移动到行尾 |
| ctrl-f | 同右方向键 |
| ctrl-b | 同坐方向键 |
| alt-f | 向前一个字 |
| alt-a | 后 |
| ctrl-l | 等于 clear |
修改文本
| 组合键 | 作用 |
|---|---|
| ctrl-d | 删除光标处的字符 |
| ctrl-t | 光标处的字符和它前面的字符对调 |
| alt-t | 光标处的字和它前面的字对调 |
| alt-l | 光标到字尾的字符转成小写 |
| alt-u | 光标到字尾的字符转成大写 |
p71
剪切和粘贴文本
| 组合键 | 作用 |
|---|---|
| ctrl-k | 剪切从光标到行尾的文本 |
| ctrl-u | 剪切从光标到行首的文本 |
| alt-k | 剪切从光标到当前词尾的文本 |
| alt-backspace | 剪切从光标到词头的文本 |
| ctrl-y | 把 kill-ring 缓冲区的文本粘贴到光标的位置 |
p75
历史记录扩展命令
| 序列 | 行为 |
|---|---|
| !! | 重复最后一个执行的命令 |
| !number | 重复第 number 个命令 |
| !string | 重复最近的以 string 开头的命令 |
| !?string | 重复最近的包含 string 的命令 |
id, chomd, umask, su, sudo, chown, chgrp, passwd
p80
权限对文件和目录的意义
p83
u, g, o, a
p85
umask-设置默认权限; 减; 设置的掩码值只在当前 shell 会话中有用
p86
set uid; set gid; sticky bit
p88
- su 以其他用户和组 ID 的身份来运行 shell
- 需要输入 root 密码
- su - = su -l
- su - -c "command"
- sudo 以量一个用户的身份执行命令
- 输入用户密码
- 不需要启动一个新的 shell 环境,不需要加载另一个用户的运行环境
p95
ps; top; jobs; bg; fg; kill; killall; shutdown.
- pa aux(bsd style) 显示属于每个用户的进程信息
- ps 命令输出的列标题: VSZ 虚拟耗用的内存大小;RSS 实际使用的内存大小
top
- up TIME 正常运行的时间
- load average:NUM, NUM, NUM 前60s,5m,15m
-
负载均值指的是等待运行的进程数:即共享 CPU 资源的处于可运行状态的进程数
-
使进程在后台运行: command &
- 查看从该终端启动的所有作业: jobs
- 使进程回到前台执行: bg jobspec(e.g. %1)
- 使进程移到后台运行: fg josspec(e.g. %1)
- ctrl-c 终止; ctrl-z 暂停
kill 常用信号
- 1: 挂起
- 2: 终端=ctrl-c
- 9: 杀死,最后手段
- 15: 终止,默认信号
- 18: 继续运行
- 19: 暂停
killall 发送信号给多个进程
pstree 树形模式输出进程列表
p109
printenv; set; export; alias
set 会显示 shell 变量和环境变量; printenv 只会显示环境变量
login shell 会话: 会提示用户输入用户名和密码
启动文件
- /etc/profile 全局
- ~/.bash_profile 个人
- ~/.bashlogin 上面没有用这个
- ~/.profile 上面两个都没有用这个(debian 系默认这个)
non-login shell 启动文件
- /etc/bash.bashrc 全局
- ~/.bashrc 个人
p128
J 合并行
/CHAR 搜索
:%s/old/new/gc
- % 表示范围,从第一行到最后一行。e.g. 1,5 1,$
- s 表示替换,g 表示全局, c 表示每次替换前询问
p131
- :n :N 当编辑多个文件时切换
-
:buffers 查看正在编辑的文件列表,:buffer NUM 切换到所选的
-
:e FILENAME 载入另一个文件
- :r FILENAME 将指定的文件内容插入到当前光标之前
- :w FILENAME 相对于另存为
debian系软件包: 低级工具 dpkg; 高级工具 apt-get aptitude
查找
apt-get udpate; apt-cache search NAME
安装
apt-get udpate; apt-get install NAME dpkg --install NAME.deb
删除
apt-get remove NAME
更新
apt-get udpate; apt-get upgrade dpkg --install NAME.deb
列出
dpkg --list
是否安装
dpkg --status NAME
已安装软件相关信息
apt-cache show NAME
某具体文件由哪个软件包安装得到
dpkg --search FILENAME
- mount 挂载系统文件
- umount 卸载系统文件
- fdist 硬盘分区
- mkfs 创建新的文件系统
- dd 向设备写入面向块数据
dd if=input_file of=output_file [bs=block_size [count=blocks]]
- ping: 向网络主机发送 ICMP ECHO_REQUEST 数据包
- traceroute: 显示数据包到网络主机的路由路径;不提供身份信息的路由器用 * 表示;
3 次往返时间 - netstat: 显示网络链接,路由表,网络接口数据,伪链接以及多节点传送成员等信息
- scp
- sftp
locate search_string 依赖搜索数据库,使用 sudo updatedb 更新
find test action options
操作符:使用括号来分隔显得更清楚,注意转义
用户自定义的操作: -exec command '{}' ';' {}表示当前路径,分号表示命令结束
使用 ok 代替 exec 使得每次执行前询问
处理文件名中有空格: find ~ -iname '*.jpg' -print0 | xargs --null ls -l
gzip; bzip2; tar
tar -jcv -f filename.tar.bz2 /path/or/file
tar -jxv -f filename.tar.bz2 -C /path/to/extract
z for gzip, j for bzip2(高质量压缩,牺牲点速度)
tar 利用标准输入输出的有趣用法
$ find playground -name 'file-A' | tar cf - --file-from=- | gzip and $ ssh remote-sys 'tar cf - Documents | tar xf -'
rsync -a|-v|--delete
cat; sort; uniq; cut; paste; join; comm; diff; patch; tr; sed
sort -f --ignore-case -n --numeric-sort -r --reverse -k --key=filed1[,field2] -t --field-seprator=char diff -c output NUM (default 3) lines of copied context -u output NUM (default 3) lines of unified context # GNU 文件系统建议采用以下方式使用 diff diff -Naur old new > diff_file patch < diff_file sort $ echo 'front' | sed '2s/front/back' N 行号 $ 最后一行 addr1,addr2 first~step addr1, +n addr! = 输出当前行号 a 在当前行后附加文本 d 删除当前行 i 在当前行前输入文本 p 打印当前行 s/regexp/replacement/ y/set1/set2 转换,要求等长