天天看點

課上用過的Linux指令

目錄

  • 課上用過的Linux指令
    • 分類
      • 基礎
      • 網絡
      • 性能
      • 安全與攻防
    • command list
      • ac: 列印使用者連接配接時間的統計資料
      • alias: 指令别名
      • apt(dnf, yum)
        • apt
        • dnf: 新一代的rpm軟體包管理器
        • dpkg
        • rpm
        • yum
        • snap
      • at :在指定時間執行指令或腳本
      • awk
      • bash
      • bc ( dc, expr, (()), [] )
      • bzip2
      • cat (echo printf hexdump od xxd): 二進制,文本輸出
        • cat
        • echo:列印字元串和變量值
        • head
        • hexdump
        • less: less is more
        • more
        • printf
        • od
        • tail
        • xxd
      • cd
      • clear:清除目前螢幕上的資訊
      • comm
      • cp
      • crontab
      • curl
      • cut: 顯示行中的指定部分,删除檔案中指定字段
      • date
      • dc: 逆波蘭式電腦
      • dd: 底層複制檔案并進行格式轉換
      • diff 逐行比較文本檔案的異同
      • dig: Domain Information Groper
      • docker
      • du: disk usage
      • echo
      • declare(env,export,set)
      • env
      • execsnoop
      • expr
      • export
      • fdisk
      • find(xargs)
      • free
      • gcc
      • gdb
        • ddd
        • jdb
        • pdb
      • git
      • gmssl
      • grep
      • gzip
      • history: 顯示指令行曆史
      • hostname
        • hostnamectl
      • ifconfig
        • ifup <接⼝>
        • ifdown <接⼝>
      • iostat
        • mpstat
      • ip
      • iterm2
      • join: 帶外鍵的paste
      • ln
      • ls
        • chmod 修改檔案、目錄權限
        • chown 更改屬主、屬組
        • chgrp 可以單獨更改屬組,不常用
        • stat
        • umask
      • lsof
      • mkdir
      • man (help info)
        • man:manual
        • help
        • info
      • mii-tool:檢視、管理媒體的網絡接口的狀态,設定協商方式
      • mount
      • mpstat: multiprocessor statistics
      • mtr
      • mv
      • nc: netcat,路由器設定
      • netstat (ss,ip)
        • netstat
        • ss: Socket Statistics
      • nmap
      • nmcli
      • nslookup : 查詢DNS,name server lookup
      • objdump
      • openssl(gmssl tassl)
        • openssl
        • tassl
      • paste : 按列和并檔案
      • ping: 測試主機之間網絡的連通性
      • prolog
      • pwd
      • read
      • rm
      • rmdir: 删除空目錄
      • route:
      • rsync: 遠端資料同步
      • sed
      • shell
        • basic
        • shell script
      • sleep
      • sort
      • split: 檔案分割
      • ss
      • ssh
      • stat : status,properties of a file for filesystem
      • stdin stdout stderr
      • strace: 對系統調用和信号傳遞的跟蹤結果進行分析
      • sudo
      • systemctl
        • service
      • tar(bzip2,gzip,zip)
        • tar
        • zip
      • tcpdump
      • tee
      • time
      • tmux
      • top: 性能監測
      • tr
      • traceroute tracert
      • tshark
      • uname
      • uniq
      • uptime
      • user
        • 配置檔案
        • useradd 建立使用者
        • id: 顯示真實有效的使用者ID(UID)群組ID(GID)
        • userdel 删除使用者
        • passwd 修改使用者密碼
        • usermod 修改使用者屬性
        • chage 修改帳号和密碼的有效期限
        • groupdel 建立使用者組
        • groupdel 删除使用者組
        • su
      • vagrant
      • vim
      • vmstat: Virtual Memory Statistics
      • watch
      • wc: word count
      • wget
      • who
      • xargs
    • Ubuntu
      • tools
      • mysql
      • PostgreSQL
    • CentOS
    • Fedora
      • dnf
    • Mac OS
    • openEuler
      • ref
    • 其他
    • 參考資料

  • 查找
    • man
    • help: 内建
    • whatis
    • which
    • whereis
    • find
    • locate
    • tree
    • rmdir
  • 檔案
    • diff
    • cut
    • split
    • wc
    • paste
    • dc
    • bc

  • ping

  • Linux
    • Linux OS 發行版
    • Linux Kernel
  • 檢視所有指令:
    • bash: 按兩次tab

  • ac: /var/log/wtmp 由 init(8) 和 login(1) 維護
    • -d name

      輸出登入使用者name的登入時間(詳細時間),目前登入使用者可預設name隻要

      -d

    • -p

      輸出所有使用者的登入時間(累積時間)

  • alias
    • alias 新的指令='原指令 -選項/參數
    • unalias 指令
      • unalias -a 删除所有
    • 檢視别名
      • alias 指令
      • 指令 ^+alt+E
    • 執行指令而不是别名
      • 使用絕對路徑
      • 在指令前加反斜杠(\)
    • 别名配置
      • ~/.alias
      • .bashrc
    • bash中使用alias
      • shopt -s expand_alias
      • 子程序:login shell會讀系統和使用者的profile和rc檔案
        • chmod +x test.sh
        • bash --login test.sh
