课上用过的Linux命令

课上用过的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

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)

apt

  • 包管理器是⽅便软件安装、卸载,解决软件依赖关系的重要⼯具
  • 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
  • Ubuntu中apt与apt-get命令的区别

dnf: 新一代的rpm软件包管理器

dpkg

rpm

  • 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
  • download rpm

yum

  • yum
  • 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

  • snap
  • sudo snap list: 列出计算机上所有snap安装情况
  • sudo snap find
  • sudo snap install
  • sudo snap refresh
  • sudo snap refresh all:更新所有的snap软件包
  • sudo snap revert
  • sudo snap remove
  • ref
  • Ubuntu使用snap安装常用软件

返回目录

at :在指定时间执行命令或脚本

返回目录

awk

返回目录

bash

返回目录

bc ( dc, expr, (()), [] )

  • bc
  • 参数:
    • 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”
    • dc -f expressionfile
  • 交互
    • 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
  • 逻辑运算
    • |
    • &
    • =, >, >=, <, <="," !="</code"><!--,-->
  • 字符串
    • match STR REGEX
    • :: MAC
    • substr STR POS LEN
    • index STR SUBSTR
    • length STR
  • (( )) & [] : 算术逻辑运算
  • 运算符号全部不需要转义
  • 运算符
    • | 位或
    • || 若前后两者都不为0,则返回1,否则返回0
    • & 位与
    • && 若前者为0,不再对后者进行处理,否则对后者处理,后者不为0时返回1
    • <
    • ==
    • !=
    • >=
    • >
    • +
    • -
    • *
    • /
    • %
  • ref
  • Linux-shell-算术运算{expr、bc、dc、(( ))和[ ]}

返回目录

bzip2

cat (echo printf hexdump od xxd): 二进制,文本输出

  • 参数:
  • -n: 打印行号
  • -b: 打印行号,空白行不编号

