文章目录
- 课上用过的Linux命令
-
- 分类
- command list
-
- ac: 打印用户连接时间的统计数据
- alias: 命令别名
- apt(dnf, yum)
- at :在指定时间执行命令或脚本
- awk
- bash
- bc ( dc, expr, (()), [] )
- bzip2
- cat (echo printf hexdump od xxd): 二进制,文本输出
- cd
- chmod
- clear:清除当前屏幕上的信息
- comm
- cp
- crontab
- curl
- cut: 显示行中的指定部分,删除文件中指定字段
- date
- dc: 逆波兰式计算器
- dd: 底层复制文件并进行格式转换
- diff 逐行比较文本文件的异同
- dig: Domain Information Groper
- docker
- du: disk usage
- echo
- declare(env,export,set)
- env
- execsnoop
- expr
- export
- fdisk
- find(xargs)
- free
- gcc
- gdb
- git
- gmssl
- grep
- gzip
- hexdump
- history: 显示命令行历史
- hostname
- ifconfig
- iostat
- ip
- iterm2
- join: 带外键的paste
- ln
- ls
- lsof
- mkdir
- man (help info)
- mii-tool:查看、管理介质的网络接口的状态,设置协商方式
- mount
- mpstat: multiprocessor statistics
- mtr
- mv
- nc: netcat,路由器设置
- netstat (ss,ip)
- nmap
- nmcli
- nslookup : 查询DNS,name server lookup
- objdump
- openssl(gmssl tassl)
- paste : 按列和并文件
- ping: 测试主机之间网络的连通性
- prolog
- pwd
- read
- rm
- rmdir: 删除空目录
- route:
- rsync: 远程数据同步
- sed
- shell
- sleep
- sort
- split: 文件分割
- ss
- ssh
- stat : status,properties of a file for filesystem
- stdin stdout stderr
- strace: 对系统调用和信号传递的跟踪结果进行分析
- sudo
- systemctl
- tar(bzip2,gzip,zip)
- tcpdump
- tee
- time
- tmux
- top: 性能监测
- tr
- traceroute tracert
- tshark
- uname
- uniq
- uptime
- user
- vagrant
- vim
- vmstat: Virtual Memory Statistics
- watch
- wc: word count
- wget
- who
- xargs
- xxd
- zip
- Ubuntu
- CentOS
- Fedora
- Mac OS
- openEuler
- 其他
- 参考资料
课上用过的Linux命令
分类
基础
-
查找
- 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 新的命令='原命令 -选项/参数
-
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)
apt
-
包管理器是⽅便软件安装、卸载,解决软件依赖关系的重要⼯具
- CentOS、RedHat 使⽤ yum 包管理器,软件安装包格式为 rpm
- Debian、Ubuntu 使⽤ apt 包管理器,软件安装包格式为 deb
- Fedora 使⽤ dnf 包管理器,软件安装包格式为rpm
-
-
search:搜索软件
-
show:查看软件包信息,详细的安装细节
- show depends 查看软件包依赖关系
-
install:安装软件
-
update:更新软件包列表
-
upgrade:更新已安装的软件包
-
full-upgrade:在升级软件包时自动处理依赖关系
-
remove:卸载一个软件包但是保留相关的配置文件
-
purge: 卸载一个软件包不保留相关的配置文件
-
autoremove: 自动删除不需要的包
-
clean:删除软件包的备份
-
edit-sources:编辑源列表 /etc/apt/sources.list
-
-
ref
dnf: 新一代的rpm软件包管理器
dpkg
rpm
-
rpm 包格式:
软件名称 软件版本 系统版本 平台- vim-common-7.4.10-5.el7.x86_64.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 -
下载并解压缩内核: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
-
- yum search xxx:搜索软件包
- yum install xxx
- yum remove xxx
- yum list
- yum grouplist
- yum groupinstall xxx
-
其他
-
yum 配置⽂件:
/etc/yum.repos.d/CentOS-Base.repowget -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
-
ref
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
-
-
交互
- 3 2 + p 打印结果
-
-
expr : 多功能计算器
-
书写规则
- 用空格隔开每个项
- 将反斜杠(\)放在 Shell 特殊字符前面。
- 对包含空格和其他特殊字符的字符串用引号括起来。
-
四则运算
expr ( 10 + 10 )* 2 + 100expr 10 + 10expr 20 - 10expr 20 / 2expr 10 * 10expr 10 % 10
-
逻辑运算
|&=, >, >=, <, <=, !=
-
字符串
-
match STR REGEX
:: MAC
-
substr STR POS LEN
-
index STR SUBSTR
-
length STR
-
-
-
(( )) & [] : 算术逻辑运算
-
运算符号全部不需要转义
-
运算符
|位或||若前后两者都不为0,则返回1,否则返回0&位与&&若前者为0,不再对后者进行处理,否则对后者处理,后者不为0时返回1<<===!=>=>+-*/%
-
-
ref
bzip2
- 见tar
cat (echo printf hexdump od xxd): 二进制,文本输出
cat
-
参数:
-n: 打印行号-b: 打印行号,空白行不编号
echo:打印字符串和变量值
-
无引号,单引号,双引号
-
单引号将所有字符都看成普通字符
-
双引号会解释$、\和`这三种特殊字符
-
不加引号会解释所有特殊字符
-
cheatsheet:
-
打印双引号
- echo ‘“Hello World”’
- echo ““Hello World””
-
-
-
参数
-
-n: 去除换行符,默认添加换行符,也可以通过-e控制 -
-e: 激活转义字符-
-
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 -n “\x11\x22” > test
-
-
-
第一种方法∶ 定义颜色变量#!/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:不显示文件名的头信息。
hexdump
-C:hexdump -C <===> od -tx1 -tc
less: less is more
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
-
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
-
- u
- g
- o
clear:清除当前屏幕上的信息
- clear
- cf. cls (Windows, clear screen)
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
-
- 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——代表日期
hh——代表 24 小时制的小时
mi——代表分钟
yyyy——代表年
ss——代表秒
-
设置
-
date {mmddhhmiyyyy.ss}
- date 013122192009.53
- date +%Y%m%d -s “20090131”
- date -s “01/31/2009 22:19:53”
- date -s “31 JAN 2009 22:19:53”
- date set=“31 JAN 2009 22:19:53”
-
-
显示
-
选项
- %D 日期(月/日/年)
- %d 一个月中的第几天 (01…31)
- %m 月份 (01…12)
- %y 年份的后两位 (00…99)
- %a 当前语言下星期的缩写 (Sun…Sat)
- %A 当前语言下星期的全拼 (Sunday…Saturday)
- %b 当前语言下月份的缩写 (Jan…Dec)
- %B 当前语言下的月份的全称 (January…December)
- %H 24 小时制小时 (00…23)
- %I 12 小时制小时 (01…12)
- %Y 年份(1970…)
-
实例
-
date
-
date --date=“now”
-
date --date=“today”: 以上三条等价
-
计算一组命令花费的时间
#!/bin/bash
start=$(date +%s)
nmap man.linuxde.net &> /dev/null
end=$(date +%s)
difference=$(( end - start ))
echo $difference seconds.
dc: 逆波兰式计算器
- 见 bc
dd: 底层复制文件并进行格式转换
-
- if=file,
- of=file,
-
cheatsheet
- dd if=/dev/zero of=s.txt bs=1M count=1:产生一个1M的文件s.txt
-
ref
diff 逐行比较文本文件的异同
dig: Domain Information Groper
-
-f querylist: 批量查询querylist中的多个域名-t type:指定Type-q XXX:显式指定域名-x ip:反向查询,ip->dns+tcp用TCP代替UDP,默认使用UDP+domain=: 默认追加域(前缀)+trace:详细跟踪全过程+short:精简输出
-
cheatsheet
- dig :查询根域“.”的NS记录
- dig . :查询根域“.”的A记录
- dig @8.8.8.8 www.besti.edu.cn A
-
cf nslookup
docker
-
ref
du: disk usage
-
-h: 人类可读的格式
-
ref
echo
- 见cat
declare(env,export,set)
-
环境变量、自定义变量
- 范围不同
- 环境变量可以在其进程的子进程中继续有效,而自定义变量则无效。
-
declare:显示当前 Shell中定义的所有变量,包括用户的环境变量和自定
义变量,该命令的输出按变量名进行排序。 -
env: 显示当前用户的环境变量,但不会显示其自定义变量。
-
export:功能同env 一样,也是显示当前用户的环境变量,只不过该命令
的输出是按变量名进行排序的。export <==> declare -X。经过export的变量就成了环境变量,否则就是自定义变量。- export PATH=$PATH:XXXdirs
-
set:功能同declare一样,显示当前 Shell中定义的所有变量,包括用户
的环境变量和自定义变量。 -
区别与联系
- env 和 export 显示的是环境变量。
- set 和 declare 显示的是环境变量和自定义变量。
-
ref
env
- 见 declare
execsnoop
expr
- 见 bc
export
- 见 declare
fdisk
find(xargs)
-
-
find path -option [ -print ] [ -exec -ok |xargs |grep ] [ command {} ; ] -
UNIX/Linux文件系统每个文件都有三种时间戳:
-
-amin -atime: 访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。访问时间(access time),指的是文件最后被读取的时间,可以使用touch命令更改为当前时间. -
修改时间(-mtime/天,-mmin/分钟): 文件最后一次修改时间。修改时间(modify time),指的是文件内容最后被修改的时间,修改动作可以使echo重定向、vi等等;
-
-cmin -ctime: 变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。变化时间(change time),指的是文件本身(权限、所属组、位置…)最后被变更的时间,变化动作可以使chmod、chgrp、mv等等; -
-mmin -mtime:修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。修改时间(modify time),指的是文件内容最后被修改的时间,修改动作可以使echo重定向、vi等等; -
时间范围
-mtime n: n为数字,意思为在n天之前的“一天之内”被更改过内容的文件-mtime +n: 列出在n天之前(不含n天本身)被更改过内容的文件名-mtime -n: 列出在n天之内(含n天本身)被更改过内容的文件名
-
-
-
exec(ok)
-
cheatsheet
- find . -type f -exec ls -l {} ;
- find -type f -mtime -1 -exec rm {} ;
-
-
xargs(execute arguments)
-
管道与xargs
- 管道∶将前面的标准输出作为后面的"标准输入"。
- 管道∶将前面的标准输出作为后面的"命令参数"。
-
xargs:命令参数过滤器
-
xargs的默认命令是echo,空格是默认分割符,xargs的标准输入中出现的"换行符、空格、制表符"都将被空格取代。
-nN:每次处理N个参数-0: xargs提供了-0选项,允许将 NULL 作为分隔符,而 find命令也心有灵犀地提供了对应的选项-print0来产生以 NULL 字符作为分隔符的输出。xargs 的-0选项不仅可以将分隔符从默认的空格变成NULL,还会将单引号、双引号、反斜线等统统默认为是普通字符。所以说,-0选项特别适合处理命令参数中含有引号、空格、反斜线的情况。-d: 指定分割符,默认是空格-p: 需要确认-E arg:遇到arg就停止
-
cheatsheet
-
find ~ -name ‘*.log’ -print0 | xargs -0 rm -f :删除home的log,单独的rm 文件参数不能太多, 此外参考 find -print0和xargs -0原理及用法
- for((i=0; i<10000; i++)); do touch {i}.log; done
- rm $(find . -type f -name “*.log”): 参数过长
-
find /etc -name “*.conf” | xargs ls -l :-name后要有引号
-
cat url-list.txt | xargs wget -C :用wget下载列表中的多个文件
-
find / -name *.jpg -type f -print | xargs tar -cvzv images.tar.gz: 把找到的jpg 压缩成一个文件
-
ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory
-
find . -type f | xargs -p -n1 rm -f:一次删除一条,还要确认
-
-
-
-
ref
free
-
-
选项
-
-k,-m,-g:K,M,G为单位显示,向下取整,有坑特别-g -
-o:输出中"-/+ buffers/cache∶"这一行就消失了- (-buffers/cache) used内存数: 第一部分Mem行中的 used – buffers – cached
- (+buffers/cache) free内存数: 第一部分Mem行中的 free + buffers + cached
-
-
free命令中的buffers和cached值,是读取自/proc/meminfo 文件中的对应值。而/proc中的绝大部分内容是 Linux 内核(fs/proc/meminfo.c)来控制和更新的。
- buffers 是块设备 I/O相关的缓存页。
- cached 是普通文件相关的缓存页。
-
-
gcc
-
-
gcc xx.c: a.out -
gcc xx.c -o yy: -
编译四阶段
-
gcc参数
- ESc, iso
-
预处理(Pre-Processing)
-
编译(Compiling)
-
汇编(Assembling)
-
链接(Linking)
-
-
gcc *.c -
project
- src,include,lib,bin,doc,readme.md,makefile,compile.sh
gcc -Iincludegcc -Llib
-
静态库
- gcc -c xx.c -o xx.o
- ar rcs libxx.a xx.o
- gcc [-static] main.c -L. -lxx
-
动态库
-
方式1
-
gcc -fPIC xx.c -o xx.o
-
gcc -shared -o libxx.so xx.o
-
gcc main.c -L. -lxx
-
库的处理
- 拷贝到
/usr/lib,/lib,ldconfig export LD_LIBRARY_PATH=./
- 拷贝到
-
-
-
调试
-
-g 生成调试信息。GNU 调试器可利用该信息。-gstabs:以 stabs 格式声称调试信息, 但是不包括 gdb 调试信息。-gstabs+:以 stabs 格式声称调试信息, 并且包含仅供 gdb 使用的额外调试信息。-ggdb:将尽可能的生成 gdb 的可以使用的调试信息。
-
-
other
-
-ansi:关闭 gnu c中与 ansi c 不兼容的特性, 激活 ansi c 的专有特性(包括禁止一些 asm inline typeof 关键字, 以及 UNIX,vax 等预处理宏)。 -
-include file:ref-Iincludegcc hello.c -include /root/pianopan.h
-
-ansi:只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色, 例如 asm 或 typeof 关键词。 -
-Dmacro:以字符串"1"定义 macro 宏。相当于 C 语言中的 #define macro -
-Dmacro=defn:以字符串"defn"定义 MACRO 宏。 -
-UMACRO: 取消对 MACRO 宏的定义。 #undef macro -
-undef:取消对任何非标准宏的定义 -
优化
-O0不进行优化处理。-O 或 -O1优化生成代码。-O2进一步优化。-O3比 -O2 更进一步优化,包括 inline 函数。
-
-m-
-m486: 针对 486 进行代码优化。 -
-m32: 生成32位机器的汇编代码- sudo apt install gcc-multilib :
-
-m64: 生成64位机器汇编代码
-
-
-shared:生成共享目标文件。通常用在建立共享库时。 -
-static: 禁止使用共享连接,没有这个选项优先使用动态库 -
Warning
-w:不生成任何警告信息。-Wall:生成所有警告信息。-Werror:警告转化为错误信息,并在警告发生时终止编译
-
-std
-
-
ref
-
gdb
gdb
ddd
jdb
-
ref
pdb
-
ref
git
gmssl
- cf openssl
grep
-
-
grep [options] pattern [files]
-
-n显示行号 -
-r递归子目录 -
-v不匹配的 -
-c匹配个数 -
-i不区分大小写 -
-E<=> egrep :支持扩展的正则表达式 -
-F<=> fgrep : -
--color: 结果用彩色高亮(默认) -
-A N:After,匹配的那一行后N行也显示 -
-B N:Before,匹配的那一行前N行也显示 -
-C N:A+B,匹配的那一行前N行,后N行也显示 -
-w WORD:精确匹配WORD,正则表达式中的"词(word)",一般是由字母、数字和下划线所组成的,且词与词之间通常使用空格、制表符或换行符分隔。'<WORD>'
-
-
-
cheatsheet
- grep -nir xxx /usr/include
gzip
- 见tar
hexdump
- 见cat
history: 显示命令行历史
-
-
选项
-c: 清除内存中命令历史,重启shell会读.bash_history内容-w: 内存历史覆盖.bash_history内容,先-c 再-w
-
export HISTTIMEFORMAT=’%F %T ':命令时间戳(后面要有一两个空格)
-
定位到上一条命令
- 1.使用向上方向键,并回车执行。
- 2.输入!!并回车执行。
- 3.输入!-1并回车执行。
- 4.输入Ctrl+P组合键并回车执行。
-
定位到任一条命令
- !标号:叹号定位法
-
Ctrl+R : 搜索命令历史
-
安全
-
export HISTCONTROL=ignorespace
- 输入重要命令,前面加空格
-
export HISTIGNORE=*,输入重要命令,export HISTIGNORE=
-
-
hostname
hostname
hostnamectl
-
hostnamectl set-hostname centos7.test
- 注意修改/etc/hosts⽂件,把新主机名和ip(127.0.0.1)对应好
ifconfig
ifconfig
-
ifconfig
-
ifconfig <接⼝> <IP地址> [netmask ⼦⽹掩码 ]
-
eth0 第⼀块⽹卡(⽹络接⼝)
-
你的第⼀个⽹络接⼝可能叫做下⾯的名字
- eno1 板载⽹卡
- ens33 PCI-E⽹卡
- enp0s3 ⽆法获取物理信息的 PCI-E ⽹卡
- CentOS 7 使⽤了⼀致性⽹络设备命名,以上都不匹配则使⽤ eth0
-
⽹卡命名规则受 biosdevname 和 net.ifnames 两个参数影响
- 编辑
/etc/default/grub⽂件,增加biosdevname=0 net.ifnames=0 ... - 更新 grub :
# grub2-mkconfig -o /boot/grub2/grub.cfg - 重启:
# reboot
- 编辑
-
-
ifup <接⼝>
ifdown <接⼝>
iostat
iostat
mpstat
ip
- cf netstat
iterm2
join: 带外键的paste
-
-a n: 显示第n个文件中没有共同列导致的行-1 m-2 n: 第一个文件的m列和第二个文件中的第n列相同,不指定mn 默认1
ln
-
ln: ln from to
-
默认硬链接
-
ln -s 符呈链接,软链接
-
链接方式
- 硬链接
- 软链接(符号链接,快捷方式)
-
ls
ls
- `-a`:显示隐藏文件
- `-l`:长格式,显示详细信息
- `-r`: 降序,默认升序
- `-t`: 按修改时间排序
- `-R`:递归显示,类似tree
- `-h`: 大小按人类可读方式显示
- [通配符](https://weread.qq.com/web/reader/f5c32ac072287278f5cc0e6k45c322601945c48cce2e120)
-
文件类型
-
- 普通文件.
- d 目录文件
- b 块特殊文件
- c 字符特殊文件
- l 符号链接
- f 命名管道
- s 套接字文件
-
-
文件权限
-
字符权限表示方法
- r 读
- w 写
- x 执行
-
数字权限的表示方法
- r = 4
- w = 2
- x = 1
-
-
rw- r-x r- - 1 userame groupname mtime filename
- rw- 文件属主的权限
- r-x 文件属组的权限
- r- - 其他用户的权限
-
-
-
目录权限
- x 进入目录
- rx 显示目录内的文件名
- wx 修改目录内的文件名
-
特殊权限
- SUID 用于二进制可执行文件,执行命令时取得文件属主权限
- SGID 用于目录,在该目录下创建新的文件和目录,权限自动更改为该目录的属组
- SBIT(stick位) 用于目录,该目录下新建的文件和目录,仅 root 和自己可以删除
-
ref
chmod 修改文件、目录权限
-
参数
u: 属主g: 属组o: 其他a: 所有+: 增加权限-: 减少权限=: 设置权限
chown 更改属主、属组
chgrp 可以单独更改属组,不常用
stat
umask
lsof
mkdir
-
- mkdir -p a/b/c/d/e :多级目录, 如果已经存在,忽略
- mkdir -m 0700 dir :指定目录属性mode rwx
man (help info)
man:manual
-
man(manual)
-
man -k <=> apropose
-
man -f <=> whatis
-
man printf (默认1 <=> man 1 printf)
- man 3 printf
-
man -a :在所有的man帮助手册中搜索;
-
-
ref
-
- openEuler:
help
-
内部命令:shell内置的命令,其他的叫外部命令
- 内部命令:help cmd
- 外部命令:cmd --help
- type
info
mii-tool:查看、管理介质的网络接口的状态,设置协商方式
mount
mpstat: multiprocessor statistics
- cf iostat
mtr
mv
-
-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。-b:当文件存在时,覆盖前,为其创建一个备份;-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
nc: netcat,路由器设置
-
-l选项∶ 使用监听模式,监控传入的数据。-z选项∶ 一旦建立连接后马上断开,而不发送和接收任何数据。-v选项∶ 打印详细输出信息。-n选项∶直接使用 IP地址,而不使用域名服务器来查询其域名。-w选项∶设置连接的超时时间,单位为秒。-u选项∶使用 UDP建立连接。默认使用TCP建立连接。
-
cheatsheet
-
聊天服务器
- Server: nc -l port
- Client: nc serverip port
-
端口扫描
- nc -z -v -n -w 2 127.0.0.1 20-23
-
文件传输
- Server: nc -lv port < filename
- Client: nc -nv serverip port > filename
-
目录传输
- Server∶ tar -czvPf - /root/book/ | nc -l 12345
- 客户端∶nc-n116.255.245.207 12345 | tar -xzvPf -
-
netstat (ss,ip)
netstat
-
net-tools包
- arp∶ 管理系统的 ARP 信息。
- hostname∶ 管理系统主机名
- ifconfig∶ 配置网络接口。
- netstat∶ 展示网络连接、路由表、接口统计等信息。
- route∶ 管理 IP 路由。
- ipmaddr∶ 管理组播地址。
- iptunnel∶ 管理和配置隧道。
- mi-tool∶ 管理网络接口状态。
- nameif∶设置基于MAC地址的网络接口名称。
- plipconfig∶ 管理 PLIP协议设备参数。
- slattach∶指定网络接口关联到特定的串行线路。
-
netstat 五大功能
- 显示网络连接信息
- 显示路由信息
- 显示接口统计信息
- 显示无效连接信息
- 显示组播成员信息
-
cheatsheet
-
netstat -ano 查看机器端口占用情况
-
Windows
- netstat -ano|findstr 端口号 :显示占用端口的pid
- tasklist|findstr “pid” :根据上面pid 获得进程名
-
Linux
-
-
netstat -alepn :常用
-
netstat Socket -x -alepn
-
-
ref
ip
-
ip
-
-4- 点分十进制
-
-6-
目的地址
- 单播,即 unicast,就是传统意义上的点到点通信。
- 多播,顾名思义,就是一对多通信,数据报会被传送到多台计算机。
- 任播,这是 IP V6协议中新增的一种地址类型。任播指的是将数据报传送到一组计算机中的某一台,那到底会是哪一台呢,一般情况下会采用"就近策略"来选取。
-
冒号16进制
- 零省略∶ 如果某一位是 000C,则可以直接写成 C ;
- 零压缩∶如果一个地址是 FEO4∶0∶0∶0∶0∶0∶0∶B2,那么可以直接写成 FEO4∶∶B2 ;
- 四六混搭∶ 在 IPv4 地址向 IPv6 地址转换时,完全可以这样写 0∶0∶0∶0∶0∶0∶128.10.3.2,再使用零压缩就变成了∶128.10.3.2
-
-
-
cheatsheet
-
ifconfig -> ip addr show: 显示网络接口(网卡)信息
-
ip addr add 192.168.1.111/24 dev plp2 :为服务器网卡添加IP
-
ip addr add 192.168.1.111/24 dev plp2 :为服务器网卡添加IP
-
ip link set plp2 down:关闭网卡(网络接口)
-
ip link set plp2 up:激活网卡(网络接口)
-
ip route show :查看路由信息
-
ip route add/del
-
ip rout add default via 192.168.1.6: 指定默认网关
-
ip neigh show: 操作ARP表
- STALE∶邻居存在,但目前处于不可达状态。
- DELAY∶探测邻居可达与否的数据包已经发出,正在等待邻居的回复。
- REACHABLE∶ 邻居存在,而且是可达的。
-
ss: Socket Statistics
-
iproute2模块
-
sudo apt install iproute iproute-doc
-
brew install iproute2mac
-
-
iproute2 工具
- ip∶管理路由、设备、策略和隧道等。
- ss∶ 展示系统套接字相关信息。
- tc∶ 管理流量控制策略。
- nstat∶ 用于网络统计。
- bridge∶ 管理桥接地址和设备。
- ifcefg∶ 进行IP管理,以替代ifconfig命令。
- Instat∶ 展示网络状态
-
隧道技术:(Linux Kernel2.2后)隧道技术是一种"网络协议的数据包被封装在另一种网络协议的数据包之中,以进行数据网络传输"的技术,这种技术其实也是 VPN的技术基础和前提。
- GRE隧道技术,则是隧道技术中应用最为普遍和广泛的一个,它的全称为通用路由封装(Generic Routing Encapsulation),是由 Net-Smiths 和 Cisco 来主导设计的。它工作在网络层,目前已被绝大多数电信设备厂商所支持。
- GRE隧道技术,则是隧道技术中应用最为普遍和广泛的一个,它的全称为通用路由封装(Generic Routing Encapsulation),是由 Net-Smiths 和 Cisco 来主导设计的。它工作在网络层,目前已被绝大多数电信设备厂商所支持。
-
-
ss
- 选项
-
cheatsheet
-
ss -s: 当前服务器的网络连接统计
-
ss -l: 所有打开的网络端口
- ss -pl 会列出进程名
-
ss -a : 所有连接
- ss -ta: 所有TCP连接
- ss -ua: 所用UDP连接
- ss -wa: 所有RAW连接
- ss -xa: 所有Unix Sockets
返回目录
-