#!/bin/bash --login  
shopt expand_aliases
shopt -s expand_aliases
shopt expand_aliases
alias
ll
           

傳回目錄

  • 包管理器是⽅便軟體安裝、解除安裝,解決軟體依賴關系的重要⼯具
    • CentOS、RedHat 使⽤ yum 包管理器,軟體安裝包格式為 rpm
    • Debian、Ubuntu 使⽤ apt 包管理器,軟體安裝包格式為 deb
    • Fedora 使⽤ dnf 包管理器,軟體安裝包格式為rpm
    • search:搜尋軟體
    • show:檢視軟體包資訊,詳細的安裝細節
      • show depends 檢視軟體包依賴關系
    • install:安裝軟體
    • update:更新軟體包清單
    • upgrade:更新已安裝的軟體包
    • full-upgrade:在更新軟體包時自動處理依賴關系
    • remove:解除安裝一個軟體包但是保留相關的配置檔案
    • purge: 解除安裝一個軟體包不保留相關的配置檔案
    • autoremove: 自動删除不需要的包
    • clean:删除軟體包的備份
    • edit-sources:編輯源清單 /etc/apt/sources.list
    • Ubuntu中apt與apt-get指令的差別

  • rpm 包格式:

    軟體名稱 軟體版本 系統版本 平台

    • vim-common-7.4.10-5.el7.x86_64.rpm
    • -q

      : 查詢軟體包
    • -i

      : 安裝軟體包
    • -e

      : 解除安裝軟體包
  • cheatsheet
    • rpm -i xxx.rpm: 安裝
    • rpm -qa | grep xxx:查找
    • rpm -qa | more: 清單
    • rpm -e xxx: 解除安裝,不能有.rpm
    • rpm -qf /usr/bin/rpm: 屬于哪個安裝包
    • 更新rpm 格式核心
      • 檢視核心版本:uname –r
      • 更新核心版本 yum install kernel-3.10.0
      • 更新已安裝的其他軟體包和更新檔 yum update
    • 核心代碼
      • 安裝依賴包:

        yum install gcc gcc-c++ make ncurses-devel openssl-devel elfutils-libelf-devel

      • 下載下傳并解壓縮核心: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 包的問題
    • 需要⾃⼰解決依賴關系
    • 軟體包來源不可靠
    • download rpm

    • 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

    • 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軟體
    • Ubuntu使用snap安裝常用軟體

  • at

    • Linux下進入中文目錄的方法

    • (cmd1, cmd2, cmd3):子shell
    • $(cmd ) <==>

      cmd

      :擷取指令運作結果
    • 背景運作指令
      • cmd(or script) &: 登出使用者,程序會kill掉
      • nohup cmd(or script) &: 登出使用者,程序不會kill掉
      • screen command
        • at -f backup.sh 10 am tomorrow
        • watch df -h
        • Bg, Fg, &, Ctrl-Z – 5 Examples to Manage Unix Background Jobs
        • Unix Nohup: Run a Command or Shell-Script Even after You Logout
        • Screen Command Examples: Get Control of Linux / Unix Terminal
        • Understand at, atq, atrm, batch Commands using 9 Examples
        • Watch: Repeat Unix Commands or Shell-Scripts every N seconds

    • 參數:
      • 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
        • 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
      • <

      • <=

      • ==

      • !=

      • >=

      • >

      • +

      • -

      • *

      • /

      • %

    • Linux-shell-算術運算{expr、bc、dc、(( ))和[ ]}

  • 見tar

    • -n

      : 列印行号
    • -b

      : 列印行号,空白行不編号

  • 無引号,單引号,雙引号
    • 單引号将所有字元都看成普通字元
    • 雙引号會解釋$、\和`這三種特殊字元
    • 不加引号會解釋所有特殊字元
    • cheatsheet:
      • 列印雙引号
        • echo '"Hello World"'
        • echo ""Hello World""
  • 參數
    • -n

      : 去除換行符,預設添加換行符,也可以通過-e控制
    • -e

      : 激活轉義字元
      • echo測試顔色
        • echo -e "\033[文字背景顔色;文字顔色m 你要顯示的内容 \033[0m"
          • -e 選項∶表示允許反斜杠(對字元)轉義。
          • \033[顔色 1;顔色2m∶ 稱為轉義序列,它本身是一個整體,中間不要有空格。
            • \033[∶轉義序列的開始。其中\O33 代表 Esc 符号,也可以使用

              \E

              \e

              來代替
            • 顔色1和顔色 2∶表示字型的前景色或背景色,至于顔色1和顔色2哪一個表示前景色,哪一個表示背景色,由其設定的數值來決定,前景色和背景色的數值空間是不同的。
            • m∶ 轉義序列的終止标志。
          • \033[0m∶ 表示将顔色恢複回原來的配色。
          • tput
            • tput setab∶ 用于設定背景色;
            • tput setaf∶ 用于設定前景色。
            • 顔色
              • 0 黑色
              • 1 紅色
              • 2 綠色
              • 3 黃色
              • 4 藍色
              • 5 洋紅色
              • 6 黃色
              • 7 白色
      • echo 寫二進制檔案
        • echo -e -n "\x11\x22" > test
      • 課上用過的Linux指令
第一種方法∶ 定義顔色變量#!/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

           

    • -n<數字>

      :指定顯示頭部内容的行數;
    • -c<字元數>

      :指定顯示頭部内容的字元數;
    • -v

      :總是顯示檔案名的頭資訊;
    • -q

      :不顯示檔案名的頭資訊。

  • -C

    :hexdump -C <===> od -tx1 -tc

  • less

    • -<數字>

      :指定每屏顯示的行數;
    • +<數字>

      :從指定數字的行開始顯示。
    • -c

      :不進行滾屏操作。每次重新整理整個螢幕;

    • printf 輸出格式 輸出字元:類C

    • -txN

      :N個位元組用16進制顯示
    • -tdN

      :N個位元組用10進制顯示
    • -tc

      : 字元顯示

    • -n<N>或——line=<N>

      :輸出檔案的尾部N(N位數字)行内容。
    • -f<name/descriptor>或;--follow<nameldescript>

      :顯示檔案最新追加的内容。“name”表示以檔案名的方式監視檔案的變化。“-f”與“-fdescriptor”等效;

    • -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,預設小寫字母

  • 絕對路徑,相對路徑
  • cd ~: go home
  • cd -: 上一個目錄
  • cd .
  • cd ..
  • .bash_profile
    • CDPATH
      • export CDPATH=.:~:/etc:/var
      • 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:将目錄彈出目錄棧

  • clear
  • cf. cls (Windows, clear screen)

    • -1

      :不顯示隻在第一個檔案出現的内容;
    • -2

      :不顯示隻在第二個檔案中出現的内容; f2
    • -3

      :不顯示同時在兩個檔案中都出現的内容。交集
    • 用法
      • comm -12 f1 f2:顯示交集
      • comm -13 f1 f2:顯示f2-f1
      • comm -23 f1 f2:顯示f1-f2

  • cp:copy
    • cp src dst
    • -R/r

      :複制目錄要用

      -r

      ,遞歸處理,将指定目錄下的所有檔案與子目錄一并複制;
    • -f

      :強行複制檔案或目錄,不論目标檔案或目錄是否已存在;
    • -i

      :覆寫既有檔案之前先詢問使用者;
    • -p

      :保留源檔案或目錄的屬性;
    • -a

      :與"-dpR"參數相同
    • -d

      :當複制符号連接配接時,把目标檔案或目錄也建立為符号連接配接,并指向與源檔案或目錄連接配接的原始檔案或目錄;
    • -b

      :覆寫已存在的檔案目标前将目标檔案備份

    • crontab執行個體
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
           

  • curl網站開發指南
  • curl 的用法指南
    • v: 詳細的HTTP請求
    • K或--config 指定配置檔案,預設.curlrc

    • 可以将一串字元作為列來顯示:
      • N-

        :從第N個位元組、字元、字段到結尾
      • N-M

        :從第N個位元組、字元、字段到第M個(包括M在内)位元組、字元、字段;
      • -M

        :從第1個位元組、字元、字段到第M個(包括M在内)位元組、字元、字段。
    • 某個範圍的位元組、字元指定為字段:
      • -b

        表示位元組;
      • -c

        表示字元;英文同-b, 中文就不一樣了,可以用-nb
      • -f

        表示定義字段。
    • -d D

      指定分割符,預設分隔符是tab
    • 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.

mm——代表月份
dd——代表日期
hh——代表 24 小時制的小時
mi——代表分鐘
yyyy——代表年
ss——代表秒 
           
  • 設定
    • date {mmddhhmiyyyy.ss}
      • date 013122192009.53
      • date +%Y%m%d -s "20090131"
      • date -s "01/31/2009 22:19:53"
      • date -s "31 JAN 2009 22:19:53"
      • date set="31 JAN 2009 22:19:53"
  • 顯示
    • 選項
      • %D 日期(月/日/年)
      • %d 一個月中的第幾天 (01..31)
      • %m 月份 (01..12)
      • %y 年份的後兩位 (00..99)
      • %a 目前語言下星期的縮寫 (Sun..Sat)
      • %A 目前語言下星期的全拼 (Sunday..Saturday)
      • %b 目前語言下月份的縮寫 (Jan..Dec)
      • %B 目前語言下的月份的全稱 (January..December)
      • %H 24 小時制小時 (00..23)
      • %I 12 小時制小時 (01..12)
      • %Y 年份(1970…)
    • 執行個體

      - date

      - date --date="now"

      - date --date="today": 以上三條等價

計算一組指令花費的時間

#!/bin/bash

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

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

  • 見 bc

  • dd
    • dd if=/dev/zero of=s.txt bs=1M count=1:産生一個1M的檔案s.txt
    • linux指令總結dd指令詳解

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

  • dig
    • -f querylist

      : 批量查詢querylist中的多個域名
    • -t type

      :指定Type
    • -q XXX

      :顯式指定域名
    • -x ip

      :反向查詢,ip->dns
    • +tcp

      用TCP代替UDP,預設使用UDP
    • +domain=

      : 預設追加域(字首)
    • +trace

      :詳細跟蹤全過程
    • +short

      :精簡輸出
    • dig :查詢根域“.”的NS記錄
    • dig . :查詢根域“.”的A記錄
    • dig @8.8.8.8 www.besti.edu.cn A
  • cf nslookup

  • du
    • -h

      : 人類可讀的格式
    • 每天一個linux指令:du指令

  • 見cat

  • 環境變量、自定義變量
    • 範圍不同
    • 環境變量可以在其程序的子程序中繼續有效,而自定義變量則無效。
  • declare:顯示目前 Shell中定義的所有變量,包括使用者的環境變量和自定

    義變量,該指令的輸出按變量名進行排序。

  • env: 顯示目前使用者的環境變量,但不會顯示其自定義變量。
  • export:功能同env 一樣,也是顯示目前使用者的環境變量,隻不過該指令

    的輸出是按變量名進行排序的。export <==> declare -X。經過export的變量就成了環境變量,否則就是自定義變量。

    • export PATH=$PATH:XXXdirs
  • set:功能同declare一樣,顯示目前 Shell中定義的所有變量,包括使用者

    的環境變量和自定義變量。

  • 差別與聯系
    • env 和 export 顯示的是環境變量。
    • set 和 declare 顯示的是環境變量和自定義變量。
  • Linux環境變量指令——env、export、set

  • 見 declare

    • 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天本身)被更改過内容的檔案名
          課上用過的Linux指令
  • exec(ok)
      • 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就停止
        • 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:一次删除一條,還要确認
    • find指令處理之exec與xargs差別

      • -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 是普通檔案相關的緩存頁。
    • 課上用過的Linux指令

    • 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

        • 課上用過的Linux指令
        • GCC 編譯 -std簡述
        • Language Standards Supported by GCC
      • Using the GNU Compiler Collection (GCC)

    • GDB Documentation
    • Debugging with GDB

    • 使用JDB調試Java程式

    • 使用PDB調試Python程式

  • cf openssl

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

    • grep -nir xxx /usr/include

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

  • hostnamectl set-hostname centos7.test
    • 注意修改/etc/hosts⽂件,把新主機名和ip(127.0.0.1)對應好

    • 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

        • 課上用過的Linux指令

  • cf netstat

    • 工具用的好,下班回家早!iTerm2使用技巧指北!

  • join
    • -a n

      : 顯示第n個檔案中沒有共同列導緻的行
    • -1 m

      -2 n

      : 第一個檔案的m列和第二個檔案中的第n列相同,不指定mn 預設1

  • ln: ln from to
    • 預設硬連結
    • ln -s 符呈連結,軟連結
    • 連結方式
      • 硬連結
      • 軟連結(符号連結,快捷方式)

- `-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 和自己可以删除
    • Linux檔案特殊權限——SetUID、SetGID、Sticky BIT

    • u

      : 屬主
    • g

      : 屬組
    • o

      : 其他
    • a

      : 所有
    • +

      : 增權重限
    • -

      : 減少權限
    • =

      : 設定權限

    • mkdir -p a/b/c/d/e :多級目錄, 如果已經存在,忽略
    • mkdir -m 0700 dir :指定目錄屬性mode rwx

  • man(manual)
    • man -k <=> apropose
    • man -f <=> whatis
    • man printf (預設1 <=> man 1 printf)
      • man 3 printf
    • man -a :在所有的man幫助手冊中搜尋;
    • linux下man手冊的安裝和使用
      • openEuler:

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

  • mii-tool

    • linux挂載指令mount及U盤、移動硬碟的挂載
    • NFS+mount挂載

  • cf iostat

    • -i

      :互動式操作,覆寫前先行詢問使用者,如果源檔案與目标檔案或目标目錄中的檔案同名,則詢問使用者是否覆寫目标檔案。使用者輸入”y”,表示将覆寫目标檔案;輸入”n”,表示取消對源檔案的移動。這樣可以避免誤将檔案覆寫。
    • -b

      :當檔案存在時,覆寫前,為其建立一個備份;
    • -f

      :若目标檔案或目錄與現有的檔案或目錄重複,則直接覆寫現有的檔案或目錄;
    • -u

      :當源檔案比目标檔案新或者目标檔案不存在時,才執行移動操作。

  • nc
    • -l

      選項∶ 使用監聽模式,監控傳入的資料。
    • -z

      選項∶ 一旦建立連接配接後馬上斷開,而不發送和接收任何資料。
    • -v

      選項∶ 列印詳細輸出資訊。
    • -n

      選項∶直接使用 IP位址,而不使用域名伺服器來查詢其域名。
    • -w

      選項∶設定連接配接的逾時時間,機關為秒。
    • -u

      選項∶使用 UDP建立連接配接。預設使用TCP建立連接配接。
    • 聊天伺服器
      • 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 -

  • net-tools包
    • arp∶ 管理系統的 ARP 資訊。
    • hostname∶ 管理系統主機名
    • ifconfig∶ 配置網絡接口。
    • netstat∶ 展示網絡連接配接、路由表、接口統計等資訊。
    • route∶ 管理 IP 路由。
    • ipmaddr∶ 管理多點傳播位址。
    • iptunnel∶ 管理和配置隧道。
    • mi-tool∶ 管理網絡接口狀态。
    • nameif∶設定基于MAC位址的網絡接口名稱。
    • plipconfig∶ 管理 PLIP協定裝置參數。
    • slattach∶指定網絡接口關聯到特定的串行線路。
  • netstat 五大功能
    • 顯示網絡連接配接資訊
    • 顯示路由資訊
    • 顯示接口統計資訊
    • 顯示無效連接配接資訊
    • 顯示多點傳播成員資訊
      課上用過的Linux指令
    • netstat -ano 檢視機器端口占用情況
      • Windows
        • netstat -ano|findstr 端口号 :顯示占用端口的pid
        • tasklist|findstr "pid" :根據上面pid 獲得程序名
    • netstat -alepn :常用
    • netstat Socket -x -alepn
    • Linux下netstat指令詳解
    • netstat 的10個基本用法

    • -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
    • ifconfig -> ip addr show: 顯示網絡接口(網卡)資訊
    • 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∶ 鄰居存在,而且是可達的。
        課上用過的Linux指令
