Ubuntu16.04使用所遇問題記錄


  記錄筆者在使用Ubuntu系統過程中所遇到過的錯誤/問題和解決方案。本機系統為Ubuntu 16.04 LTS,64-bit。

  目前已有的解決方案:

  (1)Ubuntu安裝搜狗輸入法

  (2)Windows+Linux雙系統導致時間顯示不一致

  (3)刪除/etc目錄后恢復和補救

  (4)64位系統對32位程序的支持

  (5)/boot分區飽和和拓展問題

  (6)使用apt-get install 報錯的問題

  (7)通過 sudo apt install git-all 安裝 git 出錯

  (8)Ubuntu下使用tar.gz包為FireFox安裝Flash插件

  (9)Ubuntu設置開機自啟動應用的問題

  (10)Linux環境下安裝和配置qtcreator的問題

  (11)Ubuntu環境下安裝 Capstone 和 ROPgadget

  (12)Ubuntu環境下包管理工具 apt-get 和 dpkg 進行軟件安裝和卸載

  (13)安裝 Ubuntu 18.04 后經常死機——關於安裝顯卡驅動的問題

 

1.輸入法設置--安裝了搜狗拼音的linux版本

  由於嘗試了多種解決方案,可能使得各個步驟混淆在一起,這里只列出自己嘗試過的操作,而不是具體的某一種方法。

  (1)將System Setting->Language Support中的Keyboard input method system選項改為fcitx;

  (2)在Install/Remove Language彈出的對話框中將Chinese語言包選擇,點擊apply。完成中文語言包的安裝;

  (3)在搜狗官網下載sogou for linux的deb安裝包,這里筆者直接通過點擊進行安裝,沒有報錯,也可通過命令sudo dpkg -i 安裝包路徑 進行安裝,典型的路徑是~/Downloads/**.deb;

  (4)在System Setting->Text Entry->Input sources to use中點擊“+”按鈕,找到Sogou Pinyin(Fcitx),進行添加,右側還可以選擇切換的快捷鍵方式;

  (5)選中(4)中添加的輸入法項,點擊界面右下角形如扳手的按鈕,進入到Input Method Configuration,點擊左下角的“+”按鈕,尋找Sogou的輸入方式,若未找到,可以點擊取消下方的Only Show Current Language,選擇Sogou的輸入方式,點擊OK即可,此時應該已經可以根據已設置的切換快捷鍵進行輸入方式的切換。

  若上述方法沒有效果時,可以重復(1)(2)步驟,如現將輸入方式修改為ibus,並將(2)中的Chinese語言包卸載后重裝,之后再改為fcitx,並重啟,即可繼續上述步驟。

 

2.Windows和Ubuntu的雙系統,使用時系統時間不一致問題(參見UbuntuTime)

  主要針對安裝 Windows 和 Ubuntu 雙系統時,在切換不同的系統時,兩者的時間顯示會不一致的問題。

  問題產生的原因在於 Windows 與 linux 默認的設置硬件時鍾(hardware clock)的方式不同。Windows將硬件時間設置為本地時間(localtime)而Ubuntu默認設置為UTC時間。也就是說,當在7:00PM關機時,Windows會將硬件時鍾設置為7:00PM,硬件以這個時間為基准繼續計時,開機時讀取到的也是正確的本地時間。而對於Ubuntu,系統默認會將7:00PM轉化為UTC時間進行存儲,而啟動時再將讀取的硬件時鍾的時間轉化為本地時間。這樣就會造成Ubuntu關機之后,Windows開機時時間會出現問題的情況。

  解決方法:

  1.禁用UTC而使用本地時間。對於老版本的ubuntu,將Ubuntu的配置文件/etc/default/rcS中關於UTC的選項由yes轉換為no。對於較新的版本,可以使用命令sudo timedatectl set-local-rtc 1即可以進行設置。相應的關閉使用本地時間功能可以使用sudo timedatectl set-local-rtc 0;

  2.將Windows設置為使用UTC時間( 在Windows8.1和Windows10中驗證通過 )。桌面右下角windows圖標-->右鍵,運行-->regedit,選擇HKEY_LOCAL_MACHINE->SYSTEM->CurrentControlSet->Control->TimeZoneInformation,出現關於時間信息的注冊表項,右鍵新建-->DWORD(32位)/QWORD(64位)(位數根據系統位數確定)-->將項目名稱改為RealTimeIsUniversal-->將值改為1,格式為16進制。或則參考鏈接中的方法,即新建一個注冊表文件來實現相同的功能。

 

3.關於刪除了/etc目錄之后的補救O.O(有備份)

  在練習使用打包命令tar的過程中產生事故。筆者練習使用tar指令將/etc進行打包。並在/tmp新建了一個/etc目錄以供解壓,解壓時發現tar產生的文件的解壓結果是生成完整的/etc目錄,從而產生了/tmp/etc/etc的目錄結構。於是進入/tmp/etc目錄,想將里面重復的/etc目錄使用rm -rf命令刪除掉。結果想當然的使用了rm -rf /etc命令...發現/tmp/etc文件下的/etc目錄仍然存在...然后突然意識到自己用絕對路徑刪除掉了/etc文件夾。

  補救過程:

  (1)由於是tar命令的練習,所以有/etc文件生成的壓縮文件存在。嘗試將壓縮文件再解壓到根目錄下,提示permission denied。嘗試使用sudo命令,提示無法識別uid,推測是因為關於用戶信息的/etc/passwd和/etc/shadow等文件已經被刪除了;

  (2)嘗試上網查找資料,結果發現網絡鏈接不可用。原因和配置文件缺失也有關系;

  (3)想到以前看到過的重啟進入單用戶調試模式嘗試進行修復,但是由於/etc目錄缺失,擔心可能進入不了單用戶模式,而且一旦關機將再無法進入系統(/etc目錄沒有了),所以沒有進行這一種方法的嘗試;

  (4)由於文件系統中是存在/etc的備份的,所需要的是找到root權限將備份文件寫回原來的/etc目錄,但是當前系統由於沒有了/etc目錄又無法提升權限。最終想到了使用live CD的方法。即借助裝有linux安裝程序的U盤,設置BIOS從U盤啟動,再使用安裝程序所自帶的試用選項。此時將可以使用sudo進行權限的提升。在進入試用模式后,使用sudo fdisk /dev/sda(不同設備的設備名可能不同)得到系統的磁盤分區情況,分別將需要的文件系統掛載(在筆者情況下,是分別掛載了/和/home),然后使用sudo命令將備份的信息寫回掛載的根目錄即可。最后再重新啟動,發現可以正常進入系統了,問題解決!

  聯想:既然可以通過Ubuntu的Live CD使用備份文件恢復/etc文件夾,是否可以在Live CD上進行新建用戶等操作,再直接將Live CD的/etc用於被刪除的/etc的恢復?這樣雖然會有部分配置文件會丟失,但是在沒有備份的情況下比重裝系統的性價比還是大不少?當然對於配置環境較多的系統,首先還是經常備份。

  經驗與教訓:

  (1)linux命令中敲擊命令時千萬不要想當然,特別是對於root權限,帶來極大的便利的同時也可能孕育魔鬼,對於命令的作用和潛在效果一定要做重審;

  (2)對與linux中的路徑問題,只存在絕對路徑和相對路徑兩種情況,對應產生問題的命令,使用相對路徑就應該為./etc,而使用絕對路徑時就應該使用/tmp/etc/etc的完整路徑名,使用/etc會被認作絕對路徑,從而造成問題;

  (3)備份是十分重要的。這次問題能夠解決一定程度上要感謝是在練習使用打包指令tar,從而存在備份,否則會有更大的麻煩。相對的,若是存在備份,再借助live CD的強大功能,便可以解決很多問題。所以有備份的習慣,做好的備份,會在關鍵時刻幫上很大的忙。

 

4.在64位Ubuntu環境下運行32位程序的問題

  在做CSAPP配套的buffer實驗時發現實驗提供的hex2raw為64位程序,無法在32位環境中使用(可通過命令 file execname 來查看文件的相關信息 ),切換至64位環境后,發現另一個程序bufbomb為32位,理論上可以在64位環境下運行,但實際使用 ./bufbomb 命令運行時,bash總是報錯 bash: ./bufbomb: No such file or directory。可以看到設備還無法處理32位程序。

   通過搜索后發現,在Ubuntu64位環境下想要執行32位程序需要安裝額外的32位兼容的庫。找到的答案有:

  收集到的一些信息有:

  (1)在Ubuntu13.10版本之前,可以通過一個安裝包 ia32-libs 來安裝32位程序所需的環境;

  (2)對Ubuntu13.10以后的版本,如果只是運行單個程序的需求,則可以查看試圖運行程序時系統的提示信息,如缺失某個函數庫,則可以通過 sudo apt-get install libname:i386安裝對應的i386體系庫解決;

  (3)也可以直接將i386體系結構下的常用庫安裝,從而使得64位系統提供32位程序的兼容;使用 sudo dpkg --add-architecture i386 將i386架構列入無需使用 --force-architecture 選項指定就能安裝的安裝包的體系列表中。再安裝32位程序運行常用的庫文件,sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386,即可運行。(主要參考askubuntu
  

  后續:

  1.除了可以使得64bit機器運行32bit程序外,有時還需要能在64bit環境下進行32bit程序的編譯( gcc的-m32 選項),筆者通過命令 sudo apt-get install gcc-multilib 安裝了編譯32bit C程序所需的函數庫(同樣若需要支持C++,則安裝g++-multilib),從而可以實現將程序編譯為32bit結構(可參考stackoverflow)。可以解決諸如 "bits/c++config.h: No such file or directory" 等問題
  2.在新安裝的 Ubuntu 系統中,可能默認並不包含進行 C/C++ 開發所需的開發環境如 gcc 、g++ 以及編譯所依賴的一些標准庫等,可通過命令 sudo apt-get install build-essential 來安裝開發所需的必要的軟件。

 

5.關於/boot分區經常空間飽和的問題

  最初安裝系統時為/boot單獨建立分區並分配了大致120M左右的空間,覺得應該夠用,結果發現在進行OS更新時,會將新的內核文件也放置在/boot文件夾下,直接導致/boot剩余空間不足系統報錯的情況,所以需要進行一定的調整。主要收集到的解決方案有一下幾種:

  (1)可以進入/boot目錄,若該目錄下存在有多個內核版本的內核文件,則可以對舊的內核文件進行刪除,操作一定要慎重,不要刪除正在使用的內核文件,可通過 uname -r 查看正在使用的內核版本,不要在正在進行OS更新時使用此操作;

    uname -r    //查看當前使用的內核版本

  (2)使用命令sudo apt-get autoremove,apt-get的autoremove選項會將之前為滿足其他包的依賴關系而自動下載但現在不再需要的包刪除。使用該命令會刪除部分在/boot中的舊內核文件(但不限於此)。還可以在此命令上加上--purge參數,在刪除上述文件時會將對應的配置文件也刪除,該種方法可能也需要一部分剩余的/boot空間,所以更適合正常情況下的空間清理,而無法用在/boot接近飽和時進行清理。

    sudo apt-get autoremove     //自動刪除系統已不需要的安裝包
    sudo apt-get --purge autoremove    //刪除對象包括舊的內核文件

 

  (3)使用live CD的方法,通過其中的GParted工具重新調整分區的大小,減少某些分區的大小,從而將空間分配給/boot。Gparted軟件目前好像只包含在Ubuntu的Live CD版本中。可以通過從U盤啟動進入Live CD,選擇試用Ubuntu,在軟件搜索中鍵入GParted,即可找到對應的軟件。在GParted界面中,選中正確的硬盤(界面右上角)和分區,右鍵選擇resize,可以通過拖動圖標或鍵入數字的方式設置想要修改的分區大小。在所有的修改設置完成后,點擊界面上方的 √ 按鈕,則開始執行之前的設置操作。

  注意:修改/boot分區可能會影響系統的再次啟動(筆者本次的操作中並未遇到),對於數據分區的操作應該提前做好備份操作。

  可以參考教程:How to Resize Your Ubuntu Partitions

  (4)在Ubuntu論壇中看到的一個方案,在合適的目錄新建一個足夠空間的文件夾,並將原/boot目錄下的文件復制至該文件夾,再修改/etc/fstab中的掛載關系,使得系統在啟動時掛載新建的文件夾。個人認為只是新建一個文件夾是無法進行掛載的,若設備上尚有較大的未分配的空間,可以使用fdisk先建立一個大小合適的分區,再將/boot內容復制(部分數據應該需要使用dd而不是簡單的cp)至新分區,此時修改/etc/fstab中的掛載關系應該是可行的。感覺這種方法較之使用GParted由於沒有移動和修改其他分區的數據似乎更穩妥一點,但首先需要有未分配的額外空間,其次可能需要修改一些開機有關的信息(如grub的信息),筆者並未進行嘗試,僅在此陳述思路。

  

6.關於使用 apt-get install 出現如下錯誤信息的解決方案 

E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

  從報錯的字面信息來看,主要是由於無法對於需要運行的進程上鎖,且系統詢問是否有另外一個進程在使用鎖。這是由於使用apt命令時,相應的進程會被上鎖,進程結束時則會釋放鎖。但若是某個進程在運行過程中受阻,則鎖無法釋放,使得后續的需要加鎖的進程也無法運行。

  解決方法:

  (1)根據系統的提示,檢查是否真的有另外一個apt進程在使用鎖。使用命令 ps aux | grep apt 顯示所有名字包含apt的進程,查看該進程運行狀態是否正常,若是運行停滯狀態,則可以使用kill pid的方式將其強制結束.注意,上述進程也有可能是正常運行的apt進程(如正在正常進行之前指定的安裝操作),該情況下應該等待進程的進程結束,而不是將其強制停止。上述方法對於apt-get進程較為有效。

  (2)上述情況很容易發生在用戶剛進入Ubuntu即進行apt操作的過程中,這好像是由於Ubuntu的一些新的版本中引入了自動更新的功能,系統在每次開機后會檢查是否有新的版本更新,並自動進行更新操作而不需要用戶的參與。可以權衡一下是否需要關閉該操作,若用戶可以堅持手動更新,可以選擇將此服務關閉。

sudo systemctl disable apt-daily.service # 使得自動更新服務不再開機啟動
sudo systemctl disable apt-daily.timer   # 使得timer不再能用

  相應的啟動該服務只需將上述命令中的disable修改位enable即可。主要參考這里。

  (3)刪除與apt的鎖操作有關的文件夾。建議只有所有的方法都不管用的情況下使用該操作,可以參考這里的第一個回答。

 

7.使用 sudo apt install git-all 安裝 git 時出錯

  在Ubuntu 16.04 通過 sudo apt install git-all 命令安裝 git 時出現錯誤,報錯信息包括 "Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused" 和 "Errors were encountered while processing:  runit  git-daemon-run "。

  問題原因:可以看到報錯信息顯示無法連接至Upstart。這是由於自Ubuntu15.04開始,Ubuntu將各版本的服務框架(service framework)由upstart轉換至了Systemd。

    關於Upstart與Systemd比較,可以參考: Linux初始化init系統介紹

  筆者在安裝git的過程中遇到該問題,收集到的信息中,主要的兩種修正建議是(1) 將服務框架修改為Upstart; (2)將需要Upstart服務框架的作業切換至Systemd。

  具體操作步驟有:

  (1)使用命令 ps -p1 | grep systemd && echo systemd || echo upstart 可以查看當前系統正在運行的系統服務框架是upstart或systemed,筆者的顯示為systemd;

  (2)將系統服務框架轉換為upstart。首先安裝upstart -sysv包,系統會同時刪除ubuntu -standard 和system -sysv 包,之后執行命令 sudo update -initramfs -u,之后系統會轉為使用upstart服務框架(筆者並未嘗試,也不是很推薦。相應的如果想要回歸Systemd框架,則需安裝ubuntu-standard和system-sysv包。另有用戶反應在16.04版本的Ubuntu中的上述操作會出現系統問題,故操作前請慎重考慮並認真參考資料。參考askUbuntuSystemdForUpstartUser);

  (3)解決待安裝的包對於Upstart框架的依賴問題。主要參考這里的第一個回答。即當安裝失敗時,安裝包處於一個安裝的中間狀態,可以在/var/lib/dpkg/info文件夾下找到一個runit.postinst文件,該文件主要描述安裝后(post - installation)需要執行的一些腳本,問題在於該腳本似乎嘗試使用了兩種不同的框架,可以在上述文件中通過在行首加 '#' 注釋掉依賴Upstart服務的腳本,再使用命令 sudo apt-get install -f 繼續安裝即可

  

  (4)除以上提供的方法外,網上還存在的一種思路是將已安裝的 git 相關程序卸載,並重新安裝 git。

  使用以下命令,主要參考這里的回答。注意,這里重新安裝的是 git 而不是之前安裝的 git-all。 

    sudo apt-get purge runit
    sudo apt-get purge git-all
    sudo apt-get purge git
    sudo apt-get autoremove
    sudo apt update
    sudo apt install git       

 

8.Ubuntu下使用tar.gz包為FireFox安裝Flash插件

  (1)首先在官網上下載對應的tar.gz安裝包,並將其解壓至指定的目錄,使用tar命令

    tar -xzvf flash.tar.gz -C dir_name    //將flash安裝包解壓值dir_name指定的目錄下

  (2)在解壓后文件中存在libflashplayer.so、readme.txt和usr目錄,其中readme.txt記錄了詳細的安裝流程

  (3)將libflashplayer.so復制至firefox的插件目錄中,在筆者電腦中,是/usr/lib/firefox-addons/plugins 目錄(不同系統和應用版本該目錄可能不同)

    sudo cp 解壓目錄/libflashplayer.so  firfox插件目錄

  並將解壓文件中的usr目錄復制至Linux的/usr目錄

    sudo cp -r 解壓目錄/usr/*  /usr        //    注意前者是解壓文件中的目錄路徑,后者為系統的usr目錄路徑

  之后重啟Firefox即可使用Flash。

 

9.Ubuntu設置開機自啟動應用的問題

  最近為系統安裝了Shadowsocks-qt5客戶端,為了更方便的使用代理服務,需要客戶端能在開機時自動啟動並建立連接。但是通過客戶端的圖形化界面設置的開機時自動啟動並沒有產生作用,所以考慮通過系統設置開機啟動應用,來保證開機自動啟動該客戶端。

  嘗試了以下兩種方式:

  1.通過添加腳本的方式設置啟動項。在Ubuntu系統中,init進程在進行一系列初始化和設置時,會在最后執行/etc/init.d/rc.local腳本,而該腳本會執行位於文件/etc/rc.local中的腳本命令,該文件默認為空,用戶可以通過編輯該文件設置需要在啟動時被自動加載的命令腳本(從而在init初始化階段即啟動),而不必等到用戶登錄。具體設置可以參考這里

  筆者通過該種方法進行了嘗試(即在該文件中加入了啟動客戶端的命令行指令),但沒有效果。通過命令 systemctl status rc-local.service 獲得了失敗的原因。

  

  可以看到使用該種方法試圖運行客戶端時出現了一些服務和設置上的錯誤。筆者猜測可能直接添加腳本的方式並不適合啟動圖形化界面的客戶端,因為可能某些環境需要在用戶登錄后才能具備。

  2.通過Startup Applications設置開機啟動的應用。在Ubuntu上搜索 Startup Applications,點擊進入,可以編輯需要開機啟動的應用名稱。通過設置對應的Name、執行的命令等,即設定自動啟動的應用。

  

  其中command命令可以通過Browse來指定對應文件,還可以添加一些輔助可執行命令用於控制等。事實上,可以通過Startup Applications 設置自動啟動的命令、任務等等,而不僅限於自動啟動的應用,可以參考這里。筆者使用這種方法成功的將客戶端設置為了開機自動啟動應用。

  Startup Applications中成功配置后,在~/.config/autostart 目錄下會多出一個對應的條目xxx.desktop,如圖所示

  

  可以看到該條目記錄了條目類型、是否隱藏圖標、是否能夠啟動等關鍵參數,由於是放置在當前用戶的文件夾中,故而只有當前用戶登錄時才會根據該條目內容起到自動啟動的效果。

  

10.Linux環境下安裝和配置qtcreator的問題

  --->通過Ubuntu的apt-get命令安裝了qt,但實際運行時產生報錯:Cannot start '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake':no such file or directory.

   (1)通過apt-get命令直接安裝qtcreator;  

     sudo apt-get install openjdk-8-jre qtcreator build-essential    //其中openjdk應選擇對應版本(可鍵入openjdk通過兩次tab鍵展示所有備選包,再選擇合適版本的jdk,如qt5好像不支持openjdk-9-jre)

   (2)安裝完成后,通過命令 qtcreator 運行程序,顯示了如圖所示的錯誤,但程序可以正常運行,即證明這里缺失的是qt在運行過程中的一個組件;

     

     (3)在qtcreator的Options-> build&run 窗口中,查看到qt默認的qmake是在/usr/lib/x86_64-linux-gnu/qt5/bin目錄下;

   

   根據應用反映的信息,似乎在上述目錄下存在/qt4和/qt5兩個目錄。於是查看了/usr/lib/x86_64-linux-gnu/目錄,驗證了之前的思想,其中qt4/bin文件夾下只存在一個可執行文件qdbus,這也是之前報錯在  /qt4/bin目錄下無法找到qmake原因,而相應的,在qt5//bin目錄下則存在有qmake可執行文件,所以問題的關鍵是將qtcreator啟動時默認使用的目錄切換至qt5而不是之前顯示的qt4.同時在/usr/lib/x86_64-   linux-gnu目錄下還存在以下幾個與qt相關的目錄,猜想qtchooser與qt的設置有一定的關系。事實上,通過 man qtchooser 確實獲得了對 qtchooser 命令的幫助文檔。

   

   (4)根據 qtchooser的幫助文檔,使用 -list-versions 參數會根據配置文件顯示所有可用的qt版本,而 -print-env 命令則輸出qt目前使用的環境變量,而 -qt = version 命令則選擇指定的qt版本。

  筆者使用qtchooser -list-versions 命令輸出結果:

   

   使用 qtchooser -print-env 命令輸出結果:

   

  ( 該段現僅供解決方案的一種參考,可能不需要嘗試。可以看到,這里的QT_SELECT變量的值為default,理論上通過命令 qtchooser -qt = qt5 將該變量直接設置為使用 qt5 版本即可解決問題(但筆者使用 -qt=qt5 參數時,輸出無法識別參數的問題)。事實上,之前的截圖中可以看到,/usr/lib/x86_64-linux-gnu/目錄下存在qt-default目錄,即為上述 default 選項的配置文件目錄,修改其中的配置內容,使其使用qt5的目錄也可達成同樣的效果。)

  

  通過 sudo apt-get install qt5-default  並重啟解決問題。筆者后來由於重裝系統需要再次安裝 qtcreator 時,發現僅通過該命令即可將問題解決。該命令還可以解決在qtcreator界面下中,tools -> options -> build & run 選項下中的 qt version 一項中顯示了錯誤標志,下方顯示 "QT version is not properly installed..."信息的問題。

  其他:該問題是由於默認的配置文件指向了錯誤的路徑(qt4,其中不含有相應的可執行文件,而qt5中擁有),故而可以通過修改配置文件中的路徑解決。但該報錯也有可能是由於系統上本身就不存在qmake組件造成的,所以若上述方法沒有作用,可嘗試下在對應的qt版本的qmake,如sudo apt-get install qt5-qmake,可以參考stackoverflowaskubuntu的兩個問題的回答和評論。  

  

  --->在qtcreator界面下,界面上方不存在菜單欄

  

  實際上菜單欄是存在的,在整個屏幕的左上角,在小窗口模式下,菜單欄並沒有顯示在該小窗口中,而是位於主屏幕左上角,移動鼠標至相應位置即可顯示。事實上,menu菜單的顯示位置可以在系統自帶的設置中進行調整。在System Settings -> Appearance -> behavior -> Show the menus for a windows 條目中,可以選擇是否將菜單欄顯示在窗口的標題欄位置,但一般而言菜單工具欄均需要鼠標移動至對應位置時,才會顯示出來。

 

11.Ubuntu環境下安裝 Capstone 和 ROPgadget

  在實現緩沖區溢出漏洞攻擊中的 ROP 技術時,需要通過搜索程序掃描目標程序,從中獲取可用的指令序列片段,從而構造出完整的 ROP 執行鏈。ROPgadget 為一款較為優秀的二進制指令序列搜索程序,這里為其位於 Github 上的主頁在。以下內容記錄安裝 ROPgadget 所需的 Capstone 環境進而安裝 ROPgadget 的步驟。

  安裝 Capstone

  通過 Capstone 官方網站的文檔獲得 Capstone 的下載安裝信息。安裝 Capstone 主要分為兩步進行:(1)安裝 Capstone 的核心引擎( essential core engine ); (2)安裝對應語言版本的關聯程序( 這里安裝的是 Python 相關的程序,其他語言支持見這里 );

  (1)Ubuntu 和 Debian 通過以下指令安裝 Capstone 的核心二進制包,其它平台可參考官方文檔的描述。

    sudo apt-get install libcapstone3 //安裝 Capstone 的核心二進制包

  (2)從官網下載頁面的 Source archive 部分下載 Capstone 的程序包。這里筆者下載的是 .tgz 壓縮文件,其適用於 Java 和 Python 環境。

    tar -zxvf 壓縮文件路徑 -C ~    //將下載獲得的壓縮文件解壓至用戶根目錄下

  進入該目錄下的 bindings/python 目錄,並執行以下命令進行安裝。注意:在安裝對應語言的 bindings 時必須安裝 Capstone 的核心組件,即進行步驟1.

    cd bindings/python  //進入 python 目錄 sudo make install //進行安裝

  安裝 ROPgadget

  (1)通過 git 獲得 ROPgadget 項目倉庫,git 的安裝可參見xxxx。

    git clone -b master http://github.com/JonathanSalwan/ROPgadget.git //獲取對應的項目倉庫

  (2)進入用戶主目錄下的 ROPgadget 目錄,執行以下命令完成安裝過程。安裝完成后,即可通過 ROPgadget 命令執行用戶所需的操作。

    python setup.py install    //安裝 ROPgadget

  問題

  在 ROPgadget 的安裝過程中,可能會報錯"ImportError: No module named setuptools",這是由於 ROPgadget 目錄中提供的 setup.py 文件需要 setuptools 包所造成的。

  

  直接通過以下命令安裝所需的 setuptools 包即可,主要參考這里

  sudo apt-get install python-setuptools //對於 Python 3.x,應該安裝 python3-setuptools 

   常用的 ROPgadget 指令參數記錄

    --binary hello     //指定對名為 hello 的二進制文件進行搜索 --only key //只顯示特定 key 指定的指令 --string key //在可讀段中搜索字符串 key

   示例:

  ROPgadget --binary hello --only ' pop | ret ' | grep eax  //搜索 hello 程序中只包含 pop 或 ret 指令的指令片段,並將其中包含 eax 的片段篩選出來

  ROPgadget --binary hello --string '/bin/sh'       //搜索 hello 程序中是否包含有字符串'/bin/sh'

 

12.Ubuntu環境下包管理工具 apt-get 進行軟件安裝和卸載

  Ubuntu環境下使用 apt-get 作為包管理工具,進行軟件的安裝和卸載的常用命令如下所示(需要 root 權限如使用 sudo ):

  apt-get 進行包的安裝和卸載

  apt-get install package_name    //安裝名為 package_name 的程序,注意給出的名稱為包的名稱而不是全名

  apt-get remove package_name   //卸載名為 package_name 的程序,只用於刪除包,注意會保留包的配置文件

  apt-get purge package_name    //卸載名為 package_name 的程序(包括配置文件)

  另附上一些 apt-get 可用的參數:

  clean    //會刪除/var/cache/apt/archives/ 和/var/cache/apt/archives/partial/目錄下除lock目錄以外的所有文件(從而釋放部分空間)

  autoremove //會刪除之前為滿足其他包的依賴關系而自動下載但現在不再需要的包,如老版本的某些庫等

  update    //會獲取/etc/apt/sources.list中指定的源中的包,從而確定可供更新的軟件包的版本信息

  upgrade    //會將目前系統上安裝的所有包更新至最新版本,更新的源在/etc/apt/sources.list中給出,該命令需在update之后使用

  source   //獲取對應包的源代碼文件,可用於軟件的源碼編譯等過程

  

  使用 apt-cache 進行包查找,用於查找所需包的信息

  apt-cache search key_word  //搜索與關鍵字相關的包

  apt-cache show key_word  //顯示對應包的相關的信息

  dpkg -l            //顯示所有已安裝包的信息

  在進行一般的刪除操作時,用戶可以通過以下命令較為干凈的刪除對應應用包的數據。

      sudo apt-get purge package_name    //刪除對應的包及其配置文件
      sudo apt-get autoremove            //自動清除那些已經不再被需要的依賴包

  進一步的刪除操作還可以將當前主目錄下.config 目錄中對應的配置文件刪除,即將 ~/.config 文件夾下所有與待卸載應用相關的文件全部刪除。

   

  使用 dpkg 安裝應用包

  某些情況下,用戶從網站上下載到的是某些安裝軟件的 .deb 安裝包,用戶可通過命令行的方式進行安裝。 

  (1)通過 dpkg 命令安裝所獲得的 .deb 安裝包

    dpkg -i /path/to/xxx.deb        //命令行安裝 .deb 安裝包

  (2)若當前設備上存在待安裝的 .deb 軟件所需要的依賴庫的缺失時,會導致安裝過程的失敗,此時應通過 apt 命令安裝所有缺失的軟件依賴項。

    sudo apt install -f        //安裝之前安裝過程中缺失的依賴項,-f 選項為 --fix-broken 選項的簡寫,使得系統嘗試解決缺失的依賴項

  (3)在安裝完軟件所確實的依賴項之后,再次進行 .deb 文件的安裝即可。

   dkpg 的部分有用參數記錄:

    dpkg -i xx.deb           //安裝對應的數據包
    dpkg -l                        //顯示所有安裝應用的信息
    dpkg --remove app_name               //刪除一個已安裝的包(卸載),保留配置文件
    dpkg --purge app_name                  //同上,但刪除配置文件,簡化參數為 -P 

 

 

  13.安裝 Ubuntu 18.04 后經常死機——關於安裝顯卡驅動的問題

  在實驗室的主機上安裝 Ubuntu 18.04 后,經常出現系統死機,只有鼠標可移動而鍵盤輸入無響應的情況(無法通過 Ctrl + Alt + F1 等方式打開命令行進行操作),從而需要通過電源鍵強制關機的方法來重啟系統,而經常性的這樣無疑為電腦上進行的功過產生了極大的妨礙和影響。通過查找網上的資料發現,系統死機很可能是由於顯卡驅動不適配造成的,故而這里記錄下簡單的 Ubuntu 系統下與顯卡驅動的命令和操作,以供不時之需。主要的命令及步驟來自MuyuXiaoxiang的博客

  (1) 查看當前設備上顯卡情況

  用戶可以通過 Ubuntu 系統內置的命令查看當前設備上顯卡的情況。

    lspci -k | grep -A 2 -i "VGA"        //查看當前設備上的顯卡情況

  如筆者的電腦上即可看到當前設備上存在的顯卡設備為 NVIDIA Quadro K4000.

   

  (2) 查看當前系統中使用的相對應的硬件的驅動程序,可在菜單欄搜索 Software&Updates ( 或直接通過終端輸入命令 software-properties-gtk )打開軟件及更新工具欄,在 Additional Drivers 中即可看到當前顯卡使用的驅動程序。一般而言 Ubuntu 默認使用的是開源驅動程序 Nouveau,同時系統也應該會給出若干個其他可選驅動的條目。

  

  (3) 查看當前顯卡所推薦使用的顯卡驅動程序。

    sudo ubuntu-drivers devices    //查看當前顯卡所適用的驅動程序

  可以看到存在某一個驅動版本后面帶有"recommended"關鍵字,即為當前顯卡推薦使用的驅動程序。

   

  (4) 設置使用推薦的顯卡驅動。

  在(2)步驟中,若 Addtional Drivers 一欄中已經存在推薦的顯卡驅動程序的選項,則直接點選,並點擊應用修改( Apply Changes )即可。若在上述提供的菜單項中不存在對應的推薦顯卡驅動程序,則通過 apt-get 直接安裝對應的驅動程序。

    sudo apt-get install nvida-driver-390    //安裝對應的顯卡驅動程序

   在安裝完成后,在 Software&Updates 的 Additional Drivers 中直接點選對應的驅動程序即可。在完成配置后,需要重啟設備使得設置生效。

  (5) 對於 NVIDA 顯卡,可通過命令行輸入 nvida-settings 打開顯卡的管理界面,進行一些顯卡配置的管理工作。若當前支持 NVIDA 的 prime,則可以通過 PRIME Profiles 來完成切換使用的顯卡等操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM