顯示具有 Article - Linux Shell 標籤的文章。 顯示所有文章
顯示具有 Article - Linux Shell 標籤的文章。 顯示所有文章

2023年5月9日 星期二

Linux Shell Commands: awk, sed 對檔案內容的應用

因為在Linux Mint 看到有一個 driver-manager,離開後到 Ubuntu 20.04.6 想要也安裝一個,結果官方倉儲沒收入!

於是就找類似的,結果找到 kubuntu-driver-manager,我想它也是 ubuntu 的後代,試試或許可以用。

安裝完畢後執行,結果系統說「 可安裝,但無法執行 」,我真的傻眼了,第一次遇到這狀況!於是它末尾又提示可安裝 kubuntu-settings-desktop,我就想這二個軟體除了前面都是 kubuntu 之外,有什麼親戚關係嗎?

二者之間有無關係我不知道,結果我就「慘慘地」給它安裝了下去。結果嘛...,想當然執行時也沒反應,下場也是「慘慘地」啦,哈哈哈〜😁😆😅

安裝時我看畫面提示要安裝了一大堆軟體、套件,大約瞄了一下有500多MB,真多!桌面軟體真不是蓋的。

現在二個軟體都無法執行,想要除錯,我也沒那麼多時間,必須開始收攤了!須把這些沒用垃圾全部清除掉才行,結果嘛...,也仍是「慘慘地」啦,唉〜〜😓😭

把二個主軟體移除時,竟然沒有之前跟著安裝的一大票相依軟體、套件被同時移除,它們不是相依的嗎?我金地、金地、金地傻眼了!!😲🙄😱(重要的話須重覆三遍)

於是,偶就趕快把終端機中,安裝時暫留的的字串複製下來,想要一一手動把各個軟體、套件全刪除掉,但一看到資料太多,我也愣住了〜🤔🤔。於是就有了本篇文章應用 Shell 指令處理檔案內容的結果出現!😇

********************
正文開始
********************
◆ 刪除目標檔案每列開頭前三個字元
語法:sed 's/^...//' /trash/m.txt > /trash/command.txt

樣本列:
124libkf5waylandserver5 amd64 4:5.68.0-0ubuntu1 [245 kB]
125libkf5syntaxhighlighting-data all 5.68.0-0ubuntu1 [52.1 kB]

執行結果:
libkf5waylandserver5 amd64 4:5.68.0-0ubuntu1 [245 kB]
libkf5syntaxhighlighting-data all 5.68.0-0ubuntu1 [52.1 kB]

------
◆ 把目標檔案每列第一個空白處及之後字串,全部刪除(被「 "" 」取代)
語法:awk '{print "" $1}' /trash/n.txt > /trash/command.txt

樣本列:
libkf5waylandserver5 amd64 4:5.68.0-0ubuntu1 [245 kB]
libkf5syntaxhighlighting-data all 5.68.0-0ubuntu1 [52.1 kB]

執行結果:
libkf5waylandserver5
libkf5syntaxhighlighting-data

------
◆ 把目標檔案每列開頭皆插入字串:"sudo apt autoremove "
語法:awk '{print "sudo apt autoremove " $0}' /trash/p.txt > /trash/command.txt

樣本列:
libkf5waylandserver5
libkf5syntaxhighlighting-data

執行結果:
sudo apt autoremove libkf5waylandserver5
sudo apt autoremove libkf5syntaxhighlighting-data

------
當全部資料前端都已插入刪除暨刪除依賴語法之後,再來就是 sh 上場表演的時刻!
執行: sh /trash/command.txt
過程:
  初時反復要按 (Y/n) 的詢問,後面就一律出現xxx沒有安裝,然後直接跳過,不必人參與。最後結果檢查,算是勝利了😁😂,揮汗拭額〜〜😅😜

2023年5月4日 星期四

find 找出檔案、grep 找出檔案內容