課上用過的Linux指令

  • iproute2子產品
    • sudo apt install iproute iproute-doc
    • brew install iproute2mac
    • 課上用過的Linux指令
    • iproute2 工具
      • ip∶管理路由、裝置、政策和隧道等。
      • ss∶ 展示系統套接字相關資訊。
      • tc∶ 管理流量控制政策。
      • nstat∶ 用于網絡統計。
      • bridge∶ 管理橋接位址和裝置。
      • ifcefg∶ 進行IP管理,以替代ifconfig指令。
      • Instat∶ 展示網絡狀态
    • 隧道技術:(Linux Kernel2.2後)隧道技術是一種"網絡協定的資料包被封裝在另一種網絡協定的資料包之中,以進行資料網絡傳輸"的技術,這種技術其實也是 VPN的技術基礎和前提。
      • GRE隧道技術,則是隧道技術中應用最為普遍和廣泛的一個,它的全稱為通用路由封裝(Generic Routing Encapsulation),是由 Net-Smiths 和 Cisco 來主導設計的。它工作在網絡層,目前已被絕大多數電信裝置廠商所支援。
        課上用過的Linux指令
    • ss -s: 目前伺服器的網絡連接配接統計
    • ss -l: 所有打開的網絡端口
      • ss -pl 會列出程序名
    • ss -a : 所有連接配接
      • ss -ta: 所有TCP連接配接
      • ss -ua: 所用UDP連接配接
      • ss -wa: 所有RAW連接配接
      • ss -xa: 所有Unix Sockets

  • 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

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

      : 顯示調試資訊
      • objdump指令

    • openssl version <==> openssl OpenSSl > version
    • 指令行傳入資料
      • echo "xxx" | openssl cmd :文本
      • echo xxx | openssl cmd :文本,可以沒有雙引号
      • echo -n -e "\xaa\xbb" | openssl cmd:二進制(16進制)
    • 通用選項
      • openssl cmd - in infile
      • openssl cmd -out outfile
