linux 命令
常用命令
ls
- ls 相关通配符与正则表达式.
ls *.md
ls Linux?.md
ls Linux[34].md
ls Linux[a-f].md
- ls 相关通配符与正则表达式.
cd
cd -
跳至上一次操作的路径- 文件的连接数… 软硬链接.
pwd
clear
history
- 绝对路径 & 相对路径
- tab 按键
- 可补全一些文件名、路径等
- 双击可提示多个
touch
创建一个文件- 使刚刚修改的
~/.bashrc
生效:source .bashrc
0x00 搜索
find 搜索路径 参数 搜索内容
-name
‘文件名’-iname
不区分文件名大小写
-size
-type
- d 仅查找文件夹
- f 进查找普通文件
-ctime
-mtime
-atime
-n
n 天以内.
-printf
指定输出格式(文件名中有特殊字符时使用)%p
File’s name.
maxdepth
&mindepth
搜索深度-ok
或-exec
执行的命令{} \;
- 高级用法 :
find ./ -name "*.md" -size +10k | xargs ls -alh
- 高级用法 :
grep -r '搜索内容' 搜素路径
grep -r "颜色空间" ./ -n
find ./ -name "*.h" | xargs grep "字符串"
- 在某个目录下的头文件中找到某个字符串
histroy | grep dpigs*
- 寻找历史命令行中相关的命令
grep -R -n "软件"
- 递归搜索并显示行号;
grep -v
0x01 压缩解压缩
gzip
*.gz
bzip2
*.bz2
tar
打包:c
创建压缩文件x
释放(解)压缩文件v
打印提示信息f
指定压缩包名z
使用gzip
压缩文件xxx.tar.gz
j
使用bzip2
方式压缩文件xxx.tat.bz2
- 压缩:
tar 参数 压缩包名字 原材料
tar zcvf test.tar.gz file/dir
- 解压缩:
tar zxvf tes .tar.gz -C 解压目录
rar
- 需要安装,
rar a 压缩包名 原材料
rar x 压缩包名 解压目录名
- 操作目录时加
-r
zip
zip 参数 压缩包名 原材料
unzip 压缩包名 -d 解压目录
who
: 查看当前系统有谁在线与否;
0x02 软件的安装、卸载、更新
- ubuntu 在线安装:
sudo apt-get install 安装包名
sudo apt install 安装包名
- ubuntu 16.04 以上
- 源码安装:
- 下载源码, 查看源码中的
readme.md
文档, 根据不同编译需求安装sudo apt-get remove 安装包名
- 下载源码, 查看源码中的
- 软件卸载:
sudo apt-get autoremove
- 系统中的软件更新:
- 搜索
Software and Updates(软件更新)
, 测试并选择其他站点中最快的镜像站点, 用来加速 update.- 一般选择 阿里云 的站点即可;
sudo apt-get update
更新本地软件列表sudo apt-get dist-upgrade
更新所有的软件.- Ubuntu解决:无法获得锁
- kill 占用的进程( linux 只允许开一个 apt-get,当然 apt-get 和新立得也是只能同时开一个):
ps -aux | grep apt-get
sudo kill PID
- 直接强制删除 lock 文件:
sudo rm /var/lib/dpkg/lock
sudo rm /var/lib/apt/lists/lock
- kill 占用的进程( linux 只允许开一个 apt-get,当然 apt-get 和新立得也是只能同时开一个):
- 搜索
- 系统清理:
sudo apt-get clean
清空缓存/var/cashe/apt/archives
sudo apt-get autoclean
dpigs -H --lines=20
- 倒序查看当前占用比较大的软件包名, 以便卸载;
- 软件包安装:
- ubuntu:
*.deb
sudo dpkg -i *.deb
sudo dpkg -r 软件名
- ubuntu:
- 删除不用的内核(慎用):
uname -a
查看内核版本;dpkg --get-selections | grep linux
查看系统所有内核;sudo apt-get remove 【内核名】
内核号较小的一般都能删除.sudo dpkg -P 包名
删除已删除包的配置文件(状态位deinstall
的包);
磁盘清理 :sudo dd if=/dev/zero of=/0bits bs=20M
将碎片空间填充上 0,结束的时候会提示磁盘空间不足,忽略即可sudo rm /0bits
删除第二步的填充,如果用df -h
会发现可用的虚拟空间增加许多,但是实际的磁盘空间没有缩减
- Linux wc 命令
wc -l
统计行数 :find . -name "*.o" | wc -l
ls pwd/*.c | wc -l
0x03 vi / vim
vimtutor
- 内置教程
vi
linux 自带vim
需安装- 三种工作模式
- 命令行模式
- 编辑模式
- 末行模式
- 插件安装 :
- 安装 vim-plug :
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
- 拷贝
.vimrc
配置文件 - 通过 vim-plug 安装插件,
VIM
开启 vim, 通过:
输入以下命令 :PlugStatus
查看插件状态PlugInstall
安装插件PlugClean
插件清理PlugUpdate
更新插件
- 安装 vim-plug :
- 快捷键 :
ctrl+w+w
在窗口之间切换u
撤回,ctrl+r
反撤回F2
tagbar 开关brew install ctags
安装依赖
- NERDTree :
F3
开关:b <Key Word>
切换多 buffer:bn
,:bp
切换前后 bufferq
退出
- VIM 的缓冲区 Buffer :
- 是一块内存区域,用于存储着正在编辑的文件。在保存缓冲区并退出时,内容也随之被写回原始文件。
- 在启动vi时,可以指定多个文件做为参数,例如
vi file1 file2 file3
,参数中的所有文件都会被载入缓冲区,但vi只会在窗口中显示第一个文件。 - 可以使用
:help buffers
命令,查看关于缓冲区的帮助信息
- vim 插件
fzf
ctrl + o
打开文件搜索ctrl + a
打开文本搜索(基于Ag
)ctrl + e
打开的 buffer 中搜索切换
-
原生快捷键 :
h 左 j 下 k 上 l 右 w 向前移动到下一个单词的开头 } 跳转到下一个段落 ^ 跳转到当前行的首部 $ 跳转到当前行的末尾 y yank(复制) d delete(删除) c change 删除文本,将删除的文本存到寄存器中,进入插入模式 -------------------- iw 一个单词 p 一个段落 s 一个句子 (或) 一对() {或} 一对{} [或] 一对[] <或> 一对<> t XML标签 " 一对"" ' 一对'' ` 一对`` w 移动到下一个单词的开头 W 移动到下一个词组的开头 e 移动到下一个单词的结尾 E 移动到下一个词组的结尾 b 移动到前一个单词的开头 B 移动到前一个词组的开头 ge 移动到前一个单词的结尾 gE 移动到前一个词组的结尾 0 跳到本行第一个字符 i ^ 跳到本行第一个非空字符 i g_ 跳到本行最后一个非空字符 i $ 跳到本行最后一个字符 i n| 跳到本行第 n 列 i gg 跳转到第一行 G 跳转到最后一行 nG 跳转到第n行 n% 跳到文件的n% Ctrl-e 向下滚动一行 Ctrl-d 向下滚动半屏 Ctrl-f 向下滚动一屏 Ctrl-y 向上滚动一行 Ctrl-u 向上滚动半屏 Ctrl-b 向上滚动一屏 zt 将当前行置于屏幕顶部附近 zz 将当前行置于屏幕中央 zb 将当前行置于屏幕底部 ' 跳转到标记的行 ` 跳转到标记的位置(行和列) G 跳转到行 / 向后搜索 ? 向前搜索 n 重复上一次搜索,相同方向 N 重复上一次搜索,相反方向 % 查找匹配 ( 跳转上一个句子 ) 跳转下一个句子 { 跳转上一个段落 } 跳转下一个段落 L 跳转到当前屏幕的最后一行 M 跳转到当前屏幕的中间 H 跳转到当前屏幕的第一行 [[ 跳转到上一个小节 ]] 跳转到下一个小节 :s 替换 :tag 跳转到tag定义
- 我推荐你从
h,j,k,l, w,b, G,/,?,n
开始 - 过滤器 :
- ref :
- VIM学习笔记 过滤器(Filter)) :
:{range}!{motion}{filter}
- range :
- 使用
%
指代整个文件 4,6
表示指定行数
- 使用
- motion :
- 使用
s
表示 sed
- 使用
- range :
- 常用命令 :
:%! grep xxxx
过滤 buffer 中的文本并替换 buffer (处理日志时有用)grep -v
反向过滤
:%! cat -n
在首行增加行号:!sh
可以调用 Shell 来执行当前文件中的命令%s/,/\r\t/g
用于将,
改为换行 +\t
- 拆分 json 等时较为有用;
\n
表示行尾,是一个位置。\r
表示回车,是一个字符- 查找时,
\n
代表换行符,\r
代表回车符 - 替换时,
\r
代表换行,\n
代表空字符
- ref :
- 搜索 :
/xxx
查找 xxx 关键字;/\vAAA|BBB
同时查找 AAA 和 BBB 关键字(相当于grep
的-E
);
0x04 文本查找替换
# 删除匹配行
sed -i '/onechunk.xsl/d'
## 文本查找替换
sed -i "s/python/python3/" ~/.autojump/bin/autojump
# 特殊字符使用 \ (空格, #, / 等均需要转义)
sed -i "s/\#\!\/usr\/bin\/env\ python/\#\!\/usr\/bin\/env\ python3/" ~/.autojump/bin/autojump
# 文件名中包含特殊字符(如: 空格, 中文)
# find ./ -name "*.md" -printf "\"%p\"" 在文件路径周围添加引号
find ./ -name "*.md" -printf "\"%p\"\n"| xargs sed -i "s/<\/font>\ /<\/font>/"
0x02 pdf 工具
命令 | 功能 |
---|---|
pdfunite | 合并 pdf |
pdftotext | pdf 转 text |
pdftops | pdf 转 ops |
pdftoppm | pdf 转 ppm |
pdftohtml | pdf 转 html |
pdftocairo | pdf 转 cairo |
pdfsig | pdf 签名 |
pdfseparate | 拆分 pdf |
pdfinfo | pdf 元数据 |
pdfimages | pdf 转图片 |
pdffonts | 提取 pdf 字体 |
pdfdetach | 删除 pdf 内置附件 |
pdfattach | 给 pdf 添加附件 |
pdf2ps | pdf 转 ps |
pdf2dsc | pdf 转 dsc |
youtube 下载
yt-dlp --list-formats URL
: 展示所有格式yt-dlp -fxxx+xxx URL
: 下载指定的两个列表数据yt-dlp -f 'bv[ext=mp4]+ba[ext=m4a]' --merge-output-format mp4 URL
yt-dlp
比youtube-dl
下载块一些;
yt-dlp -f 'bv[ext=mp4]+ba[ext=m4a]' --merge-output-format mp4 --download-archive videos.txt https://www.youtube.com/playlist......
- 下载整个 playlist 的视频
~/bin/yt-dlp -f "bestvideo+bestaudio" -o "%(upload_date>%Y-%m-%d)s_%(id)s_%(title)s_%(resolution)s.%(ext)s" --merge-output-format mp4 URL
正则表达式
- 反向过滤(反向选取/取反) :
^((?!你的规则).)*$
- 多个关键词的话, 可用
|
隔离开来 :^((?!filter_sdk|Bundle|Sqm|SQMDEBUG).)*$
- 多个关键词的话, 可用
二进制工具
xxd
- Usage :
xxd [options] [infile [outfile]]
-c
设定一行显示几个字节, 默认16-bytes
-g
设定以几个字节为一块,默认为2-bytes
, 0 为紧密排布模式-b
以二进制(0/1)的形式查看文件内容-i
output in C include file style. (将某个文件以 C 数组的形式输出!)xxd -C -i xxx.bin > out.c
-p
没有右侧的 ascii 表-r
从 outfile 恢复到原 infile 格式- 一般与 vim 配合使用 :
vim xxx -b
:%! xxd -g 1
- 修改(删除某个字节会被填充 00)
%! xxd -r
- Usage :
hexcurse
- 终端上的二进制编辑器, 可以直接搜索二进制(且无换行烦恼)
ctrl+?
帮助ctrl+f
搜索
less
-N
显示行号-m
显示百分比
xxd -g 1 xxx | less -N -m
- 查看二进制, 注意不自动识别出来换行
mac U 盘格式化
- 查看磁盘与分区 :
diskutil list
- 删除分区 :
diskutil eraseVolume "Free Space" ExEFI /dev/disk2
- 格式化成 FAT32 :
diskutil partitionDisk /dev/disk2 1 MBR "MS-DOS FAT32" "2" 15GB
- 可被打印机正确识别