◆ 過濾結果集:找出符合 grep 條件的目標。三種語法善惡比較
  X find /data/trash/ -type f -iname "*test*" | grep -i -Hn "flatpak" {} \;
   說明:失敗! 找出檔案內容的語法「 | 」之後禁止直接 grep,要插入一個轉送器(xargs)

  △ find /data/trash/ -type f -iname "*test*" | xargs grep -i -Hn "flatpak" {} \;
   說明:成功,但額外出現二列指令無效的提示!xargs 之後接 grep 指令似乎水土不合!!
   ※ 放棄此用法!!轉用「-exec grep 」語法

  V find /data/trash/ -type f -iname "*test*" -exec grep -i -Hn "flatpak" {} \;
   說明:成功!但結果內容多了「檔名」標示 => /data/trash/trash20.txt:1:/etc/X11/Xsession.d/20flatpak


◆ 過濾結果集:找出符合 grep 條件的目標 (若目標是檔案,則與找檔案內容無關)
  語法:<前段語法> | grep -i <關鍵字>
  說明:grep 針對前段語法所找出的結果集,「再一次」的做篩選

  範例1:sudo apt list --installed | grep -i "fire*"
  釋義1:grep 關鍵字的 *星號要放對位置,若打成 "*fire*" 就找不到資料

  範例2:find /data/trash/ -type f -iname "*t*" | grep -i "45"
  釋義2:find 目標路徑中「含有t」的檔案。grep 再次篩選出這些檔案中具有「 45 」關鍵字者