課上用過的Linux指令
  • openssl help
課上用過的Linux指令
  • prime
    • openssl prime n <==> openssl prime -check n
  • rand n: 産生n位元組随機數,預設二進制(16進制),

    | od -tx1

    可以看到字元串
    • -hex

      : 16進制字元串,等價于
    • -base64

      : base64字元串
    • -out outfile

      寫到outfile中,等價于 >outfile
    • -rand seedfile

      指定seedfile,預設從CA主配置字段的randfile選項中指定,如果沒有,采用從螢幕狀态擷取随機數種子的方法,多個檔案Linux中用“:”分開,Windows中用“;”分開
  • dgst
    • openssl sm3 <==> openssl dgst -sm3
    • echo 12345 | openssl sm3 <==> echo "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: 與上一條等價
      • -K

        : 字元串=>位元組數組作為密鑰
        • echo 1234 | openssl sm4-cbc -K "2851fa25211a48023794ae9515909603" -iv "da80e405a4998c351b0717093cbe86ab" | od -tx1
        • echo 1234 | openssl sm4-cbc -K "2851FA25211A48023794AE9515909603" -iv "DA80E405A4998C351B0717093CBE86AB" | od -tx1 :與上一條等價
  • 非對稱算法
    • openssl ecparam -list_curves
    • RSA
      • 指令
        • genrsa:生成并輸入一個RSA私鑰
        • rsa:處理RSA密鑰的格式轉換等問題
        • rsautl:使用RSA密鑰進行加密、解密、簽名和驗證等運算
      • 産生公私鑰對
        • openssl genrsa -out rockp.pem 1024
        • openssl genrsa -out rockp.pem -aes128 -passout pass:123456 1024
      • 導出公鑰,私鑰
        • openssl rsa -in rockp.pem -pubout -out rocpub.pem
        • openssl pkcs8 -topk8 -in rockp.pem -out rocpri.pem
        • openssl pkcs8 -topk8 -in rockp.pem -passin pass:123456 -out rocpri.pem
      • 加解密(公鑰加密,私鑰解密)
        • openssl rsautl -encrypt -in hello.txt -inkey rocpub.pem -pubin -out hello.en
        • openssl rsautl -decrypt -in hello.en -inkey rockp.pem -out hello.de
      • 簽名驗簽
        • openssl rsautl -sign -in hello.txt -inkey rockp.pem -out hello.s
        • openssl rsautl -verify -in hello.s -inkey rockp.pem -passin -out hello.v
        • diff hello.v hello.txt
    • SM2
        • ecparam:橢圓曲線密鑰參數生成及操作
          • openssl ecparam -list_curves

            | grep SM2 是否支援SM2
        • ec:
      • 建立EC參數和原始私鑰檔案:
        • openssl ecparam -out rocsm2kp.pem -name SM2 -param_enc explicit -genkey
          • 檢視EC私鑰資訊:
            • openssl ecparam -in rocsm2kp.pem -text
          • 驗證參數:
            • openssl ecparam -in rocsm2kp.pem -check
          • 檢視公私鑰
            • openssl ec -in rocsm2kp.pem -text -noout
      • 導出公私鑰
        • openssl pkcs8 -topk8 -inform PEM -in rocsm2kp.pem -outform pem -nocrypt -out rocsm2pri.pem
        • openssl ec -in rocsm2kp.pem -pubout -out rocsm2pub.pem
      • 加密解密
      • 簽名驗簽:sm3不支援
        • openssl dgst -sha512 -sign rocsm2kp.pem -out hellosm2.sig hello.txt
        • openssl dgst -sha512 -verify rocsm2pub.pem -signature hellosm2.sig hello.txt
    • - 利用openssl生成SM2公私鑰對

      - openssl 自制國密證書

      - openssl 指令

      - openssl 指令2

      - 使用openssl的EVP接口使用sm2算法加解密等操作 - 如何用 openssl 生成RSA雙密匙;簽名證書;加密檔案郵件

      - 利用openssl進行RSA加密解密

      - openssl 非對稱加密算法RSA指令詳解

      - 通過openssl生成sm2的公私鑰的方法

      - 在openssl中對SM2的公私鑰進行加解密的驗證

      - 基于OpenSSL 1.1.1版實作的SM2簽名與驗簽C程式

      - ECC

  • 證書與CA
  • 源碼
    • 資料結構
      • Hash
      • 文本資料庫
    • openssl doc
    • openssl windows

  • engine
    • skf
    • sdf
    • gmssl官網
    • gmssl實驗室
    • gmssl引擎

    • -d D

      列用D分隔開,預設tab
    • -s

      串行面不是并行,就是以每個檔案自身為一個處理單元,将此檔案中的所有行以-d選項設定的間隔符拼接成一大行,并輸出到标準輸出中。

    • -c N

      : ping N 次
    • -q

      :不顯示指令執行過程,隻顯示彙總
    • -s N

      :設定資料包的大小為N
    • -t N

      :設定TTL的大小為N
    • -i N

      :指定收發資訊的間隔時間為Ns, 預設1s,N可以設定成小數
    • -f

      :盡快發包,相當-i指定一個極小的數,極限檢測,flood ping
    • -I

      :指定網絡接口,網卡
    • -v

      :詳細顯示指令的執行過程。

  • Linux-gprolog如何編譯運作程式
  • gprolog

  • read:輸入
    • 預設變量REPLY,可以多個變量
    • -p

      : 提示字元串
    • -nN

      :讀n個字元指派到變量中
    • -a arr

      :輸入到數組arr中
    • -d X

      :結束字元
    • -tn

      :等待時間ns
    • -s

      :密碼輸入
    • -r

      :取消轉義字元

    • -d

      :直接把欲删除的目錄的硬連接配接資料删除成0,删除該目錄;
    • -f

      :強制删除檔案或目錄;
    • -i

      :删除已有檔案或目錄之前先詢問使用者;
    • -r或-R

      :遞歸處理,将指定目錄下的所有檔案與子目錄一并處理;
    • rm -rf dir: 強制删除目錄及子目錄(危險)

    • -p或--parents

      :删除指定目錄後,若該目錄的上層目錄已變成空目錄,則将其一并删除;

  • 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 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 權限,才有資格要求屬主一緻、屬組一緻)
    • rsync 用法教程
      • rsync -av --delete source/ destination

  • 系統安裝了哪些shell
    • cat /etc/shells:
    • chsh -l
  • echo $SHELL: 目前shell
  • chsh -s /bin/zsh: 更換shell
    • 更改/etc/password 中自己使用者名中那一行的shell
  • zsh
    • 集大成者

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

    • 用Shell判斷字元串包含關系的方法小結

    • sleep n: 預設秒
      • s 為秒,m 為 分鐘,h 為小時,d 為日數
      • sleep 1m 40s
      • sleep 7d 2h 5m 4s
      • sleep 0.001
      • time sleep: sleep不消耗CPU時間

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

    • -b<位元組>∶ 指定按多少位元組進行拆分,也可以指定K、M、G、T等機關。-
    • <行數> 或 -1<行數>∶ 指定每多少行要拆分成一個檔案。
    • 輸出檔案名字首∶設定拆分後的檔案的名稱字首,split 會自動在字首後加上編号,預設從 aa 開始。
    • -a<字尾長度>∶ 預設的字尾長度是 2,也就是按 aa、ab、ac 這樣的格式依次編号。
    • -d:使用數字作為字尾
    • cat f1 f2 > f: cat合并
    • copy /b f1 + f2 f :Windows 下用copy 合并
    • md5sum

  • 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" (要使用引号指定端口)
    • SSH 入門教程
    • SSH 教程
    • SSH 證書登入教程

    • -f

      :顯示檔案系統狀态而非檔案狀态

  • strace

  • /etc/sudoers(visudo 指令編輯)
    • username ALL(ALL) ALL

  • ⽹絡服務管理程式分為兩種
    • SysV: service
    • systemd: systemctl
    • ifcfg-eth0
    • /etc/hosts

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

  • service network start|stop|restart
    • chkconfig -list network: 關閉service

  • 打包壓縮
    • 打包:tar
    • 壓縮:bzip2,gzip,zip

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

  • 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
    • tcpdump -i eth0 -nn -X 'port 53' -c 1

    • Linux中Tee指令使用執行個體

  • sudo apt install time :不用bash中的time,用/usr/bin/time
    • time -v
      • 時間
      • 記憶體
      • I/O
      • 課上用過的Linux指令
    • real = user + sys(大概,一般大于,多核會小于)
    • time ls
      • real∶ 從程序 Is 開始執行到完成所耗費的 CPU 總時間。該時間包括 ls程序執行時實際使用的 CPU 時間,ls 程序耗費在阻塞上的時間(如等待完成 I/O操作)和其他程序所耗費的時間(Linux 是多程序系統,ls 在執行過程中,可能會有别的程序搶占 CPU)。
      • user∶ 程序 ls執行使用者态代碼所耗費的 CPU 時間。該時間僅指 ls 程序執行時實際使用的 CPU 時間,而不包括其他程序所使用的時間和本程序阻塞的時間。
      • sys; 程序 ls 在核心态運作所耗費的 CPU 時間,即執行核心系統調用所耗費的 CPU 時間。

  • 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:顯示窗格編号。
      • tmux new -s xxx: 啟動
    • Tmux 使用教程

  • top
    • 用途
      • 1.找到是哪些程序在大量消耗 CPU資源。
      • 2.看看哪些程序消耗了記憶體空間。
      • 3.看看哪些程序占用的 CPU 時間最多。
    • 互動指令
      • 配置檔案:~/.toprc (top -f, W儲存)
      • f

      • o

    • 輸出
      • 課上用過的Linux指令

    • 字元集必須用引号
    • 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
  • traceroute指令
    • -m: 跳數
    • -n:顯示IP位址,不查主機名
    • -p 6888:探測包使用的基本UDP端口設定6888
    • -q 4:把探測包的個數設定為值4
    • -r:繞過正常的路由表,直接發送到網絡相連的主機
    • -w 3:把對外發探測包的等待響應時間設定為3秒

    • tshark詳解

  • uname:uname指令用于列印目前系統相關資訊(核心版本号、硬體架構、主機名稱和作業系統類型等)
    • -a

      : 所有資訊

    • 兩大功能∶
      • 檢視機器的開機時長
      • 檢視 CPU 負載情況
    • 系統平均負載,是指在特定時間間隔内運作隊列中的平均程序數。
      • cat /proc/loadavg 檢視平均負載

  • /root root 使用者的家目錄
  • /home/USERNAME 普通使用者預設家目錄位置
  • /etc/passwd 使用者配置檔案
  • /etc/shadow 使用者密碼相關配置檔案
  • /etc/group 使用者組配置檔案

  • useradd

  • id

  • userdel
    • -r

  • passwd

  • usermod

  • chage

  • groupdel

    • su - USERNAME: 使用 login shell 方式切換使用者

    • visudo 設定需要使用 sudo 的使用者(組)
    • /etc/sudoers中設定了可執行sudo指令的使用者

    • 多模式
      • 正常模式 (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,不區分大小寫
    • 極客時間.Linux實戰技能100講-16-19
    • 極客時間.Vim 實用技巧必知必會
    • vim 101 hacks
    • Seven habits of effective text editing(CN)

  • 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寫入,那麼就去加大記憶體吧。
課上用過的Linux指令

  • watch:周期性的方式執行給定的指令,指令輸出以全屏方式顯示
    • -n N

      : 間隔Ns
    • -d

      : 高亮顯示改變之處
    • -t

      : 不顯示标題

    • -c或--bytes或--chars

      :隻顯示Bytes數;
    • -l或--lines

      :隻顯示列數
    • -w或--words

      :隻顯示字數
    • -m

      : 字元
    • -L

      : 最長行的長度

    • -O

      :指定檔案名儲存
    • -o,--output-file=logfile

      ,wget運作過程中輸出到标準輸出的内容都會被寫到所設定的logfile 檔案中。
    • -b

      : 背景下載下傳,大檔案用
    • -c

      : 斷點續傳
    • -i filelist.txt

      :批量下載下傳
    • -r

      :遞歸下載下傳方式,可用來下載下傳目錄
      • -nH, --no-host-directories

        。wget -r指令下載下傳目錄時,預設會建立以域名命名的檔案夾。而使用-nH 選項後就可以避免這種預設行為。
      • -cut-dirs=number

        :下載下傳資料時,在本地建立目錄時,忽略前面多少層的目錄結構。
      • 課上用過的Linux指令
    • -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 對目錄的限制作用。
    • 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 am i

  • 見find

  • download

  • 參考apt

  • 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出現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加強

  • ubuntu下PostgreSQL安裝配置

  • CentOS 8 安裝MySQL 8.0
#! /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


# 

           

  • 360壓縮
  • Alfred
    • 教程
      • 神兵利器——Alfred
  • AppCleaner
  • App Store
    • QQ
    • 微信
    • 有道雲筆記
    • ForkLift:Powerful file manager: FTP, SFTP, WebDAV, S3, and more.
  • FreeDownloadManager
  • HomeBrew
    • mac下高效安裝 homebrew 及完美避坑姿勢
    • Homebrew / Linuxbrew 清華鏡像使用幫助
  • iTerm2: iTerm2 is a replacement for Terminal and the successor to iTerm.
  • 綠聯擴充塢
    • 綠聯Type-C千兆網卡AX88179晶片驅動driver
    • 綠聯Type-C轉hdmi/vga擴充塢使用教程丨CM179
  • MemoryFree:
  • Microsoft Edge
  • omniDiskSweeper
  • PopClip
    • 沒那麼簡單:PopClip for Mac
    • 讓剪切闆在 OS X 上飛起來:PopClip 插件編寫教程
  • Programming
    • Anaconda
    • Go
    • Intellj IDEA
    • JDK
      • jdk 解除安裝
      sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin 
       sudo rm -fr /Library/PreferencesPanes/JavaControlPanel.prefpane
       jdkver=`ls /Library/Java/JavaVirtualMachines/`
       sudo rm -rf /Library/Java/JavaVirtualMachines/${jdkver}
                 
    • Python
    • VSCode
    • Mysql
  • 搜狗五筆
  • Typinator:快速輸入的工具. 設定快速輸入的文字替換.
  • Virtual Box
    • virtualbox mac 安裝器遇到一個錯誤,導緻安裝失敗
    • Uubntu
    • Kali

  • dnf(ukui)
  • yum(server)

  • rocedu openEuler blogs
  • 20年開源老司機手把手教你玩開源——openEuler入門指南

  • 别出心裁的Linux指令學習法
  • Linux 指令行大全
  • Linux就該這麼學指令彙總
  • Linux中profile、bashrc、/.bash_profile、/.bashrc、~/.bash_profile之間的差別和聯系以及執行順序
  • the geek stuff
  • 極客時間.Linux 實戰技能 100 講
  • Books
    • Linux大棚指令百篇上(檔案和文本篇)
    • Linux大棚指令百篇(下)-網絡和系統篇
    • Linux 101 Hacks

歡迎關注“rocedu”微信公衆号(手機上長按二維碼)

做中教,做中學,實踐中共同進步!

課上用過的Linux指令
  • 原文位址:https://www.cnblogs.com/rocedu/p/14891816.html
  • 推薦網站:部落格園、新浪微網誌、扇貝背單詞、DKY背單詞小組、有道雲筆記、豆瓣讀書
  • 版權聲明:自由轉載-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0

如果你覺得本文對你有幫助,請點一下左下角的“好文要頂”和“收藏該文”

繼續閱讀