- 查找
- man
- help: 内建
- whatis
- which
- whereis
- find
- locate
- grep
- 目录
- ls
- pwd
- cd
- tree
- mkdir
- rmdir
- rm
- 文件
- cat
- cp
- od
- stat
- diff
- sort
- uniq
- cut
- comm
- split
- sed
- awk
- wc
- paste
- dc
- bc
网络
- ping
- ifconfig
- whois
性能
- execsnoop
安全与攻防
- openssl
- nmap
- tshark
- kali
command list
-
Linux
-
查看所有命令:
- bash: 按两次tab
ac: 打印用户连接时间的统计数据
- ac: /var/log/wtmp 由 init(8) 和 login(1) 维护
-d name
输出登录用户name的登录时间(详细时间),当前登录用户可缺省name只要-d
-p
输出所有用户的登录时间(累积时间)
alias: 命令别名
- alias
- alias 新的命令='原命令 -选项/参数
- unalias 命令
- unalias -a 删除所有
- 查看别名
- alias 命令
- 命令 ^+alt+E
- 执行命令而不是别名
- 使用绝对路径
- 在命令前加反斜杠(\)
- 别名配置
- ~/.alias
- .bashrc
- bash中使用alias
- shopt -s expand_alias
- 子进程:login shell会读系统和用户的profile和rc文件
- chmod +x test.sh
- bash --login test.sh
#!/bin/bash --login
shopt expand_aliases
shopt -s expand_aliases
shopt expand_aliases
alias
ll
apt(dnf, yum)
- 包管理器是⽅便软件安装、卸载,解决软件依赖关系的重要⼯具
- CentOS、RedHat 使⽤ yum 包管理器,软件安装包格式为 rpm
- Debian、Ubuntu 使⽤ apt 包管理器,软件安装包格式为 deb
- Fedora 使⽤ dnf 包管理器,软件安装包格式为rpm
- apt
- search:搜索软件
- show:查看软件包信息,详细的安装细节
- show depends 查看软件包依赖关系
- install:安装软件
- update:更新软件包列表
- upgrade:更新已安装的软件包
- full-upgrade:在升级软件包时自动处理依赖关系
- remove:卸载一个软件包但是保留相关的配置文件
- purge: 卸载一个软件包不保留相关的配置文件
- autoremove: 自动删除不需要的包
- clean:删除软件包的备份
- edit-sources:编辑源列表 /etc/apt/sources.list
- ref
- rpm 包格式:
软件名称 软件版本 系统版本 平台
- vim-common-7.4.10-5.el7.x86_64.rpm
- rpm
-q
: 查询软件包-i
: 安装软件包-e
: 卸载软件包
- cheatsheet
- rpm -i xxx.rpm: 安装
- rpm -qa | grep xxx:查找
- rpm -qa | more: 列表
- rpm -e xxx: 卸载,不能有.rpm
- rpm -qf /usr/bin/rpm: 属于哪个安装包
- 升级rpm 格式内核
- 查看内核版本:uname –r
- 升级内核版本 yum install kernel-3.10.0
- 升级已安装的其他软件包和补丁 yum update
- 内核代码
- 安装依赖包:
yum install gcc gcc-c++ make ncurses-devel openssl-devel elfutils-libelf-devel
- 下载并解压缩内核:https://www.kernel.org
- tar xvf linux-5.1.10.tar.xz -C /usr/src/kernels
- 配置内核编译参数:
- cd /usr/src/kernels/linux-5.1.10/
- make menuconfig | allyesconfig | allnoconfig
- 使⽤当前系统内核配置
- cp /boot/config-kernelversion.platform /usr/src/kernels/linux-5.1.10/.config
- 查看 CPU: lscpu
- 编译: make -j2 all
- 安装内核: make modules_install make install
- 安装依赖包:
- rpm 包的问题
- 需要⾃⼰解决依赖关系
- 软件包来源不可靠
- ref
-
- yum search xxx:搜索软件包
- yum install xxx
- yum remove xxx
- yum list
- yum grouplist
- yum groupinstall xxx
-
其他
- CentOS yum 源
- 国内镜像
- yum 配置⽂件:
/etc/yum.repos.d/CentOS-Base.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
- snap
- sudo snap list: 列出计算机上所有snap安装情况
- sudo snap find <软件包名>:在应用商店中查找snap
- sudo snap install <snap软件包名>:安装Snap软件
- sudo snap refresh <snap软件包名>:更新Snap软件
- sudo snap refresh all:更新所有的snap软件包
- sudo snap revert <snap软件包名>:要将Snap还原到以前安装的版本
- sudo snap remove <snap软件包名> :卸载snap软件
- ref
at :在指定时间执行命令或脚本
awk
- awk
- ref
bash
- bash
- (cmd1, cmd2, cmd3):子shell
- $(cmd ) <==>
cmd
:获取命令运行结果 - 后台运行命令
- cmd(or script) &: 注销用户,进程会kill掉
- nohup cmd(or script) &: 注销用户,进程不会kill掉
- screen command
- at
- at -f backup.sh 10 am tomorrow
- watch
- watch df -h
- ref
- Bg, Fg, &, Ctrl-Z – 5 Examples to Manage Unix Background Jobs
- Unix Nohup: Run a Command or Shell-Script Even after You Logout
- Screen Command Examples: Get Control of Linux / Unix Terminal
- Understand at, atq, atrm, batch Commands using 9 Examples
- Watch: Repeat Unix Commands or Shell-Scripts every N seconds
bc ( dc, expr, (()), [] )
-
- 参数:
- i 强制交互模式
- l 使用bc的内置库,bc里有一些数学库,对三角计算等非常实用;
- q 进入bc交互模式时不再输出版本等多余的信息。
- 特殊变量
- ibase,obase 用于进制转换,ibase是输入的进制,obase是输出的进制,默认是十进制;
- scale 小数保留位数,默认保留0位。
- 进制转换
- 十进制转其它
- echo “obase=2; 10” | bc 结果:1010
- echo “obase=8; 100” | bc 结果:144
- echo “obase=16; 100” | bc 结果:3E8
- 其他进制转十进制
- echo “ibase=2;obase=1010;1010” 结果:10
- echo “ibase=8;obase=12;144” 结果:100
- echo “ibase=16;obase=A;3E8” 结果:1000
- shell
- echo $((16#122)) 或者 echo $((0x122)) # 16 进制转10进制
- echo $((2#1010)) # 2 进制转10进制
- echo $((8#122)) # 8 进制转10进制
- 十进制转其它
- 参数:
-
dc: 负数用_下划线,不能用减号
-
显示命令
- P:弹出堆栈最顶端的值不显示
- p:输出堆栈最顶端的值不弹出
- n:弹出堆栈最顶端的值显示,不换行
- f:显示堆栈的所有内容
- q :退出
-
运算类型
- + 加: 弹出w1, w2 把 w1 + w2 压栈
- - 减
- * 乘
- / 除
- % 余数 w1 % w2
- ~ 依次将w2/w1与w2%w1压栈,先压/ 再压 %
- ^ 指数: w1 ^ w2
- v 开方 sqrt(w1)
- | 依次弹出w1 w2与w3,将 w3 ^ ((int)w2) (mod w1) 压栈。w1 w3 需为整数
-
栈操作:
- c : 清空栈
- d : 将栈顶元素复制并压栈
- r : 交换栈顶嘴上两元素
-
非交互选项
- dc -e “expression” <==> echo “expression” | dc
- dc -e “3 2 + p” <==> echo "3 2 + p " | dc
- dc -f expressionfile
- dc -e “expression” <==> echo “expression” | dc
-
交互
- 3 2 + p 打印结果
-
-
expr : 多功能计算器
- 书写规则
- 用空格隔开每个项
- 将反斜杠(\)放在 Shell 特殊字符前面。
- 对包含空格和其他特殊字符的字符串用引号括起来。
- 四则运算
expr \( 10 + 10 \)\* 2 + 100
expr 10 + 10
expr 20 - 10
expr 20 / 2
expr 10 \* 10
expr 10 \% 10
- 逻辑运算
|
&
=, >, >=, <, <=, !=
- 字符串
- match STR REGEX
:
: MAC
- substr STR POS LEN
- index STR SUBSTR
- length STR
- match STR REGEX
- 书写规则
-
(( )) & [] : 算术逻辑运算
- 运算符号全部不需要转义
- 运算符
|
位或||
若前后两者都不为0,则返回1,否则返回0&
位与&&
若前者为0,不再对后者进行处理,否则对后者处理,后者不为0时返回1<
<=
==
!=
>=
>
+
-
*
/
%
-
ref
bzip2
- 见tar
cat (echo printf hexdump od xxd): 二进制,文本输出
- 参数:
-n
: 打印行号-b
: 打印行号,空白行不编号
echo:打印字符串和变量值
- 无引号,单引号,双引号
- 单引号将所有字符都看成普通字符
- 双引号会解释$、\和`这三种特殊字符
- 不加引号会解释所有特殊字符
- cheatsheet:
- 打印双引号
- echo ‘“Hello World”’
- echo ““Hello World””
- 打印双引号
- 参数
-n
: 去除换行符,默认添加换行符,也可以通过-e控制-e
: 激活转义字符- echo测试颜色
- echo -e “\033[文字背景颜色;文字颜色m 你要显示的内容 \033[0m”
- -e 选项∶表示允许反斜杠(对字符)转义。
- \033[颜色 1;颜色2m∶ 称为转义序列,它本身是一个整体,中间不要有空格。
- \033[∶转义序列的开始。其中\O33 代表 Esc 符号,也可以使用
\E
或\e
来代替 - 颜色1和颜色 2∶表示字体的前景色或背景色,至于颜色1和颜色2哪一个表示前景色,哪一个表示背景色,由其设定的数值来决定,前景色和背景色的数值空间是不同的。
- m∶ 转义序列的终止标志。
- \033[∶转义序列的开始。其中\O33 代表 Esc 符号,也可以使用
- \033[0m∶ 表示将颜色恢复回原来的配色。
- tput
- tput setab∶ 用于设置背景色;
- tput setaf∶ 用于设置前景色。
- 颜色
- 0 黑色
- 1 红色
- 2 绿色
- 3 黄色
- 4 蓝色
- 5 洋红色
- 6 黄色
- 7 白色
- echo -e “\033[文字背景颜色;文字颜色m 你要显示的内容 \033[0m”
- echo 写二进制文件
- echo -e -n “\x11\x22” > test
- echo测试颜色
第一种方法∶ 定义颜色变量#!/bin/bash
# 定义颜色变量,还记得吧,\033、\e和\E是等价的
#红
RED='\E [1; 31m'
# 绿
GREEN='\E [1;32m'
黄
YELOW='\E [1;33m'
蓝
BLUE='\E [[1; 34m'
# 粉红
PINK='\E[1; 35m'
# 清除颜色
RES= '\E [0m'
# 真正使用时,我们通过echo -e来调用
echo -e"s{RED}Red colorS(RES)"
echo -e"${YELOW}Yelow color${RES}"
echo -e "${BLUE}Blue color${RES}"
echo -e"${GREEN}Green color${RES)"
echo -e "${PINK}Pink color${RES}"
这种方法的原理是,把转义序列定义为变量,echo 时直接引用变量就行了。
第二种方法∶定义颜色动作#!/bin/bash
# 定义颜色动作,把echo -e也定义到变量中
SETCOLOR_SUCCESS="echo -en \\E[1;32m"
SETCOLOR_FAILURE="echo -en \\E[1;31m"
SETCOLOR_WARNING="echo-en \\E[1;33m"
SETCOLOR_NORMAL="echo -en \\E[0;39m"
# 使用时直接调用颜色动作即可
sSETCoLOR_SUCCESS && echo SUCCESS
SSETCOLOR_FAILURE && echo FAILURE
SSETCOLOR_WARNING && echo WARNING
$SETCOLOR_NORMAL && echo NORMAL
- head
-n<数字>
:指定显示头部内容的行数;-c<字符数>
:指定显示头部内容的字符数;-v
:总是显示文件名的头信息;-q
:不显示文件名的头信息。
-C
:hexdump -C <===> od -tx1 -tc
- more
-<数字>
:指定每屏显示的行数;+<数字>
:从指定数字的行开始显示。-c
:不进行滚屏操作。每次刷新整个屏幕;
- printf
- printf 输出格式 输出字符:类C
- od
-txN
:N个字节用16进制显示-tdN
:N个字节用10进制显示-tc
: 字符显示
- tail
-n<N>或——line=<N>
:输出文件的尾部N(N位数字)行内容。-f<name/descriptor>或;--follow<nameldescript>
:显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化。“-f”与“-fdescriptor”等效;
- xxd
-c
:每列多少字节,默认16,一般8,16,32-g
:几个字节一组,默认2-l
: 总共显示多少字节-b
:二进制位串显示,可以用bc实现类似功能-i
:用C语言字节数组定义的方式显示各个字节-ps
:以 postscript的连续16进制转储输出,也叫做纯16进制转储。-r
:数字用ASCII码实现,逆向转换。将16进制字符串表示转为实际的数echo -n "0000000: 3331 0a" | xxd -r
-u
:大写字母显示A-F,默认小写字母
- ref
cd
- 绝对路径,相对路径
- cd ~: go home
- cd -: 上一个目录
- cd .
- cd …
- .bash_profile
- CDPATH
- export CDPATH=.:~:/etc:/var
- alias
- alias cd…=“cd …”
- alias cd…=“cd …/…”
- alias cd…=“cd …/…/…”
- alias cd…=“cd …/…/…/…”
- alias cd…=“cd …/…/…/…/…”
- shopt –s cdspell # 自动纠正cd命令的目录名输入错误, ubuntu2020不支持
- shopt -s 查看
- mkdircd
- CDPATH
function mkdircd () { mkdir -p "$@" && eval cd "\"\$$#\""; }
## rocedu
set -o vi # vi mode in shell
export CDPATH=.:~:/etc:/var #CDPATH
# 多级cd
alias cd..="cd .."
alias cd...="cd ../.."
alias cd....="cd ../../.."
alias cd.....="cd ../../../.."
alias cd......="cd ../../../../.."
# mkdircd
function mkdircd () { mkdir -p "$@" && eval cd "\"\$$#\""; }
- 目录栈
- dirs:显示目录栈
- pushd:将目录压入目录栈
- popd:将目录弹出目录栈
chmod
- chmod
- u
- g
- o
clear:清除当前屏幕上的信息
- clear
- cf. cls (Windows, clear screen)
comm
- comm
-1
:不显示只在第一个文件出现的内容;-2
:不显示只在第二个文件中出现的内容; f2-3
:不显示同时在两个文件中都出现的内容。交集- 用法
- comm -12 f1 f2:显示交集
- comm -13 f1 f2:显示f2-f1
- comm -23 f1 f2:显示f1-f2
cp
- cp:copy
- cp src dst
-R/r
:复制目录要用-r
,递归处理,将指定目录下的所有文件与子目录一并复制;-f
:强行复制文件或目录,不论目标文件或目录是否已存在;-i
:覆盖既有文件之前先询问用户;-p
:保留源文件或目录的属性;-a
:与"-dpR"参数相同-d
:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;-b
:覆盖已存在的文件目标前将目标文件备份
crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
curl
- curl网站开发指南
- curl 的用法指南
- curl
- v: 详细的HTTP请求
- K或–config 指定配置文件,默认.curlrc
cut: 显示行中的指定部分,删除文件中指定字段
-
- 可以将一串字符作为列来显示:
N-
:从第N个字节、字符、字段到结尾N-M
:从第N个字节、字符、字段到第M个(包括M在内)字节、字符、字段;-M
:从第1个字节、字符、字段到第M个(包括M在内)字节、字符、字段。
- 某个范围的字节、字符指定为字段:
-b
表示字节;-c
表示字符;英文同-b, 中文就不一样了,可以用-nb-f
表示定义字段。
-d D
指定分割符,默认分隔符是tab
- 可以将一串字符作为列来显示:
-
cheatsheet
- cut -d: -f1 /etc/passwd :Displays the unix login names for all the users in the system.
- free | tr -s ’ ’ | sed ‘/^Mem/!d’ | cut -d" " -f2 :Displays the total memory available on the system.
date
mm——代表月份
dd