◆ 過濾結果集:找出符合 grep 條件的目標 (若目標是檔案,則是在找檔案內容)
  語法 :<前段語法> -exec grep -i <關鍵字> {} \;

  範例1 :find /data/trash/ -type f -iname "*t1*" -exec grep -i -Hn "flatpak" {} \;
  範例1 說明 :二個範例皆有 Hn參數,結果必然會顯示為三區「檔名路徑區、同檔數字區、內容符合(條件)區」
  結果 => /data/trash/trash20.txt:3:/etc/X11/Xsession.d/20flatpak
  檔名路徑區(H) :/data/trash/trash20.txt
  同檔數字區(n) :3 (同一檔中,符合 grep 條件的,「至少有3列」
  內容符合區(i) :/etc/X11/Xsession.d/20flatpak

  範例2 :find /data/trash/ -type f -iname "*t1*" -exec grep -i -Hn "flatpak" {} \; > /data/temp/result.txt
  範例2 說明 :此範例尾端多了「轉存」的語法,把結果存入指定路徑檔 result.txt 之中


◆ 過濾結果集:「刪除」符合 grep 條件的檔案與資料夾
  語法 :<前段語法> -exec grep -i <關鍵字> {} \;
  範例 :先變更身份為「root」=> sudo su -
     find /data/trash/ -type f -iname "*t1*" -exec grep -i "flatpak" {} \; | xargs rm -fr
  說明 :grep 須有參數i,絕不可加參數 Hn,結果必須只是「要刪除檔案的路徑名」


2016年11月21日 星期一

常見Linux 指令用途

來源: http://itchen.class.kmu.edu.tw/Crypto/Web/Linux.html

常見Linux 指令用途:
hostname
查本機電腦名稱
uname –a
查本身灌了什麼系統
ifconfig
查網路設定(IP)
ping
測節點封包傳輸
arp
查網卡
netstat(-n)
查目前連線狀態
dig:
DNS 的查詢指令
traceroute
查兩節點所經router
top


nmap
查port
tcpdump
分析封包的流向,連封包的內容也可以進行『監聽』
cd
換目錄(進入資料夾)
ls(-al)
列出檔案
cd..
回上一層
cp 檔名 目的
Copy目的資料夾
cat
看檔案
man
查指令
date
看日期
more
暫停看msg
du
檔案總管
mv
move移動
exit、quit
跳出
passwd
舊換新密碼
last
最近誰登入
pwd
目前目錄
df
看目錄底下檔案
ps
看程式執行狀況
quota
看容量大小
rm
刪檔案
rmdir
刪資料夾
rm –rf
強迫刪檔
mkdir
建目錄
write
丟水球
^D
跳出
chmod
改權限

2010年8月20日 星期五

mount

***************************************************************
umount 卸載設備
***************************************************************
umount <已掛載設備之名稱、資料夾>


***************************************************************
mount 指令常用參數簡介 (還有更多參數)
***************************************************************
語法:mount [parameters] [type] <要掛載設備名稱> [目的資料夾名稱]

參數說明:
 <不必參數>:列出/etc/fstab中已掛載設備
 -a:重新掛上 /etc/fstab 中的設備。也是測試能否正常?若不正常可立刻修正,以免重新開機時死當
 -h:看參數說明,並不掛載任何裝置
 -l:列出目前已經掛載的裝置、檔案系統名稱與掛載點
 -V:列出 mount 的版本資訊
 -t  Type:將後面 「要掛載設備」以 Type 的檔案格式掛載到 「目的資料夾」
  Type 有底下幾個:
     vfat, msdos :這個是支援 Windows 系統的檔案格式,尤其是 vfat 常用
     ext, ext2   :這個就是 Linux 的主要檔案格式
     iso9660   :光碟機的檔案格式
     nfs, ntfs, ufs :Windows 2000 使用 NTFS 格式

 -o:
   rw   :讓 mount 的磁區為可讀寫
   suid   :允許該磁區可以設定檔案為 SUID 的狀態!
   exec   :允許該磁區可以執行 binary 的檔案!
   auto   :允許該磁區可以使用 mount -a 的參數設定!
    nouser :禁止其他人(非 root 之使用者)使用掛載功能!這是預設值!

    async :允許磁區可以進行非同步記錄(記憶體與硬碟不同步!最常用!)
    defaults:同時具有 rw, suid, dev, exec, auto, nouser, async 這些功能的設定值,
        所以預設情況中,使用這個即可。
    nosuid :不許該磁區具有 SUID 的檔案屬性!
   ro   :設定為唯讀屬性!
   remount :讓系統本來掛載的磁區重新被掛載!
   iocharset=big5,codepage=950 :這種額外的功能參數以啟動中文編碼的支援

//範例
//----------
重新(偵測) 掛上fstab中所有設備:
# mount -a

掛上光碟:
[root @test /root]# mount -t iso9660 /dev/cdrom /mnt/cdrom

掛上 windows 檔案系統的軟碟:
[root @test /root]# mount -t vfat /dev/fd0 /mnt/floppy

掛上 Linux 檔案系統的軟碟:
[root @test /root]# mount -t ext2 /dev/fd0 /mnt/floppy

掛上 Linux 檔案格式硬碟:
[root @test /root]# mount -t ext2 /dev/hdc6 /home

讓根目錄重新掛載為可讀:
[root @test /root]# mount -o remount,rw /

//掛載軟碟
//----------

掛上Linux ext2 檔案格式軟碟:
mount -t ext2 /dev/fd0 /mnt/floppy

Windows fat32 格式(fat 12 是 msdos):
mount -t vfat /dev/fd0 /mnt/floppy

將軟碟機卸載:
umount /mnt/floppy

//掛載光碟
//----------
modprobe cdrom modprobe ide-cd
mount -t iso9660 /dev/cdrom /mnt/cdrom
umount /mnt/cdrom

//掛載硬碟
//----------
將硬碟以ext2架構,掛在「/media/game」:
mount -t ext2 /dev/hda2 /media/game


//製造新硬碟
//-------------
fdisk <裝置名稱> :直接以 fdisk 分割硬碟,例:fdisk /dev/hdb
mke2fs <裝置名稱> :以ext2 格式 format,例:mke2fs /dev/hdb
mkdir /disk2 :建立一個目錄名稱為 /disk2 ,預計用來掛載新硬碟



******************************************************************************
swap硬碟分割區之掛卸載,首先它必須是Linux swap(type 82)的類型
******************************************************************************
掛載語法:
swapon <裝置名稱> :掛載「裝置名稱」中的swap,例:swapon /dev/hda2
swapon  -a    :將所有的swap磁區掛載

卸載swap磁區語法:
swapoff <裝置名稱> :卸載 裝置名稱,例:swapoff /dev/hda2
swapoff -a     :將所有的swap磁區卸載。


參考:
http://docs.hgiga.com/Discuz4/viewthread.php?tid=226
http://blog.udn.com/luckyhoo/628680