echo :打印字符串和变量值

  • 无引号,单引号,双引号
  • 单引号将所有字符都看成普通字符
  • 双引号会解释$、\和这三种特殊字符</li> <li>不加引号会解释所有特殊字符</li> <li>cheatsheet:<ul> <li>打印双引号</li> <li>echo '"Hello World"'</li> <li>echo ""Hello World""</li> </ul> </li> <li>参数</li> <li><code>-n</code>: 去除换行符,默认添加换行符,也可以通过-e控制,可以运行下面命令体会<ul> <li>echo "ljp"</li> <li>echo -n "ljp"</li> <li>echo -ne "ljp\n"</li> <li>echo "ljp" | od -tx1</li> <li>echo -n "ljp" | od -tx1</li> <li>echo -ne "ljp\n" | od -tx1</li> </ul> </li> <li><code>-e</code>: 激活转义字符<ul> <li><a href="https://blog.csdn.net/weixin_42182501/article/details/86561801">echo测试颜色</a></li> <li>echo -e "\033[文字背景颜色;文字颜色m 你要显示的内容 \033[0m"<ul> <li>-e 选项∶表示允许反斜杠(对字符)转义。</li> <li>\033[颜色 1;颜色2m∶ 称为转义序列,它本身是一个整体,中间不要有空格。</li> <li>\033[∶转义序列的开始。其中\O33 代表 Esc 符号,也可以使用 <code>\E</code>或 <code>\e</code>来代替</li> <li>颜色1和颜色 2∶表示字体的前景色或背景色,至于颜色1和颜色2哪一个表示前景色,哪一个表示背景色,由其设定的数值来决定,前景色和背景色的数值空间是不同的。</li> <li>m∶ 转义序列的终止标志。</li> <li>\033[0m∶ 表示将颜色恢复回原来的配色。</li> <li>tput</li> <li>tput setab∶ 用于设置背景色;</li> <li>tput setaf∶ 用于设置前景色。</li> <li>颜色<ul> <li>0 黑色</li> <li>1 红色</li> <li>2 绿色</li> <li>3 黄色</li> <li>4 蓝色</li> <li>5 洋红色</li> <li>6 黄色</li> <li>7 白色</li> </ul> </li> </ul> </li> <li><a href="https://blog.csdn.net/ustccw/article/details/79038269">echo 写二进制文件</a></li> <li>echo -e -n "\x11\x22" > test</li> </ul> </li> </ul> <pre><code>第一种方法∶ 定义颜色变量#!/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 </code></pre> <h4>head</h4> <ul> <li><a href="https://man.linuxde.net/head">head</a></li> <li><code>-n<数字><!--数字--></code>:指定显示头部内容的行数;</li> <li><code>-c<字符数><!--字符数--></code>:指定显示头部内容的字符数;</li> <li><code>-v</code>:总是显示文件名的头信息;</li> <li> <p><code>-q</code>:不显示文件名的头信息。</p> </li> <li> <p><code>-C</code>:hexdump -C</p> </li> </ul> <h4>less: less is more</h4> <ul> <li><a href="https://man.linuxde.net/less">less</a></li> </ul> <h4>more</h4> <ul> <li><a href="https://man.linuxde.net/more">more</a></li> <li><code>-<数字><!--数字--></code>:指定每屏显示的行数;</li> <li><code>+<数字><!--数字--></code>:从指定数字的行开始显示。</li> <li><code>-c</code>:不进行滚屏操作。每次刷新整个屏幕;</li> </ul> <h4>printf</h4> <ul> <li><a href="https://man.linuxde.net/printf">printf</a></li> <li>printf 输出格式 输出字符:类C</li> </ul> <h4>od</h4> <ul> <li><a href="https://man.linuxde.net/od">od</a></li> <li><code>-txN</code>:N个字节用16进制显示</li> <li><code>-tdN</code>:N个字节用10进制显示</li> <li><code>-tc</code>: 字符显示</li> </ul> <h4>tail</h4> <ul> <li><a href="https://man.linuxde.net/tail">tail</a></li> <li><code>-n<n>或——line=<n></n></n></code>:输出文件的尾部N(N位数字)行内容。</li> <li><code>-f<name descriptor>或;--follow<nameldescript></nameldescript></name></code>:显示文件最新追加的内容。"name"表示以文件名的方式监视文件的变化。"-f"与"-fdescriptor"等效;</li> </ul> <h4>xxd</h4> <ul> <li><a href="https://www.linuxidc.com/Linux/2019-03/157513.htm">xxd</a></li> <li><code>-c</code> :每列多少字节,默认16,一般8,16,32</li> <li><code>-g</code> :几个字节一组,默认2</li> <li><code>-l</code>: 总共显示多少字节</li> <li><code>-b</code> :二进制位串显示,可以用bc实现类似功能</li> <li><code>-i</code>:用C语言字节数组定义的方式显示各个字节</li> <li><code>-ps</code>:以 postscript的连续16进制转储输出,也叫做纯16进制转储。</li> <li><code>-r</code>:数字用ASCII码实现,逆向转换。将16进制字符串表示转为实际的数<ul> <li><code>echo -n "0000000: 3331 0a" | xxd -r</code></li> </ul> </li> <li><code>-u</code>:大写字母显示A-F,默认小写字母</li> <li>ref</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>cd</h3> <ul> <li>绝对路径,相对路径</li> <li>cd ~: go home</li> <li>cd -: 上一个目录</li> <li>cd .</li> <li> <p>cd ..</p> </li> <li> <p>.bash_profile</p> </li> <li>CDPATH<ul> <li>export CDPATH=.:~:/etc:/var</li> </ul> </li> <li>alias<ul> <li>alias cd..="cd .."</li> <li>alias cd...="cd ../.."</li> <li>alias cd....="cd ../../.."</li> <li>alias cd.....="cd ../../../.."</li> <li>alias cd......="cd ../../../../.."</li> </ul> </li> <li>shopt –s cdspell # 自动纠正cd命令的目录名输入错误, ubuntu2020不支持<ul> <li>shopt -s 查看</li> </ul> </li> <li>mkdircd</li> </ul> <pre><code>function mkdircd () { mkdir -p "$@" && eval cd "\"\$$#\""; } </code></pre> <pre><code>## 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 "\"\$$#\""; } </code></pre> <ul> <li>目录栈</li> <li>dirs:显示目录栈</li> <li>pushd:将目录压入目录栈</li> <li>popd:将目录弹出目录栈</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>chmod</h3> <ul> <li><a href="https://man.linuxde.net/chmod">chmod</a></li> <li>u</li> <li>g</li> <li>o</li> </ul> <h3>clear:清除当前屏幕上的信息</h3> <ul> <li><a href="https://man.linuxde.net/clear">clear</a></li> <li>cf. cls (Windows, clear screen)</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>comm</h3> <ul> <li><a href="https://man.linuxde.net/comm">comm</a></li> <li><code>-1</code>:不显示只在第一个文件出现的内容;</li> <li><code>-2</code>:不显示只在第二个文件中出现的内容; f2</li> <li><code>-3</code>:不显示同时在两个文件中都出现的内容。交集</li> <li>用法<ul> <li>comm -12 f1 f2:显示交集</li> <li>comm -13 f1 f2:显示f2-f1</li> <li>comm -23 f1 f2:显示f1-f2</li> </ul> </li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>cp</h3> <ul> <li><a href="https://man.linuxde.net/cp">cp</a>:copy</li> <li>cp src dst</li> <li><code>-R/r</code>:复制目录要用 <code>-r</code>,递归处理,将指定目录下的所有文件与子目录一并复制;</li> <li><code>-f</code>:强行复制文件或目录,不论目标文件或目录是否已存在;</li> <li><code>-i</code>:覆盖既有文件之前先询问用户;</li> <li><code>-p</code>:保留源文件或目录的属性;</li> <li><code>-a</code>:与"-dpR"参数相同</li> <li><code>-d</code>:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;</li> <li><code>-b</code>:覆盖已存在的文件目标前将目标文件备份</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>crontab</h3> <ul> <li><a href="https://www.linuxcool.com/crontab">crontab</a></li> <li><a href="https://www.linuxprobe.com/how-to-crontab.html">crontab实例</a></li> </ul> <pre><code>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 </code></pre> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>curl</h3> <ul> <li><a href="http://www.ruanyifeng.com/blog/2011/09/curl.html">curl网站开发指南</a></li> <li><a href="http://www.ruanyifeng.com/blog/2019/09/curl-reference.html">curl 的用法指南</a></li> <li><a href="https://man.linuxde.net/curl">curl</a></li> <li>v: 详细的HTTP请求</li> <li>K或--config 指定配置文件,默认.curlrc</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>cut: 显示行中的指定部分,删除文件中指定字段</h3> <ul> <li><a href="https://man.linuxde.net/cut">cut</a></li> <li>可以将一串字符作为列来显示:<ul> <li><code>N-</code>:从第N个字节、字符、字段到结尾</li> <li><code>N-M</code>:从第N个字节、字符、字段到第M个(包括M在内)字节、字符、字段;</li> <li><code>-M</code>:从第1个字节、字符、字段到第M个(包括M在内)字节、字符、字段。</li> </ul> </li> <li>某个范围的字节、字符指定为字段:<ul> <li><code>-b</code> 表示字节;</li> <li><code>-c</code> 表示字符;英文同-b, 中文就不一样了,可以用-nb</li> <li><code>-f</code> 表示定义字段。</li> </ul> </li> <li><code>-d D</code> 指定分割符,默认分隔符是tab</li> <li>cheatsheet</li> <li> <p>cut -d: -f1 /etc/passwd :Displays the unix login names for all the users in the system.</p> </li> <li> <p>free | tr -s ' ' | sed '/^Mem/!d' | cut -d" " -f2 :Displays the total memory available on the system.</p> </li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>date</h3> <ul> <li><a href="https://man.linuxde.net/date">date</a></li> </ul> <pre><code>mm——代表月份 dd——代表日期 hh——代表 24 小时制的小时 mi——代表分钟 yyyy——代表年 ss——代表秒 </code></pre> <ul> <li>设置</li> <li>date {mmddhhmiyyyy.ss}<ul> <li>date 013122192009.53</li> <li>date +%Y%m%d -s "20090131"</li> <li>date -s "01/31/2009 22:19:53"</li> <li>date -s "31 JAN 2009 22:19:53"</li> <li>date set="31 JAN 2009 22:19:53"</li> </ul> </li> <li>显示</li> <li>选项<ul> <li>%D 日期(月/日/年)</li> <li>%d 一个月中的第几天 (01..31)</li> <li>%m 月份 (01..12)</li> <li>%y 年份的后两位 (00..99)</li> <li>%a 当前语言下星期的缩写 (Sun..Sat)</li> <li>%A 当前语言下星期的全拼 (Sunday..Saturday)</li> <li>%b 当前语言下月份的缩写 (Jan..Dec)</li> <li>%B 当前语言下的月份的全称 (January..December)</li> <li>%H 24 小时制小时 (00..23)</li> <li>%I 12 小时制小时 (01..12)</li> <li>%Y 年份(1970...)</li> </ul> </li> <li>*<em>实例<br>- date<br>- date --date="now"<br>- date --date="today": 以上三条等价<br>- date -d 'Jan 1 1970 +18000 days'</em></li> </ul> <p>计算一组命令花费的时间</p> <pre><code>#!/bin/bash start=$(date +%s) nmap man.linuxde.net &> /dev/null end=$(date +%s) difference=$(( end - start )) echo $difference seconds. </code></pre> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>dc: 逆波兰式计算器</h3> <ul> <li>见<a href="#cmdbc">bc</a></li> </ul> <h3>dd: 底层复制文件并进行格式转换</h3> <ul> <li><a href="https://man.linuxde.net/dd">dd</a></li> <li>if=file,</li> <li>of=file,</li> <li>cheatsheet</li> <li>dd if=/dev/zero of=s.txt bs=1M count=1:产生一个1M的文件s.txt</li> <li>ref</li> <li><a href="https://www.cnblogs.com/ginvip/p/6370836.html">linux命令总结dd命令详解</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>diff 逐行比较文本文件的异同</h3> <ul> <li><a href="https://man.linuxde.net/diff">diff</a></li> <li>diff f1 f2 :正常格式</li> <li>diff -c f1 f2: 上下文格式</li> <li>diff -u f1 f2: 合并格式</li> <li>ref</li> <li><a href="http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html">读懂diff</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>dig: Domain Information Groper</h3> <ul> <li><a href="https://man.linuxde.net/dig">dig</a></li> <li><code>-f querylist</code> : 批量查询querylist中的多个域名</li> <li><code>-t type</code>:指定Type</li> <li><code>-q XXX</code> :显式指定域名</li> <li><code>-x ip</code> :反向查询,ip->dns</li> <li><code>+tcp</code> 用TCP代替UDP,默认使用UDP</li> <li><code>+domain=</code>: 默认追加域(前缀)</li> <li><code>+trace</code>:详细跟踪全过程</li> <li><code>+short</code>:精简输出</li> <li>cheatsheet</li> <li>dig :查询根域"."的NS记录</li> <li>dig . :查询根域"."的A记录</li> <li>dig @8.8.8.8 www.besti.edu.cn A</li> <li>cf <a href="#cmdnslookup">nslookup</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>docker</h3> <ul> <li>ref</li> <li><a href="https://www.docker.com/">docker</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>du: disk usage</h3> <ul> <li><a href="https://man.linuxde.net/du">du</a></li> <li><code>-h</code>: 人类可读的格式</li> <li>ref</li> <li><a href="https://www.cnblogs.com/peida/archive/2012/12/10/2810755.html">每天一个linux命令:du命令</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>echo</h3> <ul> <li>见<a href="#cmdcat">cat</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>declare(env,export,set)</h3> <ul> <li>环境变量、自定义变量</li> <li>范围不同</li> <li>环境变量可以在其进程的子进程中继续有效,而自定义变量则无效。</li> <li><a href="https://man.linuxde.net/declare">declare</a>:显示当前 Shell中定义的所有变量,包括用户的环境变量和自定 义变量,该命令的输出按变量名进行排序。</li> <li><a href="https://man.linuxde.net/env">env</a>: 显示当前用户的环境变量,但不会显示其自定义变量。</li> <li><a href="https://man.linuxde.net/export">export</a>:功能同env 一样,也是显示当前用户的环境变量,只不过该命令 的输出是按变量名进行排序的。export</li> <li>set:功能同declare一样,显示当前 Shell中定义的所有变量,包括用户 的环境变量和自定义变量。</li> <li>区别与联系</li> <li>env 和 export 显示的是环境变量。</li> <li>set 和 declare 显示的是环境变量和自定义变量。</li> <li>ref</li> <li><a href="https://www.cnblogs.com/anylemons/p/7765201.html">Linux环境变量命令——env、export、set</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>env</h3> <ul> <li>见<a href="#cmddeclare">declare</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>expr</h3> <ul> <li>见<a href="#cmdbc">bc</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>export</h3> <ul> <li>见<a href="#cmddeclare">declare</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>fdisk</h3> <ul> <li><a href="https://man.linuxde.net/fdisk">fdisk</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>find(xargs)</h3> <ul> <li><a href="https://man.linuxde.net/find">find</a></li> <li><code>find path -option [ -print ] [ -exec -ok |xargs |grep ] [ command {} \; ]</code></li> <li> <p>UNIX/Linux文件系统每个文件都有三种时间戳:</p> <ul> <li> <p><code>-amin -atime</code>: 访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。访问时间(access time),指的是文件最后被读取的时间,可以使用touch命令更改为当前时间.</p> </li> <li> <p>修改时间(-mtime/天,-mmin/分钟): 文件最后一次修改时间。修改时间(modify time),指的是文件内容最后被修改的时间,修改动作可以使echo重定向、vi等等;</p> </li> <li><code>-cmin -ctime</code>: 变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。变化时间(change time),指的是文件本身(权限、所属组、位置......)最后被变更的时间,变化动作可以使chmod、chgrp、mv等等;</li> <li><code>-mmin -mtime</code>:修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。修改时间(modify time),指的是文件内容最后被修改的时间,修改动作可以使echo重定向、vi等等;</li> <li>时间范围</li> <li><code>-mtime n</code> : n为数字,意思为在n天之前的"一天之内"被更改过内容的文件</li> <li><code>-mtime +n</code> : 列出在n天之前(不含n天本身)被更改过内容的文件名</li> <li><code>-mtime -n</code> : 列出在n天之内(含n天本身)被更改过内容的文件名 <img alt="课上用过的Linux命令" src="https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/741560-20210607103612660-1056532520.png" /></li> <li>exec(ok)</li> <li>cheatsheet</li> <li>find . -type f -exec ls -l {} ;</li> <li>find -type f -mtime -1 -exec rm {} ;</li> <li>xargs(execute arguments)</li> <li>管道与xargs</li> <li>管道∶将前面的标准输出作为后面的"标准输入"。</li> <li>管道∶将前面的标准输出作为后面的"命令参数"。</li> <li><a href="https://man.linuxde.net/xargs">xargs</a>:命令参数过滤器</li> <li>xargs的默认命令是echo,空格是默认分割符,xargs的标准输入中出现的"换行符、空格、制表符"都将被空格取代。</li> <li><code>-nN</code>:每次处理N个参数</li> <li><code>-0</code>: xargs提供了-0选项,允许将 NULL 作为分隔符,而 find命令也心有灵犀地提供了对应的选项-print0来产生以 NULL 字符作为分隔符的输出。xargs 的-0选项不仅可以将分隔符从默认的空格变成NULL,还会将单引号、双引号、反斜线等统统默认为是普通字符。所以说,-0选项特别适合处理命令参数中含有引号、空格、反斜线的情况。</li> <li><code>-d</code>: 指定分割符,默认是空格</li> <li><code>-p</code>: 需要确认</li> <li><code>-E arg</code>:遇到arg就停止</li> <li>cheatsheet</li> <li>find ~ -name '*.log' -print0 | xargs -0 rm -f :删除home的log,单独的rm 文件参数不能太多, 此外参考<a href="https://www.cnblogs.com/liuyihua1992/p/9689314.html">find -print0和xargs -0原理及用法</a><ul> <li>for((i=0; i</li> </ul> </li> <li>find /etc -name "*.conf" | xargs ls -l :-name后要有引号</li> <li>cat url-list.txt | xargs wget -C :用wget下载列表中的多个文件</li> <li>find / -name *.jpg -type f -print | xargs tar -cvzv images.tar.gz: 把找到的jpg 压缩成一个文件</li> <li>ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory</li> <li>find . -type f | xargs -p -n1 rm -f:一次删除一条,还要确认</li> <li>ref</li> <li><a href="https://www.cnblogs.com/xue0123/p/10619457.html">find命令处理之exec与xargs区别</a></li> </ul> </li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>free</h3> <ul> <li><a href="https://man.linuxde.net/free">free</a></li> <li>选项<ul> <li><code>-k</code> , <code>-m</code>, <code>-g</code>:K,M,G为单位显示,向下取整,有坑特别-g</li> <li><code>-o</code>:输出中"-/+ buffers/cache∶"这一行就消失了</li> <li>(-buffers/cache) used内存数: 第一部分Mem行中的 used – buffers – cached</li> <li>(+buffers/cache) free内存数: 第一部分Mem行中的 free + buffers + cached</li> </ul> </li> <li>free命令中的buffers和cached值,是读取自/proc/meminfo 文件中的对应值。而/proc中的绝大部分内容是 Linux 内核(fs/proc/meminfo.c)来控制和更新的。<ul> <li>buffers 是块设备 I/O相关的缓存页。</li> <li>cached 是普通文件相关的缓存页。</li> </ul> </li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>gcc</h3> <ul> <li><a href="https://man.linuxde.net/gcc">gcc</a></li> <li><code>gcc xx.c</code> : a.out</li> <li><code>gcc xx.c -o yy</code>:</li> <li>编译四阶段<ul> <li>gcc参数</li> <li>ESc, iso</li> <li>预处理(Pre-Processing)</li> <li>编译(Compiling)</li> <li>汇编(Assembling)</li> <li>链接(Linking)</li> </ul> </li> <li><code>gcc *.c</code></li> <li>project<ul> <li>src,include,lib,bin,doc,readme.md,makefile,compile.sh</li> <li><code>gcc -Iinclude</code></li> <li><code>gcc -Llib</code></li> </ul> </li> <li>静态库<ul> <li>gcc -c xx.c -o xx.o</li> <li>ar rcs libxx.a xx.o</li> <li>gcc [-static] main.c -L. -lxx</li> </ul> </li> <li>动态库<ul> <li>方式1</li> <li>gcc -fPIC xx.c -o xx.o</li> <li>gcc -shared -o libxx.so xx.o</li> <li>gcc main.c -L. -lxx</li> <li>库的处理<ul> <li>拷贝到 <code>/usr/lib,/lib</code>,ldconfig</li> <li><code>export LD_LIBRARY_PATH=./</code></li> </ul> </li> </ul> </li> <li>调试<ul> <li><code>-g 生成调试信息。GNU 调试器可利用该信息。</code></li> <li><code>-gstabs</code>:以 stabs 格式声称调试信息, 但是不包括 gdb 调试信息。</li> <li><code>-gstabs+</code>:以 stabs 格式声称调试信息, 并且包含仅供 gdb 使用的额外调试信息。</li> <li><code>-ggdb</code>:将尽可能的生成 gdb 的可以使用的调试信息。</li> </ul> </li> <li>other<ul> <li><code>-ansi</code>:关闭 gnu c中与 ansi c 不兼容的特性, 激活 ansi c 的专有特性(包括禁止一些 asm inline typeof 关键字, 以及 UNIX,vax 等预处理宏)。</li> <li><code>-include file</code>:ref <code>-Iinclude</code></li> <li><code>gcc hello.c -include /root/pianopan.h</code></li> <li><code>-ansi</code>:只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色, 例如 asm 或 typeof 关键词。</li> <li><code>-Dmacro</code> :以字符串"1"定义 macro 宏。相当于 C 语言中的 #define macro</li> <li><code>-Dmacro=defn</code>:以字符串"defn"定义 MACRO 宏。</li> <li><code>-UMACRO</code>: 取消对 MACRO 宏的定义。 #undef macro</li> <li><code>-undef</code>:取消对任何非标准宏的定义</li> <li>优化</li> <li><code>-O0</code> 不进行优化处理。</li> <li><code>-O 或 -O1</code> 优化生成代码。</li> <li><code>-O2</code> 进一步优化。</li> <li><code>-O3</code> 比 -O2 更进一步优化,包括 inline 函数。</li> <li><code>-m</code></li> <li><code>-m486</code>: 针对 486 进行代码优化。</li> <li><code>-m32</code>: 生成32位机器的汇编代码<ul> <li>sudo apt install gcc-multilib :</li> </ul> </li> <li><code>-m64</code>: 生成64位机器汇编代码</li> <li><code>-shared</code>:生成共享目标文件。通常用在建立共享库时。</li> <li><code>-static</code>: 禁止使用共享连接,没有这个选项优先使用动态库</li> <li>Warning</li> <li><code>-w</code>:不生成任何警告信息。</li> <li><code>-Wall</code>:生成所有警告信息。</li> <li><code>-Werror</code>:警告转化为错误信息,并在警告发生时终止编译</li> <li><code>-std</code></li> <li><a href="https://blog.csdn.net/x356982611/article/details/73222651">GCC 编译 -std简述</a></li> <li><a href="https://gcc.gnu.org/onlinedocs/gcc/Standards.html">Language Standards Supported by GCC</a></li> </ul> </li> <li>ref<ul> <li><a href="https://gcc.gnu.org/onlinedocs/gcc/">Using the GNU Compiler Collection (GCC)</a></li> </ul> </li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>gdb</h3> <h4>gdb</h4> <ul> <li>ref</li> <li><a href="http://www.gnu.org/software/gdb/documentation/">GDB Documentation</a></li> <li><a href="https://sourceware.org/gdb/current/onlinedocs/gdb/">Debugging with GDB</a></li> </ul> <h4>ddd</h4> <h4>jdb</h4> <ul> <li>ref</li> <li><a href="https://www.cnblogs.com/rocedu/p/6371262.html">使用JDB调试Java程序</a></li> </ul> <h4>pdb</h4> <ul> <li>ref</li> <li><a href="https://www.cnblogs.com/rocedu/p/14102043.html">使用PDB调试Python程序</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>git</h3> <h3>gmssl</h3> <ul> <li>cf <a href="#cmdopenssl">openssl</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>grep</h3> <ul> <li><a href="https://man.linuxde.net/grep">grep</a></li> <li>grep [options] pattern [files]<ul> <li><code>-n</code> 显示行号</li> <li><code>-r</code> 递归子目录</li> <li><code>-v</code> 不匹配的</li> <li><code>-c</code> 匹配个数</li> <li><code>-i</code> 不区分大小写</li> <li><code>-E</code></li> <li><code>-F</code></li> <li><code>--color</code> : 结果用彩色高亮(默认)</li> <li><code>-A N</code>:After,匹配的那一行后N行也显示</li> <li><code>-B N</code>:Before,匹配的那一行前N行也显示</li> <li><code>-C N</code>:A+B,匹配的那一行前N行,后N行也显示</li> <li><code>-w WORD</code>:精确匹配WORD,正则表达式中的"词(word)",一般是由字母、数字和下划线所组成的,且词与词之间通常使用空格、制表符或换行符分隔。</li> <li><code>'\<word\>'</word\></code></li> </ul> </li> <li>cheatsheet</li> <li>grep -nir xxx /usr/include</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>gzip</h3> <ul> <li>见tar</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>hexdump</h3> <ul> <li>见cat</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>history: 显示命令行历史</h3> <ul> <li><a href="https://man.linuxde.net/history">history</a></li> <li>选项<ul> <li><code>-c</code>: 清除内存中命令历史,重启shell会读.bash_history内容</li> <li><code>-w</code>: 内存历史覆盖.bash_history内容,先-c 再-w</li> </ul> </li> <li>export HISTTIMEFORMAT='%F %T ':命令时间戳(后面要有一两个空格)</li> <li>定位到上一条命令<ul> <li>1.使用向上方向键,并回车执行。</li> <li>2.输入!!并回车执行。</li> <li>3.输入!-1并回车执行。</li> <li>4.输入Ctrl+P组合键并回车执行。</li> </ul> </li> <li>定位到任一条命令<ul> <li>!标号:叹号定位法</li> </ul> </li> <li>Ctrl+R : 搜索命令历史</li> <li>安全<ul> <li>export HISTCONTROL=ignorespace</li> <li>输入重要命令,前面加空格</li> <li><code>export HISTIGNORE=*</code>,输入重要命令, <code>export HISTIGNORE=</code></li> </ul> </li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>hostname</h3> <h4>hostname</h4> <ul> <li><a href="https://man.linuxde.net/hostname">hostname</a></li> </ul> <h4>hostnamectl</h4> <ul> <li>hostnamectl set-hostname centos7.test</li> <li>注意修改/etc/hosts⽂件,把新主机名和ip(127.0.0.1)对应好</li> </ul> <h3>ifconfig</h3> <ul> <li>ifconfig</li> <li>ifconfig</li> <li>eth0 第⼀块⽹卡(⽹络接⼝)<ul> <li>你的第⼀个⽹络接⼝可能叫做下⾯的名字</li> <li>eno1 板载⽹卡</li> <li>ens33 PCI-E⽹卡</li> <li>enp0s3 ⽆法获取物理信息的 PCI-E ⽹卡</li> <li>CentOS 7 使⽤了⼀致性⽹络设备命名,以上都不匹配则使⽤ eth0</li> <li>⽹卡命名规则受 biosdevname 和 net.ifnames 两个参数影响</li> <li>编辑 <code>/etc/default/grub</code> ⽂件,增加 <code>biosdevname=0 net.ifnames=0 ...</code></li> <li>更新 grub : <code># grub2-mkconfig -o /boot/grub2/grub.cfg</code></li> <li>重启: <code># reboot</code></li> </ul> </li> </ul> <h4>ifup</h4> <h4>ifdown</h4> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>iostat</h3> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>ip</h3> <ul> <li>cf <a href="#cmdnetstat">netstat</a></li> </ul> <h3>iterm2</h3> <ul> <li>ref</li> <li><a href="https://www.cnblogs.com/liqiangchn/p/14280203.html">工具用的好,下班回家早!iTerm2使用技巧指北!</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>join: 带外键的paste</h3> <ul> <li><a href="https://man.linuxde.net/join">join</a></li> <li><code>-a n</code>: 显示第n个文件中没有共同列导致的行</li> <li><code>-1 m</code> <code>-2 n</code>: 第一个文件的m列和第二个文件中的第n列相同,不指定mn 默认1</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>ln</h3> <ul> <li><a href="https://man.linuxde.net/ln">ln</a>: ln from to</li> <li>默认硬链接</li> <li>ln -s 符呈链接,软链接</li> <li>链接方式<ul> <li>硬链接</li> <li>软链接(符号链接,快捷方式)</li> </ul> </li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>ls</h3> <pre><code>- -a:显示隐藏文件 - -l:长格式,显示详细信息 - -r: 降序,默认升序 - -t: 按修改时间排序 - -R:递归显示,类似tree - -h: 大小按人类可读方式显示 - [通配符](https://weread.qq.com/web/reader/f5c32ac072287278f5cc0e6k45c322601945c48cce2e120) </code></pre> <ul> <li> <p>文件类型 -</p> <ul> <li>普通文件.</li> </ul> </li> <li> <p>d 目录文件</p> </li> <li>b 块特殊文件</li> <li>c 字符特殊文件</li> <li>l 符号链接</li> <li>f 命名管道</li> <li>s 套接字文件</li> <li>文件权限</li> <li>字符权限表示方法<ul> <li>r 读</li> <li>w 写</li> <li>x 执行</li> </ul> </li> <li>数字权限的表示方法<ul> <li>r = 4</li> <li>w = 2</li> <li>x = 1 -</li> <li>rw- r-x r- - 1 userame groupname mtime filename</li> <li>rw- 文件属主的权限</li> <li>r-x 文件属组的权限</li> <li>r- - 其他用户的权限</li> </ul> </li> <li>目录权限</li> <li>x 进入目录</li> <li>rx 显示目录内的文件名</li> <li>wx 修改目录内的文件名</li> <li>特殊权限</li> <li>SUID 用于二进制可执行文件,执行命令时取得文件属主权限</li> <li>SGID 用于目录,在该目录下创建新的文件和目录,权限自动更改为该目录的属组</li> <li>SBIT(stick位) 用于目录,该目录下新建的文件和目录,仅 root 和自己可以删除</li> <li>ref</li> <li><a href="https://blog.csdn.net/wxbmelisky/article/details/51649343">Linux文件特殊权限——SetUID、SetGID、Sticky BIT</a></li> </ul> <h4>chmod 修改文件、目录权限</h4> <ul> <li>参数</li> <li><code>u</code>: 属主</li> <li><code>g</code>: 属组</li> <li><code>o</code>: 其他</li> <li><code>a</code>: 所有</li> <li><code>+</code>: 增加权限</li> <li><code>-</code>: 减少权限</li> <li><code>=</code>: 设置权限</li> </ul> <h4>chown 更改属主、属组</h4> <h4>chgrp 可以单独更改属组,不常用</h4> <h4>stat</h4> <h4>umask</h4> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>lsof</h3> <ul> <li><a href="https://man.linuxde.net/lsof">lsof</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>mkdir</h3> <ul> <li><a href="https://man.linuxde.net/mkdir">mkdir</a></li> <li>mkdir -p a/b/c/d/e :多级目录, 如果已经存在,忽略</li> <li>mkdir -m 0700 dir :指定目录属性mode rwx</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>man (help info)</h3> <h4><a href="https://man.linuxde.net/man">man</a> :manual</h4> <ul> <li>man(manual)</li> <li>man -k</li> <li>man -f</li> <li>man printf (默认1</li> <li>man -a :在所有的man帮助手册中搜索;</li> <li>ref</li> <li><a href="https://blog.csdn.net/aiwangtingyun/article/details/79273802">【Linux】之安装完整的 manpages</a></li> <li><a href="https://blog.csdn.net/gatieme/article/details/51656707">linux下man手册的安装和使用</a><ul> <li>openEuler:</li> </ul> </li> </ul> <h4>help</h4> <ul> <li>内部命令:shell内置的命令,其他的叫外部命令</li> <li>内部命令:help cmd</li> <li>外部命令:cmd --help</li> <li>type</li> </ul> <h4>info</h4> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>mii-tool:查看、管理介质的网络接口的状态,设置协商方式</h3> <ul> <li><a href="https://man.linuxde.net/mii-tool">mii-tool</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>mount</h3> <ul> <li><a href="https://man.linuxde.net/mount">mount</a></li> <li>ref</li> <li><a href="https://www.cnblogs.com/sunshine-cat/p/7922193.html">linux挂载命令mount及U盘、移动硬盘的挂载</a></li> <li><a href="https://blog.csdn.net/zhangjunli/article/details/81014211">NFS+mount挂载</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <ul> <li>cf <a href="#cmdiostat">iostat</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>mtr</h3> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>mv</h3> <ul> <li><a href="https://man.linuxde.net/mv">mv</a></li> <li><code>-i</code>:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入"y",表示将覆盖目标文件;输入"n",表示取消对源文件的移动。这样可以避免误将文件覆盖。</li> <li><code>-b</code>:当文件存在时,覆盖前,为其创建一个备份;</li> <li><code>-f</code>:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;</li> <li><code>-u</code>:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>nc: netcat,路由器设置</h3> <ul> <li><a href="https://man.linuxde.net/nc">nc</a></li> <li><code>-l</code> 选项∶ 使用监听模式,监控传入的数据。</li> <li><code>-z</code> 选项∶ 一旦建立连接后马上断开,而不发送和接收任何数据。</li> <li><code>-v</code> 选项∶ 打印详细输出信息。</li> <li><code>-n</code> 选项∶直接使用 IP地址,而不使用域名服务器来查询其域名。</li> <li><code>-w</code> 选项∶设置连接的超时时间,单位为秒。</li> <li><code>-u</code> 选项∶使用 UDP建立连接。默认使用TCP建立连接。</li> <li>cheatsheet</li> <li>聊天服务器<ul> <li>Server: nc -l port</li> <li>Client: nc serverip port</li> </ul> </li> <li>端口扫描<ul> <li>nc -z -v -n -w 2 127.0.0.1 20-23</li> </ul> </li> <li>文件传输<ul> <li>Server: nc -lv port < filename</li> <li>Client: nc -nv serverip port > filename</li> </ul> </li> <li>目录传输<ul> <li>Server∶ tar -czvPf - /root/book/ | nc -l 12345</li> <li>客户端∶nc-n116.255.245.207 12345 | tar -xzvPf</li> </ul> </li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>netstat (ss,ip)</h3> <ul> <li>net-tools包</li> <li>arp∶ 管理系统的 ARP 信息。</li> <li>hostname∶ 管理系统主机名</li> <li>ifconfig∶ 配置网络接口。</li> <li>netstat∶ 展示网络连接、路由表、接口统计等信息。</li> <li>route∶ 管理 IP 路由。</li> <li>ipmaddr∶ 管理组播地址。</li> <li>iptunnel∶ 管理和配置隧道。</li> <li>mi-tool∶ 管理网络接口状态。</li> <li>nameif∶设置基于MAC地址的网络接口名称。</li> <li>plipconfig∶ 管理 PLIP协议设备参数。</li> <li>slattach∶指定网络接口关联到特定的串行线路。</li> <li>netstat 五大功能</li> <li>显示网络连接信息</li> <li>显示路由信息</li> <li>显示接口统计信息</li> <li>显示无效连接信息</li> <li>显示组播成员信息 <img alt="课上用过的Linux命令" src="https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/741560-20210702075629962-2020981185.png" /></li> <li>cheatsheet</li> <li>netstat -ano 查看机器端口占用情况<ul> <li>Windows</li> <li>netstat -ano|findstr 端口号 :显示占用端口的pid</li> <li>tasklist|findstr "pid" :根据上面pid 获得进程名</li> <li>Linux</li> </ul> </li> <li>netstat -alepn :常用</li> <li>netstat Socket -x -alepn</li> <li>ref</li> <li><a href="https://blog.csdn.net/dongl890426/article/details/86981901">Linux下netstat命令详解</a></li> <li> <p><a href="https://linux.cn/article-2434-1.html">netstat 的10个基本用法</a></p> </li> <li> <p>ip</p> </li> <li><code>-4</code><ul> <li>点分十进制</li> </ul> </li> <li><code>-6</code><ul> <li>目的地址</li> <li>单播,即 unicast,就是传统意义上的点到点通信。</li> <li>多播,顾名思义,就是一对多通信,数据报会被传送到多台计算机。</li> <li>任播,这是 IP V6协议中新增的一种地址类型。任播指的是将数据报传送到一组计算机中的某一台,那到底会是哪一台呢,一般情况下会采用"就近策略"来选取。</li> <li>冒号16进制</li> <li>零省略∶ 如果某一位是 000C,则可以直接写成 C ;</li> <li>零压缩∶如果一个地址是 FEO4∶0∶0∶0∶0∶0∶0∶B2,那么可以直接写成 FEO4∶∶B2 ;</li> <li>四六混搭∶ 在 IPv4 地址向 IPv6 地址转换时,完全可以这样写 0∶0∶0∶0∶0∶0∶128.10.3.2,再使用零压缩就变成了∶128.10.3.2</li> </ul> </li> <li>cheatsheet</li> <li>ifconfig -> ip addr show: 显示网络接口(网卡)信息</li> <li>ip addr add 192.168.1.111/24 dev plp2 :为服务器网卡添加IP</li> <li>ip addr add 192.168.1.111/24 dev plp2 :为服务器网卡添加IP</li> <li>ip link set plp2 down:关闭网卡(网络接口)</li> <li>ip link set plp2 up:激活网卡(网络接口)</li> <li>ip route show :查看路由信息</li> <li>ip route add/del</li> <li>ip rout add default via 192.168.1.6: 指定默认网关</li> <li>ip neigh show: 操作ARP表<ul> <li>STALE∶邻居存在,但目前处于不可达状态。</li> <li>DELAY∶探测邻居可达与否的数据包已经发出,正在等待邻居的回复。</li> <li>REACHABLE∶ 邻居存在,而且是可达的。 <img alt="课上用过的Linux命令" src="https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/741560-20210702085301854-56893147.png" /></li> </ul> </li> </ul> <p><img alt="课上用过的Linux命令" src="https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/741560-20210702084603377-1437740063.png" /></p> <h4><a href="https://man.linuxde.net/ss">ss</a> : Socket Statistics</h4> <ul> <li>iproute2模块</li> <li>sudo apt install iproute iproute-doc</li> <li>brew install iproute2mac</li> <li>iproute2 工具<ul> <li>ip∶管理路由、设备、策略和隧道等。</li> <li>ss∶ 展示系统套接字相关信息。</li> <li>tc∶ 管理流量控制策略。</li> <li>nstat∶ 用于网络统计。</li> <li>bridge∶ 管理桥接地址和设备。</li> <li>ifcefg∶ 进行IP管理,以替代ifconfig命令。</li> <li>Instat∶ 展示网络状态</li> </ul> </li> <li>隧道技术:(Linux Kernel2.2后)隧道技术是一种"网络协议的数据包被封装在另一种网络协议的数据包之中,以进行数据网络传输"的技术,这种技术其实也是 VPN的技术基础和前提。<ul> <li>GRE隧道技术,则是隧道技术中应用最为普遍和广泛的一个,它的全称为通用路由封装(Generic Routing Encapsulation),是由 Net-Smiths 和 Cisco 来主导设计的。它工作在网络层,目前已被绝大多数电信设备厂商所支持。 <img alt="课上用过的Linux命令" src="https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/741560-20210702083444996-330031643.png" /></li> </ul> </li> <li>ss</li> <li>选项</li> <li>cheatsheet</li> <li>ss -s: 当前服务器的网络连接统计</li> <li>ss -l: 所有打开的网络端口<ul> <li>ss -pl 会列出进程名</li> </ul> </li> <li>ss -a : 所有连接<ul> <li>ss -ta: 所有TCP连接</li> <li>ss -ua: 所用UDP连接</li> <li>ss -wa: 所有RAW连接</li> <li>ss -xa: 所有Unix Sockets *<em><a href="#fhml">返回目录</a></em></li> </ul> </li> </ul> <h3>nmap</h3> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>nmcli</h3> <ul> <li><a href="https://man.linuxde.net/nmcli">nmcli</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>nslookup : 查询DNS,name server lookup</h3> <ul> <li><a href="https://man.linuxde.net/nslookup">nslookup</a></li> <li>bind-utils 安装包</li> <li>参数<ul> <li><code>-type=XX</code>:8种类型之一XX</li> </ul> </li> <li>五元组 { DomainName、TimeToLive、Class、Type、Value<ul> <li>DomainName (域名)∶ 指我们要查询的那个域名。</li> <li>TimeToLive(生存期限)∶ 表示此域名在各 DNS 服务器缓存中应保存的时长。</li> <li>Class(类别)∶通常为IN,即 Internet。另外还有 CH(Chaos)和 HS(Hesiod)两类,但目前几乎已经被淘汰了。</li> <li>Type(类型)∶ 指出这条记录的类型,包括8种,即 SOA、A、MX、NS、 CNAME、PTR、HINFO和TXT。</li> <li>SOA∶ Start of Authority,授权起始。</li> <li>A∶ IP 地址。</li> <li>MX∶ 邮件交换。</li> <li>NS∶域名服务器。</li> <li>CNAME∶别名,也叫规范名。</li> <li>PTR∶指针,用于反向解析。</li> <li>HINFO∶ 主机描述信息,包括 CPU 和 OS 等信息</li> <li>TXT∶ 其他一些文本信息。</li> <li>Value(值)∶ 针对不同类型,会有不同的值。</li> </ul> </li> <li>模式<ul> <li>非交互模式: nslookup ns/ip</li> <li>交互模式:nslookup</li> <li>server xxxx: 指定DSN服务器,默认使用本机的设置</li> <li>set all: 查看当前DNS的配置</li> <li>set debug:设置调试模式,显示完整的响应包和交互包</li> <li>set domain=xxx :设置默认的域后缀</li> <li>set querytype=xx: 设置type</li> </ul> </li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>objdump</h3> <ul> <li><a href="https://man.linuxde.net/objdump">objdump</a></li> <li><code>-V</code>: 版本</li> <li><code>-a</code>: 静态库中的文件信息<ul> <li>ar -tv libxx.a</li> <li>objdump -a libxx.a</li> </ul> </li> <li><code>-d</code>: .text段反汇编</li> <li><code>-D</code>: 所有段反汇编</li> <li><code>-f</code>: 简要文件头</li> <li><code>-h</code>: 显示目标文件各个段的头部摘要信息</li> <li><code>-t</code>: 显示文件的符号表入口<ul> <li>objdump -t xx.o</li> <li>cf: nm -s xx.o</li> <li>objdump -t -C xx.o显示文件的符号表入口,将底层符号解码并表示成用户级别</li> </ul> </li> <li><code>-S</code>: 反汇编特定段<ul> <li>objdump -j .text -S mytest.o</li> </ul> </li> <li><code>-s</code>: 显示目标文件中的特定段的内容<ul> <li>objdump --section=.text -s mytest.o</li> <li><code>--section=.text <==> -j .text<!--==--></code></li> </ul> </li> <li><code>-g</code>: 显示调试信息</li> <li>ref<ul> <li><a href="http://lnmp.ailinux.net/objdump">objdump命令</a></li> </ul> </li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>openssl(gmssl tassl)</h3> <h4>openssl</h4> <ul> <li><a href="https://www.openssl.org/docs/man1.1.1/man1/">openssl</a></li> <li>openssl version</li> <li>命令行传入数据<ul> <li>echo "xxx" | openssl cmd :文本</li> <li>echo -n "xxx" | openssl cmd :文本</li> <li>echo xxx | openssl cmd :文本,可以没有双引号</li> <li>echo xxx | openssl cmd :文本,可以没有双引号</li> <li>opnessl cmd filename (不支持-in, 支持-out)</li> <li>echo -n -e "\xaa\xbb" | openssl cmd:二进制(16进制)</li> </ul> </li> <li>通用选项<ul> <li>openssl cmd - in infile</li> <li>openssl cmd -out outfile</li> </ul> </li> </ul> <p><img alt="课上用过的Linux命令" src="https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/741560-20210405055629759-1568942884.png" /></p> <ul> <li>openssl help</li> </ul> <p><img alt="课上用过的Linux命令" src="https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/741560-20210405054950884-1252466336.png" /></p> <ul> <li>prime</li> <li>openssl prime n</li> <li>openssl prime -check 79</li> <li>openssl prime -check -hex 4F</li> <li>openssl prime -generate -bits 10</li> <li>openssl prime -generate -bits 10 -hex</li> <li>rand n: 产生n字节随机数,默认二进制(16进制), <code>| od -tx1</code> 可以看到字符串</li> <li><code>-hex</code>: 16进制字符串,等价于 | od -tx1</li> <li><code>-base64</code>: base64字符串</li> <li><code>-out outfile</code> 写到outfile中,等价于 > outfile</li> <li><code>-rand seedfile</code> 指定seedfile,默认从CA主配置字段的randfile选项中指定,如果没有,采用从屏幕状态获取随机数种子的方法,多个文件Linux中用":"分开,Windows中用";"分开</li> <li>base64</li> <li>echo -n "ljp" | openssl base64</li> <li>echo "QQ--" | openssl base64 -d</li> <li>openssl base64 -in test.txt -out test.b64</li> <li>openssl base64 -in test.b64 -out testo.txt</li> <li>asn1parse</li> <li>der<ul> <li>echo -ne "\xyy\xzz" > test.der</li> <li>openssl asn1parse -inform der -i -in test.der</li> </ul> </li> <li>pem<ul> <li>base64 -i test.der -o test.pem</li> <li>openssl asn1parse -inform pem -in test.pem</li> </ul> </li> <li>ref<ul> <li><a href="https://www.jianshu.com/p/bb10092c2587">OpenSSL asn1parse</a></li> <li><a href="https://www.cnblogs.com/274914765qq/p/4671849.html">Openssl asn1parse命令</a></li> </ul> </li> <li><a href="https://www.openssl.org/docs/man1.1.1/man1/dgst.html">dgst</a></li> <li>openssl sm3</li> <li>echo -n "12345" | openssl sm3</li> <li>openssl dgst -digest</li> <li><a href="https://www.openssl.org/docs/man1.1.1/man1/enc.html">enc</a></li> <li>选项<ul> <li><code>-e</code>:编码,默认,可省</li> <li><code>-d</code>:解码</li> <li><code>-in</code>:输入文件</li> <li><code>-out</code>:输出文件</li> </ul> </li> <li>字符串与字节数组<ul> <li>echo 后带不带引号都是字符串,二进制串 echo -n -e "\xXX\xYY"</li> <li>echo 1234 | openssl sm4</li> <li>echo "1234" | openssl sm4: 与上一条等价</li> <li>echo -n "1234" | openssl sm4: 与上一条有什么差别?</li> <li><code>-K</code>: 字符串=>字节数组作为密钥</li> <li>echo -n 1234 | openssl sm4-cbc -K "2851fa25211a48023794ae9515909603" -iv "da80e405a4998c351b0717093cbe86ab" | od -tx1</li> <li>echo -n "1234" | openssl sm4-cbc -K "2851FA25211A48023794AE9515909603" -iv "DA80E405A4998C351B0717093CBE86AB" | od -tx1 :与上一条等价</li> </ul> </li> <li>加解密<ul> <li>echo -n "1234" | openssl sm4-cbc -K "2851fa25211a48023794ae9515909603" -iv "da80e405a4998c351b0717093cbe86ab" -out 1234.enc</li> <li>openssl sm4-cbc -d -K "2851fa25211a48023794ae9515909603" -iv "da80e405a4998c351b0717093cbe86ab" -in 1234.enc</li> </ul> </li> <li>非对称算法</li> <li>openssl ecparam -list_curves</li> <li>RSA<ul> <li>命令</li> <li>genrsa:生成并输入一个RSA私钥</li> <li>rsa:处理RSA密钥的格式转换等问题</li> <li>rsautl:使用RSA密钥进行加密、解密、签名和验证等运算</li> <li>产生公私钥对</li> <li>openssl genrsa -out rockp.pem 1024</li> <li>openssl genrsa -out rockp.pem -aes128 -passout pass:123456 1024</li> <li>导出公钥,私钥</li> <li>openssl rsa -in rockp.pem -pubout -out rocpub.pem</li> <li>openssl pkcs8 -topk8 -in rockp.pem -out rocpri.pem</li> <li>openssl pkcs8 -topk8 -in rockp.pem -passin pass:123456 -out rocpri.pem</li> <li>加解密(公钥加密,私钥解密)</li> <li>openssl rsautl -encrypt -in hello.txt -inkey rocpub.pem -pubin -out hello.en</li> <li>openssl rsautl -decrypt -in hello.en -inkey rockp.pem -out hello.de</li> <li>签名验签</li> <li>openssl rsautl -sign -in hello.txt -inkey rockp.pem -out hello.s</li> <li>openssl rsautl -verify -in hello.s -inkey rockp.pem -passin -out hello.v</li> <li>diff hello.v hello.txt</li> <li>ref</li> <li><a href="https://www.cnblogs.com/gordon0918/p/5363466.html">openssl 非对称加密算法RSA命令详解</a></li> </ul> </li> <li>SM2<ul> <li>命令</li> <li>ecparam:椭圆曲线密钥参数生成及操作<ul> <li><code>openssl ecparam -list_curves</code> | grep SM2 是否支持SM2</li> </ul> </li> <li>ec:</li> <li>创建EC参数和原始私钥文件:</li> <li>openssl ecparam -out rocsm2kp.pem -name SM2 -param_enc explicit -genkey<ul> <li>查看EC私钥信息:</li> <li>openssl ecparam -in rocsm2kp.pem -text</li> <li>验证参数:</li> <li>openssl ecparam -in rocsm2kp.pem -check</li> <li>查看公私钥</li> <li>openssl ec -in rocsm2kp.pem -text -noout</li> </ul> </li> <li>导出公私钥</li> <li>openssl pkcs8 -topk8 -inform PEM -in rocsm2kp.pem -outform pem -nocrypt -out rocsm2pri.pem</li> <li>openssl ec -in rocsm2kp.pem -pubout -out rocsm2pub.pem</li> <li>加密解密</li> <li>签名验签:sm3不支持</li> <li>openssl dgst -sha512 -sign rocsm2kp.pem -out hellosm2.sig hello.txt</li> <li>openssl dgst -sha512 -verify rocsm2pub.pem -signature hellosm2.sig hello.txt</li> </ul> </li> <li>ref<ul> <li><a href="https://www.cnblogs.com/toolsMan/p/14045404.html">利用openssl生成SM2公私钥对</a></li> <li><a href="https://blog.csdn.net/zhbpd/article/details/84988494">openssl 自制国密证书</a></li> <li><a href="https://blog.csdn.net/as3luyuan123/category_1743855.html">openssl 命令</a></li> <li><a href="https://www.cnblogs.com/f-ck-need-u/p/7048359.html#blogopenssl">openssl 命令2</a></li> <li><a href="https://blog.csdn.net/weixin_41761608/article/details/107623909">使用openssl的EVP接口使用sm2算法加解密等操作</a> -<a href="https://blog.csdn.net/jiangsq12345/article/details/6066275">如何用 openssl 生成RSA双密匙;签名证书;加密文件邮件</a></li> <li><a href="https://www.cnblogs.com/aLittleBitCool/archive/2011/09/22/2185418.html">利用openssl进行RSA加密解密</a></li> <li><a href="https://www.cnblogs.com/ungeek/p/7387797.html">openssl 非对称加密算法RSA命令详解</a></li> <li><a href="https://blog.csdn.net/dong_beijing/article/details/81390710">通过openssl生成sm2的公私钥的方法</a></li> <li><a href="https://blog.csdn.net/dong_beijing/article/details/81390710">在openssl中对SM2的公私钥进行加解密的验证</a></li> <li><a href="https://blog.csdn.net/hbcbgcx/article/details/88900218">基于OpenSSL 1.1.1版实现的SM2签名与验签C程序</a></li> <li><a href="https://www.johannes-bauer.com/compsci/ecc/">ECC</a></li> </ul> </li> <li>证书与CA</li> <li>源码</li> <li>数据结构<ul> <li>栈</li> <li>Hash</li> <li>文本数据库</li> </ul> </li> <li>ref</li> <li><a href="https://www.openssl.org/docs/man1.1.1/">openssl doc</a></li> <li><a href="http://slproweb.com/products/Win32OpenSSL.html">openssl windows</a></li> </ul> <h4>gmssl</h4> <ul> <li>engine</li> <li>skf</li> <li>sdf</li> <li>ref</li> <li><a href="http://gmssl.org/">gmssl官网</a></li> <li><a href="https://www.gmssl.cn/gmssl/index.jsp">gmssl实验室</a></li> <li><a href="https://blog.csdn.net/sinat_29805979/article/details/118206984">gmssl引擎</a></li> </ul> <h4>tassl</h4> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>paste : 按列和并文件</h3> <ul> <li><a href="https://man.linuxde.net/paste">paste</a></li> <li><code>-d D</code> 列用D分隔开,默认tab</li> <li><code>-s</code> 串行面不是并行,就是以每个文件自身为一个处理单元,将此文件中的所有行以-d选项设定的间隔符拼接成一大行,并输出到标准输出中。</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>ping: 测试主机之间网络的连通性</h3> <ul> <li><a href="https://man.linuxde.net/ping">ping</a></li> <li><code>-c N</code>: ping N 次</li> <li><code>-q</code>:不显示指令执行过程,只显示汇总</li> <li><code>-s N</code>:设置数据包的大小为N</li> <li><code>-t N</code>:设置TTL的大小为N</li> <li><code>-i N</code>:指定收发信息的间隔时间为Ns, 默认1s,N可以设置成小数</li> <li><code>-f</code>:尽快发包,相当-i指定一个极小的数,极限检测,flood ping</li> <li><code>-I</code>:指定网络接口,网卡</li> <li><code>-v</code>:详细显示指令的执行过程。 *<em><a href="#fhml">返回目录</a></em></li> </ul> <h3>prolog</h3> <ul> <li>安装</li> <li>ubuntu<ul> <li>sudo apt install gprolog</li> </ul> </li> <li>ref</li> <li><a href="https://blog.csdn.net/achiberx/article/details/12648403">Linux-gprolog如何编译运行程序</a></li> <li><a href="http://www.gprolog.org/">gprolog</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>pwd</h3> <ul> <li><a href="https://man.linuxde.net/pwd">pwd</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>read</h3> <ul> <li><a href="https://man.linuxde.net/read">read</a>:输入</li> <li>缺省变量REPLY,可以多个变量</li> <li><code>-p</code>: 提示字符串</li> <li><code>-nN</code>:读n个字符赋值到变量中</li> <li><code>-a arr</code>:输入到数组arr中</li> <li><code>-d X</code>:结束字符</li> <li><code>-tn</code>:等待时间ns</li> <li><code>-s</code>:密码输入</li> <li><code>-r</code>:取消转义字符</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>rm</h3> <ul> <li><a href="https://man.linuxde.net/rm">rm</a></li> <li><code>-d</code>:直接把欲删除的目录的硬连接数据删除成0,删除该目录;</li> <li><code>-f</code>:强制删除文件或目录;</li> <li><code>-i</code>:删除已有文件或目录之前先询问用户;</li> <li><code>-r或-R</code>:递归处理,将指定目录下的所有文件与子目录一并处理;</li> <li>cheatsheet</li> <li>rm -rf dir: 强制删除目录及子目录(危险)</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>rmdir: 删除空目录</h3> <ul> <li><a href="https://man.linuxde.net/rmdir">rmdir</a></li> <li><code>-p或--parents</code> :删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>route:</h3> <ul> <li><a href="https://man.linuxde.net/route">route</a></li> <li>-v:详细信息模式</li> <li>-n:不执行DNS反向查找,直接显示数字形式的IP地址</li> <li>-e:netstat格式显示路由表;</li> <li>-net:到一个网络的路由表;</li> <li>-host:到一个主机的路由表。</li> <li>添加⽹关</li> <li>route add default gw</li> <li>route add -host</li> <li>route add -net</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>rsync: 远程数据同步</h3> <ul> <li><a href="https://man.linuxde.net/rsync">rsync</a></li> <li>rsync src1 src2 dst<ul> <li><code>-t</code>:让修改时间也同步. 1.使用-t 选项后,rsync总会想着一件事,那就是将源文件的"modified time"同步到目标机器。2.带有-t 选项的 rsync,会变得更"聪明",它会在同步前先对比两边文件的时间戳和文件大小。如果时间戳和文件大小都完全一致,那么就认定两边文件是一样的,于是,对这个文件就不会发起同步动作了。3.因为 rsync 的"聪明",所以也会反被聪明误。如果目的端的文件的时间戳、大小和源端完全一致,但是内容恰巧不一致时,rsync 就发现不了了。这就是传说中的"坑"! 4.对于 rsync 自作聪明的情况,解决办法就是使用-I选项(字母i的大写形式)。</li> <li><code>-I</code>:踏实做人,不跳过那些有同样的时间和长度的文件。1.-I选项会让 rsync变得很乖巧,即它会挨个文件去发起数据同步。2.-I选项可以确保数据的一致性,代价便是速度上会变慢,因为我们放弃了"quick check"策略。3.无论情况如何,目的端文件的 modified time 总会被更新到当前时刻。</li> <li><code>-v, --verbose</code> :详细模式输出。增加越多的v,就可以获得越多的日志信息。</li> <li><code>-r, --recursive</code>: 对子目录以递归模式处理。</li> <li><code>-l, --links</code>: 保留软链接。</li> <li><code>-H, --hard-links</code>: 保留硬链结。</li> <li><code>-p, --perms</code>: 保持文件权限。</li> <li><code>-o, --owner</code>: 保持文件属主信息。</li> <li><code>-g, --group</code>: 保持文件属组信息。</li> <li><code>-D, --devices</code>: 保持设备文件信息。</li> <li><code>-a, --archive</code>:归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD,无法同步硬链接,需要加-H</li> <li><code>--partial</code> : 断点续传功能。</li> </ul> </li> <li>功能<ul> <li>只要目的端的文件内容和源端不一样,就会触发数据同步,rsync 会确保目的端的文件保持和源端一致。</li> <li>rsync 不会同步文件的"modified time",凡是有数据同步的文件,目的端文件的"modified time"总是会被修改为最新时刻的时间。</li> <li>rsync 不太关注目的端文件的rwx 权限。如果目的端没有此文件,那么权限会保持与源端一致。如果目的端有此文件,则权限不会随着源端变更。</li> <li>只要 rsync有对源文件的读权限,且对目标路径有写权限,rsync 就能确保目的端文件同步到和源端一致。</li> <li>rsync 只能以登录目的端的账号来创建文件,它没有能力保持目的端文件的属主和属组和源端一致。(除非你使用 root 权限,才有资格要求属主一致、属组一致)</li> </ul> </li> <li>ref</li> <li><a href="http://www.ruanyifeng.com/blog/2020/08/rsync.html">rsync 用法教程</a><ul> <li>rsync -av --delete source/ destination</li> </ul> </li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>sed</h3> <ul> <li><a href="https://man.linuxde.net/sed">sed</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>shell</h3> <h4>basic</h4> <ul> <li>系统安装了哪些shell</li> <li>cat /etc/shells:</li> <li>chsh -l</li> <li>echo $SHELL: 当前shell</li> <li>chsh -s /bin/zsh: 更换shell</li> <li>更改/etc/password 中自己用户名中那一行的shell</li> <li>zsh</li> <li>集大成者</li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h4>shell script</h4> <ul> <li>hello world</li> </ul> <pre><code>#! /bin/bash # comment echo hello </code></pre> <ul> <li>命令行参数</li> <li>mysh a b c d</li> <li>$0 $1 $2 $3 $4</li> <li>$0...$9:$0是脚本名称</li> <li>(10...)n</li> <li><code>$#</code>:参数个数 <code>$1~$n</code></li> <li><code>$*</code>:所有命令行参数包括 <code>$0</code></li> <li><code>$S</code>:执行sh的进程PID</li> <li><code>$?</code>:最后一个命令的推出状态</li> <li>数组</li> <li>array_name=(value1 value2 ... valuen):空格分开,小括号围起来</li> <li>array_name[0]=value0 :单个元素赋值</li> <li>访问数组元素: <code>${array_name[index]}</code></li> <li>ref</li> <li><a href="https://www.jb51.net/article/100490.htm">用Shell判断字符串包含关系的方法小结</a></li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>sleep</h3> <ul> <li><a href="https://man.linuxde.net/sleep">sleep</a></li> <li>sleep n: 默认秒<ul> <li>s 为秒,m 为 分钟,h 为小时,d 为日数</li> </ul> </li> <li>cheatsheet<ul> <li>sleep 1m 40s</li> <li>sleep 7d 2h 5m 4s</li> <li>sleep 0.001</li> <li>time sleep: sleep不消耗CPU时间</li> </ul> </li> </ul> <p><strong><a href="#fhml">返回目录</a></strong></p> <h3>sort</h3> <ul> <li><a href="https://man.linuxde.net/sort">sort</a></li> <li>-t</li> <li>-n:依照数值的大小排序,默认是按ascii码排序</li> <li>-r:以降序来排序,默认升序</li> <li>-o</li> <li>-u : 清除重复行</li> <li>-k N: 针对第N列进行排序,默认是按第一列,范围语法如下:<ul> <li>-k 1.2,1.2 -k 3,3nr: 第一列的第二个字母,相同则第三列按数字降序</li> <li>当没有使用-n选项,同时-k 选项没有指定 End 部分时,则会比较从所指定的列到行尾的所有内容,与此同时,并不支持使用多个-k 选项。</li> <li>当使用-n 选项,同时-k 选项没有指定 End 部分时,则当比较的列出现内容相同情况时,则会从第一列开始进行比较。</li> <li>Modifier</li> <li>n:数值</li> <li>r:降序</li> <li>b 表示忽略本域前面的空白符号。</li> <li>d表示对本域按照字典顺序排序(即,只考虑空白和字母)。</li> <li>f 表示对本域忽略大小写进行排序。</li> <li>i表示忽略"不可打印字符",只针对可打印字符进行排序。(有些ASCII就是不可打印字符,比如\a是报警、\b 是退格、\n是换行、\r是回车,等等)</li> </ul> </li> </ul> <p>
    FStart.CStart Modifier,FEnd.CEnd Modifier

    Original: https://www.cnblogs.com/rocedu/p/14891816.html
    Author: 娄老师
    Title: 课上用过的Linux命令

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/10042/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部