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

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

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 <软件包名>:在应用商店中查找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

返回目录

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" | bc 结果:10
        • echo "ibase=8;obase=12;144" | bc 结果:100
        • echo "ibase=16;obase=A;3E8"| bc 结果:1000
          • 16进制A-F只支持大写
      • 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 + 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
  • (( )) & [] : 算术逻辑运算

    • 运算符号全部不需要转义
    • 运算符
      • | 位或
      • || 若前后两者都不为0,则返回1,否则返回0
      • & 位与
      • && 若前者为0,不再对后者进行处理,否则对后者处理,后者不为0时返回1
      • <
      • <=
      • ==
      • !=
      • >=
      • >
      • +
      • -
      • *
      • /
      • %
  • ref

返回目录

bzip2

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

cat

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

echo:打印字符串和变量值

  • 无引号,单引号,双引号
    • 单引号将所有字符都看成普通字符
    • 双引号会解释$、\和`这三种特殊字符
    • 不加引号会解释所有特殊字符
    • cheatsheet:
      • 打印双引号
        • echo '"Hello World"'
        • echo ""Hello World""
  • 参数
    • -n: 去除换行符,默认添加换行符,也可以通过-e控制,可以运行下面命令体会

      • echo "ljp"
      • echo -n "ljp"
      • echo -ne "ljp\n"
      • echo "ljp" | od -tx1
      • echo -n "ljp" | od -tx1
      • echo -ne "ljp\n" | od -tx1
    • -e: 激活转义字符

      • echo测试颜色
        • echo -e "\033[文字背景颜色;文字颜色m 你要显示的内容 \033[0m"
          • -e 选项∶表示允许反斜杠(对字符)转义。
          • \033[颜色 1;颜色2m∶ 称为转义序列,它本身是一个整体,中间不要有空格。
            • \033[∶转义序列的开始。其中\O33 代表 Esc 符号,也可以使用\E\e 来代替
            • 颜色1和颜色 2∶表示字体的前景色或背景色,至于颜色1和颜色2哪一个表示前景色,哪一个表示背景色,由其设定的数值来决定,前景色和背景色的数值空间是不同的。
            • m∶ 转义序列的终止标志。
          • \033[0m∶ 表示将颜色恢复回原来的配色。
          • tput
            • tput setab∶ 用于设置背景色;
            • tput setaf∶ 用于设置前景色。
            • 颜色
              • 0 黑色
              • 1 红色
              • 2 绿色
              • 3 黄色
              • 4 蓝色
              • 5 洋红色
              • 6 黄色
              • 7 白色
      • echo 写二进制文件
        • 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

  • more
    • -<数字>:指定每屏显示的行数;
    • +<数字>:从指定数字的行开始显示。
    • -c:不进行滚屏操作。每次刷新整个屏幕;

printf

  • printf
    • printf 输出格式 输出字符:类C

od

  • od
    • -txN:N个字节用16进制显示
    • -tdN:N个字节用10进制显示
    • -tc: 字符显示

tail

  • tail
    • -n<N>或——line=<N>:输出文件的尾部N(N位数字)行内容。
    • -f<name/descriptor>或;--follow<nameldescript>:显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化。“-f”与“-fdescriptor”等效;

xxd

  • 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

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,递归处理,将指定目录下的所有文件与子目录一并复制; 注意dst有没有的区别,如果已经建好了,src及子目录都会拷贝到dst目录下,否则自动建立dst,src的子目录内容拷贝到dst目录
    • -f:强行复制文件或目录,不论目标文件或目录是否已存在;
    • -i:覆盖既有文件之前先询问用户;
    • -p:保留源文件或目录的属性;
    • -a:与"-dpR"参数相同
    • -d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
    • -b:覆盖已存在的文件目标前将目标文件备份
    • -l:不进行复制,只是链接文件

返回目录

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

返回目录

cut: 显示行中的指定部分,删除文件中指定字段

  • 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
      • 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": 以上三条等价
      • date -d 'Jan 1 1970 +18000 days'

计算一组命令花费的时间

#!/bin/bash

start=$(date +%s)
nmap man.linuxde.net &> /dev/null

end=$(date +%s)
difference=$(( end - start ))
echo $difference seconds.

返回目录

dc: 逆波兰式计算器

dd: 底层复制文件并进行格式转换

返回目录

diff 逐行比较文本文件的异同

  • diff
    • diff f1 f2 :正常格式
    • diff -c f1 f2: 上下文格式
    • diff -u f1 f2: 合并格式
  • ref

返回目录

dig: Domain Information Groper

  • dig

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

基础

  • 入门

  • 安装

  • 镜像

    • docker search :查找docker hub上可用镜像
    • docker [image] pull NAME[:TAG] :从docker hub等下载镜像
      • 不指定TAG会默认latest
    • docker [image] push: 往docker hub等 上传镜像
    • docker run -it NAME[:TAG]:创建容器
    • docker images:查看镜像
    • docker image ls:查看镜像
    • docker tag: 添加标签
    • docker [image] inspect:查看详细信息
    • docker history: 查看历史镜像
    • docker rmi IMAGE[IMAGE...]:删除镜像,IMAGE可以是标签或ID
    • docker image rm: 删除镜像
    • docker image prune: 清理镜像
    • 创建image
      • docker [container] commit:基于已有容器创建
      • docker [container] import:基于本地模板创建
      • docker [image] build :基于dockerfile
    • docker [image] save:导出镜像到本地文件
    • docker [image] load:导入镜像
  • 容器

    • docker ps -a: 所有容器
    • docker [container] create :新建容器
    • docker [container] start :启动容器
    • docker [container] run :新建并启动容器
      • -d:守护进程
    • docker [container] logs:查看容器输出
    • docker [container] pause:暂停容器
    • docker [container] stop:终止容器
    • docker [container] stop:重启容器
    • docker [container] attach:进入容器
    • docker [container] exec:进入容器
    • docker [container] rm:删除容器
    • docker [container] export:导出容器
    • docker [container] import:导入容器
    • docker container inspect:查看容器详情
    • docker [container] top:查看容器内进程
    • docker [container] stats:查看容器统计信息
    • docker [container] cp:复制容器
    • docker container diff:查看容器变更情况
    • docker container port:查看容器端口映射
    • docker [container] update:查看容器
  • 仓库

    • docker login
    • docker search
    • docker [image] pull
    • docker [image] push
    • 第三方
    • 私有仓库
  • 数据管理

  • 端口映射

  • Dockerfile

  • ref

返回目录

du: disk usage

返回目录

echo

返回目录

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
  • Linux环境变量命令——env、export、set

返回目录

env

返回目录

execsnoop

返回目录

expr

返回目录

export

返回目录

fdisk

返回目录

find(xargs)

  • find

    • 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

  • 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
    • 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 -Iinclude
      • gcc -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 -Iinclude
        • gcc 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

pdb

返回目录

git

gmssl

返回目录

grep

  • 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: 显示命令行历史

  • 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

返回目录

indent

ip

iterm2

返回目录

join: 带外键的paste

  • join
    • -a n: 显示第n个文件中没有共同列导致的行
    • -1 m -2 n: 第一个文件的m列和第二个文件中的第n列相同,不指定mn 默认1

返回目录

ldd

返回目录

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
    • mkdir -p a/b/c/d/e :多级目录, 如果已经存在,忽略
    • mkdir -m 0700 dir :指定目录属性mode rwx

返回目录

man (help info)

man:manual

help

  • 内部命令:shell内置的命令,其他的叫外部命令
    • 内部命令:help cmd
    • 外部命令:cmd --help
    • type

info

返回目录

mii-tool:查看、管理介质的网络接口的状态,设置协商方式

返回目录

mount

返回目录

mpstat: multiprocessor statistics

返回目录

mtr

返回目录

mv

  • mv
    • -i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。
    • -b:当文件存在时,覆盖前,为其创建一个备份;
    • -f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
    • -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作;
    • -p:移动时保持权限。

返回目录

mysql

nc: netcat,路由器设置

  • nc

    • -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 来主导设计的。它工作在网络层,目前已被绝大多数电信设备厂商所支持。
  • ss
    • 选项
  • cheatsheet
    • ss -s: 当前服务器的网络连接统计
    • ss -l: 所有打开的网络端口
      • ss -pl 会列出进程名
    • ss -a : 所有连接
      • ss -ta: 所有TCP连接
      • ss -ua: 所用UDP连接
      • ss -wa: 所有RAW连接
      • ss -xa: 所有Unix Sockets
        返回目录

nmap

返回目录

nmcli

返回目录

nslookup : 查询DNS,name server lookup

  • nslookup
    • bind-utils 安装包
    • 参数
      • -type=XX:8种类型之一XX
    • 五元组 { DomainName、TimeToLive、Class、Type、Value
      • DomainName (域名)∶ 指我们要查询的那个域名。
      • TimeToLive(生存期限)∶ 表示此域名在各 DNS 服务器缓存中应保存的时长。
      • Class(类别)∶通常为IN,即 Internet。另外还有 CH(Chaos)和 HS(Hesiod)两类,但目前几乎已经被淘汰了。
      • Type(类型)∶ 指出这条记录的类型,包括8种,即 SOA、A、MX、NS、 CNAME、PTR、HINFO和TXT。
        • SOA∶ Start of Authority,授权起始。
        • A∶ IP 地址。
        • MX∶ 邮件交换。
        • NS∶域名服务器。
        • CNAME∶别名,也叫规范名。
        • PTR∶指针,用于反向解析。
        • HINFO∶ 主机描述信息,包括 CPU 和 OS 等信息
        • TXT∶ 其他一些文本信息。
      • Value(值)∶ 针对不同类型,会有不同的值。
    • 模式
      • 非交互模式: nslookup ns/ip
      • 交互模式:nslookup
        • server xxxx: 指定DSN服务器,默认使用本机的设置
        • set all: 查看当前DNS的配置
        • set debug:设置调试模式,显示完整的响应包和交互包
        • set domain=xxx :设置默认的域后缀
        • set querytype=xx: 设置type

返回目录

objdump

  • objdump
    • -V: 版本
    • -a: 静态库中的文件信息
      • ar -tv libxx.a
      • objdump -a libxx.a
    • -d: .text段反汇编
    • -D: 所有段反汇编
    • -f: 简要文件头
    • -h: 显示目标文件各个段的头部摘要信息
    • -t: 显示文件的符号表入口
      • objdump -t xx.o
        • cf: nm -s xx.o
      • objdump -t -C xx.o显示文件的符号表入口,将底层符号解码并表示成用户级别
    • -S: 反汇编特定段
      • objdump -j .text -S mytest.o
    • -s: 显示目标文件中的特定段的内容
      • objdump --section=.text -s mytest.o
      • --section=.text <==> -j .text
    • -g: 显示调试信息
    • ref

返回目录

openssl(gmssl tassl)

openssl

  • openssl
    • openssl version <==> openssl OpenSSl > version
    • 命令行传入数据
      • echo "xxx" | openssl cmd :文本
      • echo -n "xxx" | openssl cmd :文本
      • echo xxx | openssl cmd :文本,可以没有双引号
      • echo xxx | openssl cmd :文本,可以没有双引号
      • opnessl cmd filename (不支持-in, 支持-out)
      • echo -n -e "\xaa\xbb" | openssl cmd:二进制(16进制)
        • 注意: echo 1 > 1.txt <==> echo -e "\x31" > 1.txt
    • 通用选项
      • openssl cmd - in infile
      • openssl cmd -out outfile

  • openssl help

  • prime

    • openssl prime n <==> openssl prime -check n
    • openssl prime -check 79
    • openssl prime -check -hex 4F
    • openssl prime -generate -bits 10
    • openssl prime -generate -bits 10 -hex
  • rand n: 产生n字节随机数,默认二进制(16进制),| od -tx1 可以看到字符串

    • -hex: 16进制字符串,等价于 | od -tx1
    • -base64: base64字符串
    • -out outfile 写到outfile中,等价于 > outfile
    • -rand seedfile 指定seedfile,默认从CA主配置字段的randfile选项中指定,如果没有,采用从屏幕状态获取随机数种子的方法,多个文件Linux中用“:”分开,Windows中用“;”分开
  • base64

    • echo -n "ljp" | openssl base64
    • echo "QQ--" | openssl base64 -d
    • openssl base64 -in test.txt -out test.b64
    • openssl base64 -in test.b64 -out testo.txt
  • asn1parse

    • der
      • echo -ne "\xyy\xzz" > test.der
        • echo -ne "\x03\x03\x02\x44\xec" >test.der
      • openssl asn1parse -inform der -i -in test.der
    • pem
      • openssl base64 -in test.der -out test.pem
      • openssl asn1parse -inform pem -in test.pem
    • ref
  • dgst

    • openssl sm3 <==> openssl dgst -sm3
    • echo -n "12345" | openssl sm3 <==> echo -n "12345" | openssl sm3
    • openssl dgst -digest
  • enc

    • 选项
      • -e:编码,默认,可省
      • -d:解码
      • -in:输入文件
      • -out:输出文件
    • 字符串与字节数组
      • echo 后带不带引号都是字符串,二进制串 echo -n -e "\xXX\xYY"
        • echo 1234 | openssl sm4
        • echo "1234" | openssl sm4: 与上一条等价
        • echo -n "1234" | openssl sm4: 与上一条有什么差别?
      • -K: 字符串=>字节数组作为密钥
        • echo -n 1234 | openssl sm4-cbc -K "2851fa25211a48023794ae9515909603" -iv "da80e405a4998c351b0717093cbe86ab" | od -tx1
        • echo -n "1234" | openssl sm4-cbc -K "2851FA25211A48023794AE9515909603" -iv "DA80E405A4998C351B0717093CBE86AB" | od -tx1 :与上一条等价
    • 加解密
      • echo -n "1234" | openssl sm4-cbc -K "2851fa25211a48023794ae9515909603" -iv "da80e405a4998c351b0717093cbe86ab" -out 1234.enc
      • openssl sm4-cbc -d -K "2851fa25211a48023794ae9515909603" -iv "da80e405a4998c351b0717093cbe86ab" -in 1234.enc
  • 非对称算法

  • 证书与CA

  • 源码

    • 数据结构
      • Hash
      • 文本数据库
  • ref

gmssl

tassl

返回目录

paste : 按列和并文件

  • paste
    • -d D 列用D分隔开,默认tab
    • -s 串行面不是并行,就是以每个文件自身为一个处理单元,将此文件中的所有行以-d选项设定的间隔符拼接成一大行,并输出到标准输出中。

返回目录

ping: 测试主机之间网络的连通性

  • ping
    • -c N: ping N 次
    • -q:不显示指令执行过程,只显示汇总
    • -s N:设置数据包的大小为N
    • -t N:设置TTL的大小为N
    • -i N:指定收发信息的间隔时间为Ns, 默认1s,N可以设置成小数
    • -f:尽快发包,相当-i指定一个极小的数,极限检测,flood ping
    • -I:指定网络接口,网卡
    • -v:详细显示指令的执行过程。
      返回目录

prolog

返回目录

pwd

返回目录

read

  • read:输入
    • 缺省变量REPLY,可以多个变量
    • -p: 提示字符串
    • -nN:读n个字符赋值到变量中
    • -a arr:输入到数组arr中
    • -d X:结束字符
    • -tn:等待时间ns
    • -s:密码输入
    • -r:取消转义字符

返回目录

rm

  • rm
    • -d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
    • -f:强制删除文件或目录;
    • -i:删除已有文件或目录之前先询问用户;
    • -r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
  • cheatsheet
    • rm -rf dir: 强制删除目录及子目录(危险)

返回目录

rmdir: 删除空目录

  • rmdir
    • -p或--parents :删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;

返回目录

route:

  • route
    • -v:详细信息模式
    • -n:不执行DNS反向查找,直接显示数字形式的IP地址
    • -e:netstat格式显示路由表;
    • -net:到一个网络的路由表;
    • -host:到一个主机的路由表。
  • 添加⽹关
    • route add default gw <⽹关ip>
    • route add -host <指定ip> gw <⽹关ip>
    • route add -net <指定⽹段> netmask <⼦⽹掩码> gw <⽹关ip>

返回目录

rsync: 远程数据同步

  • rsync
    • rsync src1 src2 dst
      • -t:让修改时间也同步. 1.使用-t 选项后,rsync总会想着一件事,那就是将源文件的"modified time"同步到目标机器。2.带有-t 选项的 rsync,会变得更"聪明",它会在同步前先对比两边文件的时间戳和文件大小。如果时间戳和文件大小都完全一致,那么就认定两边文件是一样的,于是,对这个文件就不会发起同步动作了。3.因为 rsync 的"聪明",所以也会反被聪明误。如果目的端的文件的时间戳、大小和源端完全一致,但是内容恰巧不一致时,rsync 就发现不了了。这就是传说中的"坑"! 4.对于 rsync 自作聪明的情况,解决办法就是使用-I选项(字母i的大写形式)。
      • -I:踏实做人,不跳过那些有同样的时间和长度的文件。1.-I选项会让 rsync变得很乖巧,即它会挨个文件去发起数据同步。2.-I选项可以确保数据的一致性,代价便是速度上会变慢,因为我们放弃了"quick check"策略。3.无论情况如何,目的端文件的 modified time 总会被更新到当前时刻。
      • -v, --verbose :详细模式输出。增加越多的v,就可以获得越多的日志信息。
      • -r, --recursive: 对子目录以递归模式处理。
      • -l, --links: 保留软链接。
      • -H, --hard-links: 保留硬链结。
      • -p, --perms: 保持文件权限。
      • -o, --owner: 保持文件属主信息。
      • -g, --group: 保持文件属组信息。
      • -D, --devices: 保持设备文件信息。
      • -a, --archive:归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD,无法同步硬链接,需要加-H
      • --partial : 断点续传功能。
    • 功能
      • 只要目的端的文件内容和源端不一样,就会触发数据同步,rsync 会确保目的端的文件保持和源端一致。
      • rsync 不会同步文件的"modified time",凡是有数据同步的文件,目的端文件的"modified time"总是会被修改为最新时刻的时间。
      • rsync 不太关注目的端文件的rwx 权限。如果目的端没有此文件,那么权限会保持与源端一致。如果目的端有此文件,则权限不会随着源端变更。
      • 只要 rsync有对源文件的读权限,且对目标路径有写权限,rsync 就能确保目的端文件同步到和源端一致。
      • rsync 只能以登录目的端的账号来创建文件,它没有能力保持目的端文件的属主和属组和源端一致。(除非你使用 root 权限,才有资格要求属主一致、属组一致)
  • ref

返回目录

sar

返回目录

sed : 非交互文本编辑

返回目录

shell

basic

  • 系统安装了哪些shell
    • cat /etc/shells:
    • chsh -l
  • echo $SHELL: 当前shell
  • chsh -s /bin/zsh: 更换shell
    • 更改/etc/password 中自己用户名中那一行的shell
  • zsh
    • 集大成者

返回目录

shell script

  • hello world
#! /bin/bash
# comment
echo hello
  • 命令行参数
    • mysh a b c d
    • $0 $1 $2 $3 $4
    • $0...$9:$0是脚本名称
    • \(10...\)n
    • $#:参数个数 $1~$n
    • $*:所有命令行参数包括$0
    • $S:执行sh的进程PID
    • $?:最后一个命令的推出状态
  • 测试

  • 判断
  • 数组
    • array_name=(value1 value2 ... valuen):空格分开,小括号围起来
    • array_name[0]=value0 :单个元素赋值
    • 访问数组元素:${array_name[index]}
  • ref

返回目录

sleep

  • sleep
    • sleep n: 默认秒
      • s 为秒,m 为 分钟,h 为小时,d 为日数
    • cheatsheet
      • sleep 1m 40s
      • sleep 7d 2h 5m 4s
      • sleep 0.001
      • time sleep: sleep不消耗CPU时间

返回目录

sort

  • sort
    • -t<分隔字符>:指定排序时所用的栏位分隔字符,默认空格
    • -n:依照数值的大小排序,默认是按ascii码排序
    • -r:以降序来排序,默认升序
    • -o <输出文件>:将排序后的结果存入指定的文件;
      • sort test.txt > test.txt: 写回原文件出错,成空文件
      • sort test.txt -o test.txt: ok
    • -u : 清除重复行
    • -k N: 针对第N列进行排序,默认是按第一列,范围语法如下:
      • -k 1.2,1.2 -k 3,3nr: 第一列的第二个字母,相同则第三列按数字降序
      • 当没有使用-n选项,同时-k 选项没有指定 End 部分时,则会比较从所指定的列到行尾的所有内容,与此同时,并不支持使用多个-k 选项。
      • 当使用-n 选项,同时-k 选项没有指定 End 部分时,则当比较的列出现内容相同情况时,则会从第一列开始进行比较。
      • Modifier
        • n:数值
        • r:降序
        • b 表示忽略本域前面的空白符号。
        • d表示对本域按照字典顺序排序(即,只考虑空白和字母)。
        • f 表示对本域忽略大小写进行排序。
        • i表示忽略"不可打印字符",只针对可打印字符进行排序。(有些ASCII就是不可打印字符,比如\a是报警、\b 是退格、\n是换行、\r是回车,等等)
FStart.CStart Modifier,FEnd.CEnd Modifier
-------Start--------,-------End--------
 FStart.CStart 选项  ,  FEnd.CEnd 选项

返回目录

split: 文件分割

  • split

    • -b<字节>∶ 指定按多少字节进行拆分,也可以指定K、M、G、T等单位。-
    • <行数> 或 -1<行数>∶ 指定每多少行要拆分成一个文件。
    • 输出文件名前缀∶设置拆分后的文件的名称前缀,split 会自动在前缀后加上编号,默认从 aa 开始。
    • -a<后缀长度>∶ 默认的后缀长度是 2,也就是按 aa、ab、ac 这样的格式依次编号。
    • -d:使用数字作为后缀
  • cheatsheet

    • cat f1 f2 > f: cat合并
    • copy /b f1 + f2 f :Windows 下用copy 合并
    • md5sum

返回目录

ss

返回目录

ssh

  • ssh
  • ssh-copy-id
    • 手工
      • "machineA 机器的 nameA 账号"建立到"machineB机器的 nameB账号的 ssh 信任关系,无须输入密码即可登录的目的
        • 1.将 machineA机器的/home/nameA/.ssh/id_rsa.pub 文件的内容复制出来。
        • 2.登录到 machineB 机器的/home/nameB/.ssh 中,如果不存在则创建authorized_keys 文件,将第1步中的内容追加到文件尾部。
        • 3.检查 authorized_keys 文件的权限,确保其 group/other 位没有w 权限。
          1. 登录到 machineA 机器,测试 ssh 信任关系是否建好。
    • ssh-copy-id 脚本
      • [nameA@machineA]$ ssh-keygen -t rsa (公私钥对在~/.ssh中)
      • [nameAemachineA]$ ssh-copy-id "-p 22000 nameB@machineB" (要使用引号指定端口)
  • ref

返回目录

stat : status,properties of a file for filesystem

  • stat
    • -f:显示文件系统状态而非文件状态

返回目录

stdin stdout stderr

返回目录

strace: 对系统调用和信号传递的跟踪结果进行分析

  • strace
    • -o xxx:结果保存到xxx文件中
    • -c:会将进程的所有系统调用做一个统计分析展示出来
    • -T:将每个系统调用所花费的时间打印出来
  • ref

返回目录

sudo

  • sudo(8),sudoers(5)
  • /etc/sudoers(visudo 命令编辑)
    • username ALL=(ALL) ALL:在任何主机上执行任何命令
      • (ALL):以任何用户身份运行命令

返回目录

systemctl

  • ⽹络服务管理程序分为两种
    • SysV: service
    • systemd: systemctl
  • 配置文件
    • ifcfg-eth0
    • /etc/hosts

systemctl

  • systemctl list-unit-files NetworkManager.service
  • systemctl start|stop|restart NetworkManger
  • systemctl enable|disable NetworkManger

service

  • service network start|stop|restart
    • chkconfig -list network: 关闭service

tar(bzip2,gzip,zip)

  • 打包压缩
    • 打包:tar
    • 压缩:bzip2,gzip,zip

tar

  • tar
    • 打包
      • tar cf xx.tar dirfiles: 打包dirfiles为xx.tar
      • tar cf xx.tar -C dir :解包到dir
    • 压缩
      • tar -cvf log.tar log2012.log: 仅打包,不压缩!
      • tar -zcvf log.tar.gz log2012.log: 打包后,以 gzip 压缩
      • tar -jcvf log.tar.bz2 log2012.log: 打包后,以 bzip2 压缩
    • 查询解压
      • 查 询:tar -jtvf filename.tar.bz2: c->t
      • 解压缩:tar -jxvf filename.tar.bz2 -C 欲解压缩的目录: c->x

bzip2

gzip

zip

返回目录

tcpdump

  • tcpdump:tcpdump 可以分为三大部分内容∶第一是"选项",第二是"过滤表达式",第三是"输出信息"。
    • -i <网络接口>:使用指定的网络接口(网卡)送出数据包;默认监听第一个eth0, 在多网卡特别需要指定
    • -n:不把主机的网络地址转换成名字
    • -nn: 当 tcpdump 遇到协议号或端口号时,不要将这些数字转换成对应的协议名称或端口名称。比如,众所周知 21 号端口是 FTP 端口,我们希望显示"21",而非"FTP"。
    • -X∶ 把协议头和包内容都原原本本地显示出来。tcpdump 会同时以 16 进制和 ASCII 的形式显示,这在进行协议分析时是绝对的利器。
    • port xx∶要有选择地展示所抓到的特定端口的包。其他的数据包就不要再显示出来了。
    • -c n∶是 Count 的含义,这个选项用来设置我们希望 tcpdump 帮我们抓几个包。
    • -e: 增加数据链路层以太网帧头部信息输出
    • -l:让输出变为行缓冲.UNIX/Linux 的标准 I/O提供了全缓冲、行缓冲和无缓冲三种缓冲方式。标准错误是不带缓冲的,而终端设备常为行缓冲,其他情况默认都是全缓冲的。
    • -w filename∶将raw packets流量保存到文件中,注意是二进制文件
    • -r filename : 文本方式显示-w保存的raw packets
  • 过滤:过滤表达式含有 Shell 通配符时,使用单引号把表达式括起来,以防 Shell 把含有通配符的表达式先进行了解释和通配。
    • man pcap-filter
    • 过滤条件
      • 类型
        • host∶指定主机名或IP地址,默认host. 例如'host roclinux.cn'或'host 202.112.18.34 '
        • net∶ 指定网络段,例如 'src net 128.3'或'dst net 128.3'。
        • port:指定端口号,例如 'src port 53'
        • portrange∶指定端口区域,例如'src or dst portrange 6000-6008'。
      • 方向: dst, src (and or)
      • 协议:udp、tcp、ether、ip、ip6、arp、rarp
  • cheatsheet
    • tcpdump -i eth0 -nn -X 'port 53' -c 1
  • ref

返回目录

tee

返回目录

time

  • sudo apt install time :不用bash中的time,用/usr/bin/time
    • time -v
      • 时间
      • 内存
      • I/O
  • time
    • real = user + sys(大概,一般大于,多核会小于)
  • cheatsheet
    • time ls
      • real∶ 从进程 Is 开始执行到完成所耗费的 CPU 总时间。该时间包括 ls进程执行时实际使用的 CPU 时间,ls 进程耗费在阻塞上的时间(如等待完成 I/O操作)和其他进程所耗费的时间(Linux 是多进程系统,ls 在执行过程中,可能会有别的进程抢占 CPU)。
      • user∶ 进程 ls执行用户态代码所耗费的 CPU 时间。该时间仅指 ls 进程执行时实际使用的 CPU 时间,而不包括其他进程所使用的时间和本进程阻塞的时间。
      • sys; 进程 ls 在内核态运行所耗费的 CPU 时间,即执行内核系统调用所耗费的 CPU 时间。

返回目录

tmux

  • tmux: 分屏工具
    • 命令
      • tmux new -s sessionname
      • tmux ls
      • tmux attach
      • tmux detach
      • 快捷键
        • Ctrl+b ?: 帮助
        • Ctrl+b d:分离当前会话。
        • Ctrl+b s:列出所有会话。
        • Ctrl+b $:重命名当前会话。
    • 窗格
      • tmux split-window: 上下
      • tmux split-window -h : 左右
      • tmux select-pane -U(D L R):光标移动
      • tmux swap-pane -U(D):交换窗格位置。
      • 快捷键
        • Ctrl+b %:划分左右两个窗格。
        • Ctrl+b ":划分上下两个窗格。
        • Ctrl+b :光标切换到其他窗格。是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键↓。
        • Ctrl+b ;:光标切换到上一个窗格。
        • Ctrl+b o:光标切换到下一个窗格。
        • Ctrl+b {:当前窗格与上一个窗格交换位置。
        • Ctrl+b }:当前窗格与下一个窗格交换位置。
        • Ctrl+b Ctrl+o:所有窗格向前移动一个位置,第一个窗格变成最后一个窗格。
        • Ctrl+b Alt+o:所有窗格向后移动一个位置,最后一个窗格变成第一个窗格。
        • Ctrl+b x:关闭当前窗格。
        • Ctrl+b !:将当前窗格拆分为一个独立窗口。
        • Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小。
        • Ctrl+b Ctrl+:按箭头方向调整窗格大小。
        • Ctrl+b q:显示窗格编号。
    • cheatsheet
      • tmux new -s xxx: 启动
  • ref

返回目录

top: 性能监测

  • top
    • 用途
      • 1.找到是哪些进程在大量消耗 CPU资源。
      • 2.看看哪些进程消耗了内存空间。
      • 3.看看哪些进程占用的 CPU 时间最多。
    • 选项
    • 交互命令
      • 配置文件:~/.toprc (top -f, W保存)
      • f:
      • o:
    • 输出

返回目录

tr

  • tr
    • 字符集必须用引号
  • cheatsheet
    • echo "HELLO WORLD" | tr 'A-Z' 'a-z': 大写-》小写
    • echo "hello world" | tr 'a-z' 'A-Z': 小写-》大写
    • echo "hello 123 world 456" | tr -d '0-9' :删除数字

返回目录

traceroute tracert

  • traceroute
  • traceroute命令
    • -m: 跳数
    • -n:显示IP地址,不查主机名
    • -p 6888:探测包使用的基本UDP端口设置6888
    • -q 4:把探测包的个数设置为值4
    • -r:绕过正常的路由表,直接发送到网络相连的主机
    • -w 3:把对外发探测包的等待响应时间设置为3秒

返回目录

tshark

返回目录

uname

  • uname:uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)
    • -a: 所有信息

返回目录

uniq

返回目录

uptime

  • uptime
    • 两大功能∶
      • 查看机器的开机时长
      • 查看 CPU 负载情况
    • 系统平均负载,是指在特定时间间隔内运行队列中的平均进程数。
      • cat /proc/loadavg 查看平均负载

返回目录

user

配置文件

  • /root root 用户的家目录
  • /home/USERNAME 普通用户默认家目录位置
  • /etc/passwd 用户配置文件
  • /etc/shadow 用户密码相关配置文件
  • /etc/group 用户组配置文件

useradd 新建用户

id: 显示真实有效的用户ID(UID)和组ID(GID)

userdel 删除用户

passwd 修改用户密码

usermod 修改用户属性

chage 修改帐号和密码的有效期限

groupdel 新建用户组

groupdel 删除用户组

su

  • su
    • su - USERNAME: 使用 login shell 方式切换用户

sudo

  • sudo
    • visudo 设置需要使用 sudo 的用户(组)
    • /etc/sudoers中设置了可执行sudo指令的用户

返回目录

vagrant

vim

  • vim

    • 多模式
      • 正常模式 (Normal-mode):ESC
      • 插入模式 (Insert-mode) :i I a A o O
      • 命令模式 (Command-mode): :
      • 可视模式 (Visual-mode): v V ctrl+v
    • 基本操作
      • 正常模式
        • y 复制
        • d 剪切
        • p 粘贴
        • u 撤销
        • ctrl + r 重做
        • x 删除单个字符
        • r 替换单个字符
        • G 定位指定的行
        • ^ 定位到行首
        • $ 定位到行尾
      • 命令模式
        • :w 写入
        • :q 退出
        • :! 执行 Shell 命令
        • 😒 替换
        • / 查找
        • :set 设置命令
      • 可视模式
        • 三种进入可视模式的方式
          • v 字符可视模式
          • V 行可视模式
          • ctrl+v 块可视模式
            • 配合 d 和 I(大写 i ) 命令可以进行块的便利操作
  • 查找

    • / 往后查
    • ? 往前查
  • 替换

    • 语法:[addr] s/源字符串/目的字符串/[option]
      • [addr]表示检索范围,[addr]省略时表示当前行:
        • "1,n":表示从第1行到n行
        • "%":表示整个文件,同"1,$"
        • ".,$":表示从当前行到文件尾
      • s:表示替换操作,其为substitute的缩写
      • [option] : 表示操作类型,[option]省略时仅对每行第一个匹配串进行替换:
        • g:globe,表示全局替换
        • c:confirm,表示进行确认
        • p:表示替代结果逐行显示(Ctrl + L恢复屏幕)
        • i:ignore,不区分大小写
  • ref

返回目录

vmstat: Virtual Memory Statistics

  • vmstat
    • vmstat 输出间隔秒数 输出次数
      • vmstat 输出的第一行数字,是自服务器启动至今的各项指标的平均值,而非最新状态值,从第二行开始的,才能反映服务器当前最新状态。
    • -a: 显示活跃内存
      • 非活跃内存(inactive memory)∶一段时间内没有被使用过的内存。(如果你开启了SWAP,那么这类内存会优先被交换到 SWAP 中)
      • 活跃内存(active memory)∶ 正在被使用中的内存。
    • -f:显示启动后创建的进程总数;
      • 准确地说,forks 是由 fork、vfork 和 clone 三类系统调用(system calls)所产生的,可以理解为是系统创建的总任务(tasks)数。
      • 任务数怎么理解呢?一个进程可以包含一个或多个任务(tasks),而具体包括多少任务,则取决于此进程中创建了多少个线程。
    • -m:显示内存slab信息;
    • -n:头信息仅显示一次;
    • -s:以表格方式显示事件计数器和内存状态;
    • -d:报告磁盘状态和统计信息;
    • -p:显示指定的硬盘分区状态的I/O信息;
    • -S:输出信息的单位。
  • 发现问题
    • 如果 cache 的数值较大,则说明系统缓存了较多的磁盘数据,利于磁盘 I/O性能的提升。这个时候,往往 bi 会相对较小,因为很多读磁盘的操作都由 cache 来承担了。
    • 而 si和 so 则是读写 SWAP的量,这两个值如果长期大于0,则表示系统需要经常读写交换分区,这会很消耗 CPU 资源和磁盘 I/O 性能。这时就要格外关注了,如果确定是系统的物理内存存在瓶颈,那么就要通过扩容或服务迁移来解决问题。
    • 如果 free 的数值很低,甚至接近 0 了,也不一定就是系统内存快耗尽了。要同时看 buff 和 cache 的量,大部分情况是 buff和 cache 占用了很多内存资源,这反而是好事,说明系统把空闲的内存都利用起来作为缓存,提升系统 I/O性能了。而当系统真正需要内存时,buff和 cache 是可以随时被系统征调回来的。
    • 如果发现 bi 和 bo 的值很大,则说明系统正在进行大量的磁盘读写操作。如果是符合预期的还好,如果不是的话,就要去查一查到底是哪块磁盘、哪个分区在进行大量读写。
    • 如果 us 的数值经常大于 50%,则说明用户进程所占用的 CPU 时间较多,这或许说明所开发的程序需要进行一定程度的性能优化了。
    • 而 sy 是内核所消耗的 CPU时间,这个数值不应该很高。如果很高,则一定是系统哪里出了问题。
    • 如果 wa 较高,则说明 CPU 总是在等待 I/O 操作。这表明磁盘已经成为主要瓶颈,我们可以把磁盘升级为高性能磁盘,也可以查一下我们的程序是不是存在大量的随机读操作,如果是的话,可以考虑调整为顺序读或者考虑增加读缓存。
    • 而r表示的是正在运行队列中的任务数,如果这个数值总是超过服务器的CPU 核数,则说明 CPU 已经成为性能瓶颈,可以考虑开启超线程、更换更多核的 CPU、调整某些进程的 NICE 优先级等措施。
    • 如果你正在运行一个视频编解码的任务,那么 us 的数值可能会很高,甚至达到 95%以上,这是符合预期的,不要紧张。如果你要运行一个能产生大量随机数的程序,或者其他包含系统调用的程序,那么 sy 可能会非常高,这也很正常。
    • 假如你打开了一个大型软件,比如 Office 程序,然后过了一段时间,你又希望启动另一个大型游戏,这时候,你会发现 so 的数值会升高,这表示系统正在将内存里的闲置数据写入到SWAP 中,这也是正常现象。如果你希望减少这类 SWAP写入,那么就去加大内存吧。

返回目录

watch

  • watch:周期性的方式执行给定的指令,指令输出以全屏方式显示
    • -n N: 间隔Ns
    • -d : 高亮显示改变之处
    • -t : 不显示标题

返回目录

wc: word count

  • wc
    • -c或--bytes或--chars:只显示Bytes数;
    • -l或--lines:只显示列数
    • -w或--words:只显示字数
    • -m: 字符
    • -L: 最长行的长度

返回目录

wget

  • wget
    • -O:指定文件名保存
    • -o,--output-file=logfile,wget运行过程中输出到标准输出的内容都会被写到所设置的logfile 文件中。
    • -b: 后台下载,大文件用
    • -c: 断点续传
    • -i filelist.txt:批量下载
    • -r:递归下载方式,可用来下载目录
      • -nH, --no-host-directories。wget -r命令下载目录时,默认会创建以域名命名的文件夹。而使用-nH 选项后就可以避免这种默认行为。
      • -cut-dirs=number :下载数据时,在本地创建目录时,忽略前面多少层的目录结构。
    • -A<后缀名>:指定要下载文件的后缀名,多个后缀名之间使用逗号进行分隔
    • -N,--timestamping:它表示开启时间戳机制,wget会先比较远程和本地文件的时间戳,然后只将远程时间戳更新的文件下载到本地。
    • -nc: -nc 选项是不允许和-N 选项同时设置的。
      • 当多次下载同一个文件时,本地同名文件或者被覆盖,或者被重写,或者被保护,这都是有可能的。
      • 当使用 wget 多次下载同一个文件,且不使用-N、-nc 或-r时,那么 wget 会默认在第二次下载时自动在文件名后加上".1"后缀,第三次下载时加上".2"后缀,以此类推
      • 使用-nc 选项时,wget不会使用"后缀.1、后缀.2"这样的策略,而是拒绝下载同一文件(即使文件内容是更新的了)。可以使用-nc避免相同文件被多次下载。
    • -w,--wait=seconds :用于设置 wget 每两个请求之间间隔的秒数。可以降低远程服务器的负载。除了直接设置秒数外,还可以加上 m 表示分钟、h表示小时、d表示天。
  • 配置
    • /etc/wgetrc
    • ~/.wgetrc
    • .wgetrc 和-X 和/etc/wgetrc的设置是属于平等关系,三者在使用时会进行并集。而在设置了-X''时,就完全去掉了.wgetrc 和/etc/wgetrc 对目录的限制作用。
  • cheatsheet
    • wget --mirror -p --convert-links -P ./LOCAL URL: 下载整个网站到本地
      • --miror: 开户镜像下载。
      • -p: 下载所有为了html页面显示正常的文件。
      • --convert-links: 下载后,转换成本地的链接。
      • -P ./LOCAL: 保存所有文件和目录到本地指定目录。
    • wget -r -X'' -X wukong,bajie ftp://localhost
      • 使用-X''的目的就是去除.wgetrc/etc/wgetrc 的作用,然后再用-X wukong,bajie设置,就可以踏踏实实地保证不下载 wukong 和 bajie目录,而其他目录绝不会受影响。
    • wget -r --execute robots=off http:/my-test.cn:6l212/ :突破robots.txt的限制
      返回目录

who

  • who am i

返回目录

xargs

  • 见find

返回目录

xxd

  • 见cat

返回目录

zip

  • 见tar

返回目录

Ubuntu

返回目录

apt

返回目录

dpkg

返回目录

tools

  • ohmyzsh
# git

if [ ! -f /usr/bin/git ]; then
    sudo apt install -y git
fi

# zsh

if [ ! -f /usr/bin/zsh ]; then
    sudo apt install  -y zsh
fi

# oh my zsh

if [ ! -d /home/rocedu/.oh-my-zsh ]; then
    wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
fi
 
sudo chsh -s /usr/bin/zsh
 
 #powerline font : Meslo LG字体
 pip3 install powerline-status --user
 
 if [ ! -d ~/fonts ]; then
     cd ~ 
     git clone https://github.com/powerline/fonts.git --depth=1
     cd ~/fonts
     ./install.sh
 fi
  
 # vi .zshrc
 # ZSH_THEME="agnoster"

  • install.sh

#! /bin/sh

## update system
sudo apt update
sudo apt upgrade -y

##  tools 
if [ ! -f /snap/bin/cheat ]; 
then
	sudo snap install cheat
	
	sudo apt install -y tree ascii mlocate cowsay 
	sudo apt install -y net-tools traceroute netwox wireshark tshark nmap 
	
	#echo "cowsay -f $(ls /usr/share/cowsay/cows | shuf -n 1 | cut -d. -f1) $(whatis $(ls /bin) 2> /dev/null | shuf -n 1)" >> ~/.bashrc
	
	. .bashrc
	
	# echo "cowsay -f $(ls /usr/share/cowsay/cows | shuf -n 1 | cut -d. -f1) $(whatis $(ls /bin) 2> /dev/null | shuf -n 1)" >> ~/.zshrc
	
	. .zshrc
	sudo apt install -y bsdgames  #diocs bocsd
fi


### zsh
if [ ! -d ~/.oh-my-zsh ]; then
    sudo apt install  -y zsh
    
    wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh #### oh my zsh
    # sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
    chsh -s /usr/bin/zsh
 
    pip3 install powerline-status --user  #### powerline font : Meslo LG字体
    if [ ! -d ~/fonts ]; then
        cd ~
        git clone https://github.com/powerline/fonts.git --depth=1
        ~/fonts/install.sh
    fi
 
    echo 'ZSH_THEME="agnoster"' >> ~/.zshrc #### vi .zshrc
    . ~/.zshrc

fi


## programming

# c/c++
if [ ! -f /usr/bin/git ]; 
then
    sudo apt install -y gcc gdb cgdb g++ vim-nox code git valgrind ddd
    
    //gcc -m32
    sudo apt-get install -y build-essential module-assistant  
    sudo apt-get install -y gcc-multilib g++-multilib 
fi

# java

if [ ! -f /usr/bin/javac ]; 
then
	sudo apt install -y default-jdk-headless
fi

# golang

if [ ! -f /usr/bin/go ]; 
then
	sudo apt install -y golang-go
fi

# scheme
if [ ! -f /usr/bin/scheme ]; 
then
	sudo apt install -y mit-scheme
fi

# prolog
if [ ! -f /usr/bin/prolog ]; 
then
	sudo apt install -y gprolog
fi

# clojure
if [ ! -f /usr/bin/clojure ]; 
then
	sudo apt install -y clojure
fi

# haskell
if [ ! -f /usr/bin/ghci ]; 
then
	sudo apt install -y haskell-platform
fi


## io
if [ ! -f /usr/bin/io ]; 
then
    iourl=https://iobin.suspended-chord.info/linux/iobin-linux-x64-deb-current.zip
    wget $(iourl) -O io.zip
    unzip ~/io.zip -d ~
    mv Io*.deb io.deb
    sudo dpkg -i io.deb
    rm ~/io.zip
    
    if [ -f README.txt ];
    then
        rm ~/README.txt
    fi
    
    if [ -f license.txt ];
    then
        rm ~/license.txt
    fi
fi



## database
# mysql  

if [ ! -f /usr/bin/mysql ]; 
then
    mysqlurl=https://repo.mysql.com//mysql-apt-config_0.8.15-1_all.deb
    wget $(mysqlurl) -O mysql.deb
    sudo dpkg -i mysql.deb
    sudo apt update
    sudo apt install mysql-server
    #rocedu410
fi

# postgresql

if [ ! -f /usr/bin/psql ]; 
then
    sudo apt install -y postgresql pgadmin3
fi


# sqlite3

if [ ! -f /usr/bin/sqlite3 ]; 
then
    sudo apt install -y sqlite3
fi



#tomcat

if [ ! -d ~/apache-tomcat ]; 
then
	wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.39/bin/apache-tomcat-9.0.39.zip -O ~/apache-tomcat.zip
	unzip ~/apache-tomcat.zip -d ~
	rm ~/apache-tomcat.zip
	mv ~/apache-tomcat-9.0.39 ~/apache-tomcat
fi

# OpenResty
sudo apt-get -y install --no-install-recommends wget gnupg ca-certificates # 安装导入GPG公钥所需的依赖包
wget -O - https://openresty.org/package/pubkey.gpg | sudo apt-key add - # 导入GPG密钥
sudo apt-get -y install --no-install-recommends software-properties-common # 安装add-apt-repository命令
sudo add-apt-repository -y "deb http://openresty.org/package/ubuntu $(lsb_release -sc) main" # 添加官方仓库
sudo apt  update # 更新APT索引
sudo apt install -y openresty # 安装 OpenResty


#anaconda
if [ ! -d ~/anaconda3 ]; 
then
	wget https://repo.anaconda.com/archive/Anaconda3-2020.07-Linux-x86_64.sh -O ~/anaconda.sh
	chmod +x ~/anaconda.sh
	~/anaconda.sh
	rm ~/anaconda.sh
	
	conda update conda
    conda update anaconda
    conda install -c anaconda sphinx
    conda install -c conda-forge notedown
    conda install -c conda-forge nodejs
    conda install -c conda-forge jupyterlab
	
	## pip3
	sudo apt install python3-pip
	## pygame
	python3 -m pip install pygame==2.0.0
	## Sphinx
	pip3 install -U Sphinx
fi


## web

# docker
if [ ! -f /usr/bin/docker ]; 
then
    sudo apt install -y docker.io
fi

# docker

# node
if [ ! -f /usr/bin/node ]; 
then
    sudo apt install -y nodejs npm 
fi

## cleanup
sudo apt autoremove


返回目录

mysql

  • mysql出现ERROR1698: 文章有坑,测试不可用
    • sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
      • 最后加上skip-grant-tables
    • 在终端上输入mysql -u root -p,遇见输入密码的提示直接回车即可,进入mysql后,分别执行下面三句话:
      • use mysql; 然后敲回车
      • update user set authentication_string=password("ln122920"),plugin='mysql_native_password' where user='root'
      • flush privileges 然后敲回车
    • 注释掉skip-grant-tables
  • mysql加固

返回目录

PostgreSQL

返回目录

CentOS

返回目录

rpm

返回目录

yum

返回目录

tools


#! /bin/sh

## update system
sudo yum upgrade
sudo yum update

## tools
sudo yum install yum-utils  # yumdownloader rpmnamewithoutrpm
## programming
# code
if [ ! -f /usr/bin/code ];
then
    sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
    sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
    sudo dnf check-update
    sudo dnf install code
fi

# c/c++
if [ ! -f /usr/bin/gdb ];
then
    sudo yum install gdb valgrind vim
fi

# java
if [ ! -f /usr/bin/javac ];
then 
    # defaultjdk=java-11-openjdk-devel.x86_64
    defaultjdk=java-1.8.0-openjdk-devel.x86_64
    sudo yum install ${defaultjdk}
fi

# golang

if [ ! -f /usr/bin/go ]; 
then
	sudo yum install golang-bin
fi

# tomcat
if [ ! -d ~/apache-tomcat ]; 
then
	wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.39/bin/apache-tomcat-9.0.39.zip -O ~/apache-tomcat.zip
	unzip ~/apache-tomcat.zip -d ~
	rm ~/apache-tomcat.zip
	mv ~/apache-tomcat-9.0.39 ~/apache-tomcat
fi

# mysql

if [ ! -f /usr/bin/mysql ];
then
    sudo dnf install @mysql
    mysqld --initialize --lower-case-table-names=1
    sudo systemctl enable --now mysqld
    sudo systemctl status mysqld
    sudo mysql_secure_installation
    sudo systemctl restart mysqld
fi

sudo dnf install @mysql



#anaconda
if [ ! -d ~/anaconda3 ]; 
then
	wget https://repo.anaconda.com/archive/Anaconda3-2020.07-Linux-x86_64.sh -O ~/anaconda.sh
	chmod +x ~/anaconda.sh
	~/anaconda.sh
	rm ~/anaconda.sh
fi


# 

返回目录

Fedora

dnf

返回目录

Mac OS

返回目录

openEuler

tools

  • dnf(ukui)
  • yum(server)

ref

统信uos

  • uos开发者模式开启方法
    • 控制中心-->通用-->开发者模式
  • docker
    • sudo apt install docer-ce
    • 升级iptables: update-alternatives --set iptables /usr/sbin/iptables-legacy
    • systemctl restart docker.service
    • 重启

中标麒麟

银河麒麟

其他

参考资料


欢迎关注“rocedu”微信公众号(手机上长按二维码)

做中教,做中学,实践中共同进步!

rocedu



如果你觉得本文对你有帮助,请点一下左下角的“好文要顶”和“收藏该文


posted @ 2021-06-17 07:34  娄老师  阅读(6646)  评论(0编辑  收藏  举报