shell
1. 文件系统
1.1. 文件权限
chmod修改文件权限 (change mode)chmod 777 $file- 777 分别是用户、用户组、其他
- 读 4、写 2、执行 1
chmod +x $file- 设定 =,增加 +,删除 -
- 读 r、写 w、执行 x
chown修改拥有者 (change owner)chown $user $fileOrDir修改用户chown :$group $fileOrDir修改用户组chown $user:$group $fileOrDir修改两者-R递归
1.2. 目录操作
touch $file新建文件ls列出文件/目录,后面可以指定目录-A包含点号开头的隐藏文件/目录-d仅显示目录-l详细信息-R递归目录
cd $dir切换当前目录pushd $dirpopd可以临时到一个目录里操作,末尾加> /dev/null屏蔽输出
pwd当前目录-P真实目录,而非 link 路径
mkdir新建目录-p新建多级目录,已存在不报错-m 777配置权限
cp $src1 $src2 ... $dst复制文件或目录-a相当于-pdr-i已存在询问是否覆盖-r递归-u较新时覆盖
rm $fileOrDir ...删除文件或目录-r递归
mv $src1 $src2 ... $dst移动文件或目录(dst 不是目录会顺带重命名)-i已存在询问是否覆盖-u较新时覆盖
1.3. 链接
ln -s $fileOrDir $newLink软链接,注意 fileOrDir 用绝对/相对路径的效果不同ln $fileOrDir $newLink硬链接
删除软链接:rm $link,不要在链接末尾加 "/",不加才是链接本身
1.4. 查找文件
find $dir $filtersdir 省略表示当前目录-name "*.c"按文件名查找-iname "*.c"文件名忽略大小写-type c文件类型,如数据文件、目录等-size 2k按大小查找-size +1k -3k可能是大于 1k 小于 3k 的文件(不含等于)- c = 1 byte
- b = 512 byte
- k = 1024 byte
- M = 1048576 byte
locate filename查找路径中包含子串的文件- 通过数据库查找,比 find 快,用
updatedb更新数据库
- 通过数据库查找,比 find 快,用
2. 文件处理
2.1. 文件查看
cat $file1 $file2 ...查看文件-A相当于-vET,分别是 特殊字符、行末 ($)、tab (^I)-b行号(非空行)-n行号(所有行)cat $src1 $src2 > $dst拼接
tac倒着查看文件nl查看文件,显示行号more一页页翻,空格下翻一页,回车下翻一行,/str查找 strless一页页翻headtail前几行、后几行
2.2. grep
grep $pattern $file用正则表达式匹配,查看匹配的行(子串匹配即可)-C 5获取结果的前后 5 行-c仅统计匹配的行数-i大小写不敏感-n行号-v查看不匹配的行-w要求整行匹配-R递归
2.3. sed
sed command $file按行执行操作并查看结果-i修改源文件- s 命令
s/pattern/replacement/flags将 pattern 替换为 replacement,字符/需要用\/表示,s 前可以加数字表示仅操作某行- flags 留空,表示替换每行第一个
- 数字 n 表示替换每行第 n 个
g替换所有p配合-n,打印仅匹配的行
- d 命令
d,d 前加数字表示删除某行 - a 命令
a\str,a 前加数字表示在某行后插入一行内容 - i 命令
i\str,i 前加数字表示在某行前插入一行内容 - c 命令
- y 命令
- 字母前
- 加一个数字表示仅操作某行
2,3表示从 2 到 32,$表示从 2 到末尾
2.4. awk
awk '/pattern/{command}' $file按行操作- pattern 正则表达式
- 没有匹配规则(
'{command}')就匹配所有行 $0整行- 默认按空白符分割,$1、$2、$3 等表示第 i 个单词(字段)
-F设置分割符$2="aaa"; print $0 "!"将字段 2 赋值并打印整行和感叹号(但是之前的缩进会被去掉)BEGIN{}{}END{}在执行命令前执行 BEGIN,最后执行 END
2.5. vim
配置
~/.vimrc
text
set number
set syntax=on
set tabstop=4
set softtabstop=4
set shiftwidth=4
set ruler
set autoindent
set cindent
set expandtab
set showcmd
set scrolloff=3
set foldmethod=manual
set nocompatible
set completeopt=preview,menu
set nobackup
set magic
set noeb
set backspace=2
set mouse=a
set selection=exclusive
set selectmode=mouse,key
set showmatch
set smartindent- 清空
ggdG - 保存并退出
:wq/ZZ - 转到第 100 行
:100
2.6. nano
- 保存并退出:Ctrl+S,Ctrl+X
- 清空内容:Ctrl+Home,Alt+T
- 撤销:Alt+U
3. 压缩
unar 工具
3.1. tar.gz
- 解压
tar zxf $file.tar.gz解压到同级目录里v打印处理的文件-C $dst指定解压路径tar tvf $file.tar.gz查看内部文件但不解压--strip-components 1删除最外层目录($input/)
- 压缩
tar zcf $file.tar.gz $fileOrDir...tar.gz 压缩
3.2. gz
- 解压
gunzip $file.gz -c > $file - 压缩
gzip $file -c > $file.gz
3.3. zip
- 解压
unzip $file.zip解压到同级目录 - 压缩
zip $file.zip $fileOrDir... -rq
3.4. tar.xz
- 解压
tar Jxf $file.tar.xz解压到同级目录
3.5. tar.bz2
- 解压
tar jxf $file.tar.bz2解压到同级目录
4. 进程
4.1. 查看进程
ps查看进程ps -ef
top动态地查看进程htop更好地查看运行情况
4.2. 杀进程
kill
4.3. 后台运行
Ctrl+Z暂停当前任务jobs查看正在运行的任务bg 1(也可能是bg [1])任务 1 转到后台运行fg 1(也可能是fg [1])任务 1 转到前台运行- 似乎是其他终端不可见的
5. 硬件
5.1. cpu
lscpu
- 架构:
lscpu的 Architecture - 支持的指令集:
lscpu的 Flags - 型号:
lscpu的 Model name - 主频:
lscpu的 CPU MHz - 核数:
lscpu的 CPU(s) - 线程数:
lscpu的 Thread(s) per core - Cache 容量:
lscpu的 L1d cache, L1i cache, L2 cache, L3 cache - 大小端:
lscpu的 Byte Order
- cache line 大小:
cat /sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size,单位字节,一般是 64 cat /proc/cpuinfo查看每个 CPU
5.2. 内存
cat /proc/meminfo查看内存大小dmidecode内存频率
numa
numactl -H查看 numa 节点和对应 cpunumactl --C=0-7 --membind=0 ./xxx绑核绑内存
5.3. 硬盘
df -h查看硬盘大小和占用情况du -hs查看当前目录的空间占用du -hs $(ls -A)查看所有文件和下一级目录的空间占用
lsblk查看硬盘的大小、挂载情况mount /dev/xxx Dir挂载硬盘到一个空文件夹
启动时挂载:修改 /etc/fstab
6. 网络
sh
sudo apt install net-tools lsofifconfig查看 iplsof -i:8080查看端口占用netstat -nat | grep -I "80"查看端口连接的 ip
wget
wget $url- -o 指定输出
- -c 断点续传
7. 其他
watch "ps -ef"每两秒执行命令并显示
7.1. 环境变量
env | grep foo查找某个环境变量export foo=bar设置环境变量unset foo取消环境变量foo=bar $CMD临时设置环境变量source xxx.sh执行文件并继承环境,缩写为. xxx.sh
添加 path
code ~/.bashrc- 末尾添加
export PATH=xxx:$PATH
7.2. 日期时间
date日期和时间date -s "YYYY/MM/DD hh:mm:ss"设置系统时间
7.3. 动态链接
- 查找文件的符号
strings $file | grep $xxx - glibc 版本
ldd --version
7.4. 包管理
- 包管理
which CMD查看 CMD 的文件路径whereis package查看 package 的路径
7.5. os
uname -a系统名、发行版(可能看不到)lsb_release -a发行版,需要安装 lsbls /etc/*release然后 cat 查看具体版本