2026年7月14日 星期二

nmap 使用筆記

https://nmap.org/

公司實驗室的機器 IP有時候飄來飄去,這時候就可以靠 nmap來找到需要的機器。


掃描指定機器的常用埠

nmap 192.168.1.10
Starting Nmap 7.95 ( https://nmap.org ) at 2026-07-14 17:52 CST Nmap scan report for renegade-ThinkPad-L13 (192.168.1.10) Host is up (0.000069s latency). Not shown: 998 closed tcp ports (conn-refused) PORT STATE SERVICE 22/tcp open ssh 3389/tcp open ms-wbt-server Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds


掃描子網路 (192.168.1.0 to 192.168.1.255)

nmap 192.168.1.0/24


掃描指定的埠

nmap -p 22 192.168.1.10
Starting Nmap 7.95 ( https://nmap.org ) at 2026-07-14 17:53 CST Nmap scan report for renegade-ThinkPad-L13 (192.168.1.10) Host is up (0.000052s latency). PORT STATE SERVICE 22/tcp open ssh Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds


偵測每個埠上運行的服務

nmap -sV 192.168.1.10
Nmap scan report for renegade-ThinkPad-L13 (192.168.1.10) Host is up (0.000069s latency). Not shown: 998 closed tcp ports (conn-refused) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 10.0p2 Ubuntu 5ubuntu5.4 (Ubuntu Linux; protocol 2.0) 3389/tcp open ms-wbt-server Microsoft Terminal Service Service Info: OSs: Linux, Windows; CPE: cpe:/o:linux:linux_kernel, cpe:/o:microsoft:windows Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 11.24 seconds


掃描子網路下所有 port 22的狀態為 open的機器

nmap -p 22 -T4 --open -oG - 192.168.1.10
# Nmap 7.95 scan initiated Tue Jul 14 18:16:59 2026 as: nmap -p 22 -T4 -oG - 192.168.1.0/24 Host: 172.31.97.112 (renegade-ThinkPad-L13) Status: Up Host: 172.31.97.112 (renegade-ThinkPad-L13) Ports: 22/open/tcp//ssh/// # Nmap done at Tue Jul 14 18:16:59 2026 -- 1 IP address (1 host up) scanned in 0.03 seconds
  • -T4 加速掃描速度
  • --open 只列出狀態為 open的 port
  • --oG - 輸出grepable的格式到console

2026年7月13日 星期一

Coreutils for Windows

官方網址:
https://learn.microsoft.com/en-us/windows/core-utils/overview
https://github.com/microsoft/coreutils

Coreutils可以在原生Windows上跑 UNIX風格命令列工具,由 Microsoft自己維護。

安裝:

winget install Microsoft.Coreutils

能用的命令可以參考:
https://learn.microsoft.com/en-us/windows/core-utils/commands

2026年3月9日 星期一

[Linux] Linux common utility

記錄一些常用的 Linux指令或工具


echo

將字串或變數輸出到終端機的指令

echo "Hello World!"

輸出字串

echo $HOME

輸出變數


cat

concatenate,主要功能為將檔案內容輸出到終端機或另一個檔案

cat command options
-n, --number輸出行數。


cat a.txt

輸出 a.txt的檔案內容


cat a.txt b.txt

將 a.txt和 b.txt的檔案內容串接輸出到終端機


cat a.txt b.txt > ab.txt

將 a.txt和 b.txt的檔案內容串接寫到新檔案 ab.txt中


cat b.txt >> a.txt

將 b.txt的檔案內容串接寫到 a.txt後


pwd

print working directory,輸出當前終端機的目錄

pwd


ls

list,用來輸出目錄的內容或資訊

ls command options
-lLong format。顯示詳細資訊。
-aAll file。顯示隱藏檔案。
-hHuman-readable。將檔案容量大小顯示為人類可讀格式。
-tSort by time。以修改時間來將檔案排序,由新到舊。
-RRecursive。列出所有包含子目錄中的檔案。


ls -l
-rw-rw-r-- 1 goyour123 goyour123 182 Feb 28 00:08 a.txt
  • -rw-rw-r-- 檔案類型與權限,一共有10個字元。
    • 第一個字元代表檔案類型
      • [-] 檔案
      • [d] 目錄
      • [l] 連結檔(symbolic link)
      • [b] 塊設備(block device)
      • [c] 字符設備(charater device)
    • 剩下九個字元以三個為一組,分別代表檔案擁有者(Owner)、群組(Group)及其他使用者(Others)的權限
      • [r] 代表可讀(read)
      • [w] 代表可寫(write)
      • [x] 代表可執行(execute)
  • 1 代表檔案的硬連結(hard link)數量
  • goyour123 檔案的擁有者
  • goyour123 檔案的群組
  • 182 檔案的容量大小(bytes)
  • Feb 28 00:08 檔案最近修改日期
  • a.txt 檔案名稱

cd

change directory,切換目錄

cd
cd ~

切換到家目錄


cd /

切換到根目錄


cd ..

切換到上一層目錄


cd -

切換到上一次所在的目錄


cd /path/to/dir

使用絕對路徑切換目錄


cd dir

切換到當前目錄下的子目錄



mkdir

make directory,建立目錄

mkdir dir

在當前目錄下建立目錄


mkdir -p /path/to/dir

建立多個層級的目錄


mkdir -m 777 dir

建立目錄並設定權限


mkdir dir1 dir2 dir3

建立多個目錄



mv

move,用來重新命名或移動檔案和目錄

mv command options
-iinteractive。檔案覆蓋前跳出提示。
-fforce。強制覆蓋已存在的檔案。
-nno-clobber。不覆蓋已存在的檔案。
-uupdate。當來源檔案較新或是目的檔案不存在才移動。
-vverbose。顯示命令執行詳細過程。


mv a.txt /path/to/dir
mv a.txt b.txt c.txt /path/to/dir

移動檔案


mv a.txt b.txt

重新命名檔案



cp

copy,複製檔案和目錄

cp command options
-rrecursive。遞迴地複製檔案,用來複製目錄。
-iinteractive。檔案覆蓋前跳出提示。
-ppreserve。保留檔案的權限及時間戳。
-uupdate。當來源檔案較新或是目的檔案不存在才複製。
-apreserve all。遞迴地複製檔案,並且保留檔案權限及時間戳。
-vverbose。顯示命令執行詳細過程。


cp a.txt b.txt

複製檔案


cp a.txt /path/to/dir

複製檔案到目錄



man

manual,用來查看命令、系統呼叫、函式庫或設定檔的使用方法。

man 操作方法
/搜尋關鍵字
q離開


man ls

查詢 ls的使用方法



rm

remove,用來刪除檔案或目錄。

cp command options
-fforce。強制刪除。
-rrecursive。遞迴地刪除目錄及其中的檔案。
-iinteractive。刪除檔案前跳出提示。
-vverbose。顯示命令執行詳細過程。


rm a.txt

刪除檔案


rm -rf /path/to/dir

強制刪除目錄及其中檔案



touch

用來建立空檔案或是更新檔案的時間戳。


touch a.txt
touch a.txt b.txt c.txt

建立空檔案,如果檔案存在則更新時間戳為現在。


touch -t 202604201000 a.txt

指定更新時間,格式為 [[CC]YY]MMDDhhmm[.ss]。


touch -r reference.txt target.txt

參考其他檔案的時間來更新。


touch -a a.txt

只更新 atime(access time)。


touch -m a.txt

只更新 mtime(modify time)。



chmod

change mode。用來變更檔案或目錄的存取權限。

  • 使用者分類
    • u (user/owner)
    • g (group)
    • o (others)
    • a (all)
  • 權限分類
    • r, 4 (read)
    • w, 2 (write)
    • x, 1 (execute)

chmod 777 a.txt

給予所有人讀寫及執行權限。


chmod 755 a.txt

給予檔案擁有者所有權限,其他人讀取及執行權限。


chmod 644 a.txt

給予檔案擁有者讀寫權限,其他人只有讀取權限。


chmod +x a.txt

給予所有人執行權限。


chmod u+x a.txt

給予擁有者寫入權限。


chmod g-x,o-w a.txt

取消群組及其他人的寫入權限。


chmod a=r a.txt

所有人設定為只能讀取權限。


tar

tape archive。打包及檔案壓縮工具。

tar command options
-f指定要處理的檔名
-v列出每一步處理涉及的檔案資訊
-x解開 tar檔案
-z呼叫 gzip壓縮或解壓縮檔案。
-c建立壓縮檔案。


tar -xvf a.tar

解開tar檔案


tar -zxvf b.tar.gz

解開tar.gz檔案


2025年11月7日 星期五

lf - terminal file manager 使用筆記

官方網址:
https://github.com/gokcehan/lf

lf 命令


最重要的命令
q離開 lf

移動
j or [↓]檔案列表中往下移動
k or [↑]檔案列表中往上移動
[Ctrl] + d檔案列表中往下移動半頁
[Ctrl] + u檔案列表中往上移動半頁
[Ctrl] + b or [PgDn]檔案列表中往下移動一頁
[Ctrl] + f or [PgUp]檔案列表中往上移動一頁
h or [←]移動到上一層目錄
l or [→]移動到下一層目錄,或者開啟檔案
gg or [Home]移動到最上面的檔案
G or [End]移動到最下面的檔案

檔案操作
gg or [Home]移動到最上面的檔案
G or [End]移動到最下面的檔案
[Space]選取目前的檔案
v取消選取目前的檔案
u取消所有選取的檔案
y複製目前或者選取的檔案
d剪下目前或者選取的檔案
p貼上複製或剪下的檔案到當前的目錄
c取消貼上複製或剪下的檔案

命令列
:輸入預設或自定義的命令
$在 shell下執行命令
%在 shell下執行命令,並將ui pipe到input,output pipe到ui
!在 shell下執行命令,並等待按鍵輸入
&在背景執行命令

搜尋
/搜尋符合pattern的輸入
?反向搜尋符合pattern的輸入
n下一個符合pattern的結果
N上一個符合pattern的結果

設定
z更改某些選項的設定
s更改 sortby及 info的設定

開啟
e開啟檔案編輯器
i開啟 pager
w開啟 shell


lf 設定檔

Linux

  ~/.config/lf/lfrc

Windows

  C:\Users\%username%\AppData\Roaming\lf\lfrc


環境變數

可以透過修改環境變數來更改 lf的預設指令

環境變數
OPENERWindows: start
Linux: xdg-open
EDITORWindows: notepad
Linux: vi
PAGERWindows: more
Linux: less
SHELLWindows: cmd
Linux: sh

參考連結:
https://github.com/gokcehan/lf/wiki/Tutorial

2024年10月28日 星期一

rappel - Assembly REPL

官方網址:
https://github.com/yrp604/rappel

rappel提供了一個 assembly的交互式介面環境,可以在執行完指令後馬上看到暫存器狀態的變化,用來嘗試一些指令非常好用。

編譯完後可從./bin/rappel執行,Ctrl + d 退出程序:

./bin/rappel
rax=0000000000000000 rbx=0000000000000000 rcx=0000000000000000
rdx=0000000000000000 rsi=0000000000000000 rdi=0000000000000000
rip=0000000000400001 rsp=00007ffd6bf14b30 rbp=0000000000000000
 r8=0000000000000000  r9=0000000000000000 r10=0000000000000000
r11=0000000000000000 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
[cf=0, zf=0, of=0, sf=0, pf=0, af=0, df=0]
cs=0033  ss=002b  ds=0000  es=0000  fs=0000  gs=0000            efl=00000202

mov rax, 0x10
rax=0000000000000010 rbx=0000000000000000 rcx=0000000000000000
rdx=0000000000000000 rsi=0000000000000000 rdi=0000000000000000
rip=0000000000400006 rsp=00007ffd6bf14b30 rbp=0000000000000000
 r8=0000000000000000  r9=0000000000000000 r10=0000000000000000
r11=0000000000000000 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
[cf=0, zf=0, of=0, sf=0, pf=0, af=0, df=0]
cs=0033  ss=002b  ds=0000  es=0000  fs=0000  gs=0000            efl=00000202

2024年10月11日 星期五

[Linux] GDB 使用筆記


.gdbinit

可以透過將 .gdbinit檔案放到 home目錄下對 GDB做初始化設定。


  set disassemble-next-line on


GDB 指令

設置斷點

(gdb) b
(gdb) break [function name]

執行程式

(gdb) r
(gdb) run [args]

離開 gdb

(gdb) q
(gdb) quit

顯示下一個所要執行的組合語言指令

(gdb) set disassemble-next-line on

確認當前 set disassemble-next-line的設定狀態

(gdb) show disassemble-next-line

顯示暫存器的值

(gdb) i r
(gdb) info registers
(gdb) info registers [registers]

將 rax暫存器的值設為 0x1234

(gdb) set $rax = 0x1234

印出 0x402000地址的值

(gdb) p/x *(0x402000)

2024年9月24日 星期二

[Linux] grep 命令使用筆記

grep是 Linux下用來在檔案中尋找文字的工具。

語法


grep [options] [pattern] [files]

常用 Option


grep command options
Matching Control
-e PATTERNS指定搜尋的 pattern,可以宣告多次。
-i, --ignore-case忽略大小寫。
-v, --invert-match印出不符合的結果。
-wwhole word only。
General Output Control
-c, --count只印出符合結果的行數。
-l只印出符合結果的檔案名稱。
-o只印出符合的部分。
Output Line Prefix Control
-h, --no-filename只顯示符合的結果,不顯示檔案名稱。
-n, --line-number在符合的結果前面加上行號。
Context Line Control
-A NUM印出符合的結果後面 NUM行。
-B NUM印出符合的結果前面 NUM行。
-C NUM印出符合的結果前面及後面 NUM行。
File and Directory Selection
-r, --recursive尋找指定目錄下所有檔案的符合結果。

使用方法


grep "abcd" file.txt
grep -e "abcd" file.txt

在 file.txt中尋找有 abcd字串的行。


grep -e "abcd" -e "efgh" file.txt

在 file.txt中尋找有 abcd字串及有 efgh的行。


grep -e "abcd" -e "efgh" file.txt file2.txt

在 file.txt和 file2.txt中尋找有 abcd字串及有 efgh的行。


grep -r "abcd" .

在當前目錄下的所有檔案中尋找有 abcd字串的行。


grep -r -l "abcd" .

只列出當前目錄下的所有檔案中有 abcd字串的檔案名稱。


2024年8月20日 星期二

[Linux] find 命令使用筆記

find是 Linux下用來尋找檔案及目錄的命令。

語法


find [path] [options] [expression]

常用 Option


find command options
-name [pattern]搜尋符合 pattern的檔案。
-iname [pattern]搜尋符合 pattern的檔案。(case insensitive)
-type [type]搜尋特定類型的檔案。-type f為只搜尋檔案,-type d為只搜尋目錄。
-maxdepth [levels]限制最大的搜尋的目錄層數。
-mindepth [levels]限制最小的搜尋的目錄層數。
-exec [command] {} \;對於每個找到的檔案執行 [command],帶入 {}為找到的檔案。
-delete移除所找到的檔案。

使用方法


find . -name "file.txt"

在當前目錄尋找名為 file.txt的檔案。


find . -iname "file.txt"

忽略大小寫,在當前目錄尋找名為 file.txt的檔案。(case insensitive)


find . -name "*.txt"

在當前目錄尋找名稱結尾為 .txt的檔案


find . -name "*file*" -type -d

在當前目錄尋找名稱帶有 file的目錄


find . -name "*file*" -type -f

在當前目錄尋找名稱帶有 file的檔案


find . -iname "*file*" -exec rm -i {} \;

移除所有帶有 file名稱的檔案


應用


find . -iname "*file*" | grep -c ".*"

計算用 find所找到檔案的數量


find . -iname "*file*" | sort

排序用 find所找到的檔案


find . -iname "*file*" | xargs md5sum

取得找到檔案的 md5值


2024年7月1日 星期一

[Linux] tmux 使用筆記

tmux是個 Linux下的終端機管理程式,可以在同一個終端 (terminal)下同時操作多個程式, 對於透過 SSH連線來使用機器來說非常方便。


tmux指令

開啟新的 tmux session

tmux

開啟名為 <session_name>新的 session

tmux new -s <session_name>

列出當前的所有的 tmux session

tmux ls

attach到 <session_name>的 tmux session

tmux a -t <session_name>

detach當前的 tmux session

tmux detach

關閉session

tmux kill-session -t <session_name>

tmux快捷鍵


tmux快捷鍵
[Ctrl]+b ddetach當前的 tmux session
[Ctrl]+b "垂直分割兩個 pane
[Ctrl]+b %水平分割兩個 pane
[Ctrl]+b [←/↓/↑/→]切換 pane
[Ctrl]+b x關閉當前的 pane
[Ctrl]+b c建立新的 window
[Ctrl]+b n移動到下個 window
[Ctrl]+b p移動到上個 window
[Ctrl]+b <index>移動到第<index>個 window
[Ctrl]+b &關閉當前的 window
[Ctrl]+b w打開操作面板,可以瀏覽所有 tmux session

參考連結:
A beginner's guide to tmux

2024年6月28日 星期五

[Linux] vim 使用筆記

模式 (mode)

一開始認識 vim就要先了解其不同的模式:

  • 普通模式 (Normal Mode)
  • 插入模式 (Insert Mode)
  • 命令列模式 (Command Line Mode)
  • 可視模式 (Visual Mode)

其中最常用是一般模式 (Normal Mode)、插入模式 (Insert Mode)及命令列模式 (Command Line Mode)。一開始進入 vim時的模式為普通模式, 其他模式都要經過普通模式進入,透過 Esc鍵返回。

普通模式 (Normal Mode)


游標移動
h or [←]游標向左移動一個字元
j or [↓]游標向下移動一個字元
k or [↑]游標向上移動一個字元
l or [→]游標向右移動一個字元
可以在指令前加上要執行指令的次數,例如 20l or 20[→],就可以往右移動 20個字元。
[Ctrl] + b or [PgUp]向上移動一頁 (backward)
[Ctrl] + f or [PgDn]向下移動一頁 (forward)
[Ctrl] + u 向上移動半頁 (upward)
[Ctrl] + d 向下移動半頁 (downward)
0 or [Home] 移動到此列的起始位置
$ or [End] 移動到此列最後面非空字元
^ 移動到此列最前面非空字元
+ 移動到下一列最前面的非空字元
- 移動到上一列最前面的非空字元
gg 移動到檔案的第一行
G 移動到檔案的最後一行
{number}G 可以移動到第 {number}行,例如 20G,可以移動到檔案第 20行
H 移動到目前顯示的第一行首字元
M 移動到目前顯示的中間一行首字元
L 移動到目前顯示的最後一行首字元
[Space] 向右移動一個字元
[Enter] 移動到下一行
{number}[Space]可以向右移動 {number}個字元,與[→]不同的是,[Space]會移動到下一行。 {number}[Enter]可以向下移動 {number}行。

搜尋與取代
/{string}向後搜尋 {string}字串
?{string}向前搜尋 {string}字串
n執行上一個搜尋操作
N反向執行上一個搜尋操作
s/{string1}/{string2}/g將此行的 {string1}取代成 {string2}
%s/{string1}/{string2}/g將檔案裡的 {string1}取代成 {string2}
%s/{string1}/{string2}/gc將檔案裡的 {string1}取代成 {string2},取代前需要確認

編輯
x刪除游標後面的字元
X刪除游標前面的字元
dd刪除游標所在的這一行
{number}X及 {number}x可以刪除游標前、後 {number}個字元。 {number}dd可以刪除游標往下 {number}行。
d1G刪除游標到第一行中的內容
dG刪除游標到最後一行的內容
d0刪除游標前的這一行的內容
d$刪除游標後的這一行的內容
yy複製游標所在的這一行 (yank)
{number}yy可以複製游標往下 {number}行。
y1G複製游標到第一行中的內容
yG複製游標到最後一行的內容
y0複製游標前的這一行的內容
y$複製游標後的這一行的內容
p在游標的後一行貼上
P在游標的前一行貼上
J將此行與下一行合成同一行
u回到上一個操作的狀態 (undo)
[Ctrl] + r回到下一個操作的狀態 (redo)
.重複上一個操作

插入模式 (Insert Mode)


進入插入模式
i在游標字元處前插入 (insert)
I從此行第一個非空字元前插入
a在游標字元處後插入 (append)
A從此行最後字元後插入
o插入新的下面一行 (open)
O插入新的上面一行
r進入取代模式,只取代一個字元 (replace)
R進入取代模式,直到離開

命令列模式 (Command Line Mode)


Command Line Mode指令
:w儲存目前檔案變更 (write)
:q離開 vim (quit)
:w!可以強制寫入唯讀檔案。:q!可以強制不儲存離開。
:wq儲存並離開
ZZ若檔案沒有修改,直接離開。若檔案有修改,儲存並離開
ZQ不儲存離開
:w {filename}將檔案另存到 {filename}
:r {filename}將另外一個檔案的內容加到游標位置的下一行
:! {command}暫時離開 vim並執行 {command}
vim 可以同時打開多個檔案進行編輯。ex: vim a.txt b.txt。
:files列出目前 vim所開啟的檔案
:n編輯下一個檔案
:N編輯上一個檔案

可視模式 (Visual Mode)


Visual Mode指令
v將游標經過的字元反白選擇
V將游標經過的行反白選擇
[Ctrl + v]以blcok的方式進行反白選擇
y複製選擇的內容
d刪除選擇的內容
p貼上選擇的內容

參考連結:
鳥哥私房菜 第九章、vim程式編輯器