導航:首頁 > 文件目錄 > 文件系統svr4怎麼用

文件系統svr4怎麼用

發布時間:2023-03-15 16:10:29

⑴ Android系統文件編輯

以binx結尾的線刷文件,用SML.exe可以解壓(如CoolpadSML_CustomService_2.000.0015.20130304.01包里的文件),解壓後得到很多後綴為.img的文件,每個文件對應Android的一個文件夾,如system.img、userdata.img等。這些文件在Widowns下用7zip無法打開,說明不是能識別的壓縮文件。通過linux下的file -sL userdata.img看類型,弊純得到是data的提埋臘示,system.img也同理通過simg2img可以將userdata.img解壓,simg2img userdata.img userdata.raw對userdata.raw執行file -sL命令後,可以得到ext4格式的文件用7zip可以打彎卜滑開userdata.raw,也可以在linux用mount命令將raw文件掛載到某個目錄。

recovery.img的壓縮和別的不一樣,它是gzip壓縮的cpio文件,解壓過程請參考:

《recovery: ASCII cpio archive (SVR4 with no CRC)——cpio格式的recovery解壓縮和重新打包的方法》

網址是:http://blog.csdn.net/whu_zhangmin/article/details/25184495

註:

通過《Android中system.img的兩種格式及其相互轉換方法》可以知道simg2img將sparse鏡像文件轉換成raw鏡像文件,

「system/core/libsparse/simg2img.c // 將sparse image轉換為raw image;

system/core/libsparse/img2simg.c // 將raw image轉換為sparse image;」

詳細介紹在http://blog.csdn.net/howellzhu/article/details/43165507

關於各img作用的介紹請參考《Android ramdisk.img system.img userdata.img介紹與使用》,

鏈接是http://blog.csdn.net/superfang119/article/details/8557223

⑵ GDB如何從Coremp文件恢復動態庫信息

查看 error log:

可以看到前面這串文字是一個函數簽名的編碼,用 c++filt 還原編碼以後,可以看到完整的函數簽名。

紅框內的這串信息的意思就是崩潰位置是 一個函數起始位置 + 偏移量。

我們大概可以猜到,這個 MySQL 的缺陷是在為 binlog 產生新的文件名時發生的。

小貼士:

函數起始位置 + 偏移量 是一種內存位置的表示方法,但該位置不一定是這個函數內的代碼

以本例來說,0xee36f1 這個位置,程序找到了就近的函數 generate_new_name 的起始位置,計算出有 0x71 這么多偏移,就表示成了 generate_new_name+0x71 這種形式。

但 0xee36f1 這個位置的代碼,大概率是,但,不一定是 generate_new_name 這個函數內部的一段代碼。

⑶ gdb添加移除工作目錄

目錄、終端類型以及程序運行的搜索目錄這些信息。通常你用shell設置的環境變數會被所有你運行的其他程序所繼承。調試時,不需要反復啟動GDB就可以使用一個修改的環境變數試著運行程序,是很有用的。

path directory

在傳遞給程序的PATH環境變數(可執行程序的搜索路徑)前,添加directory。GDB所使用的PATH值不會被更改。可以指定若乾的目錄名,使用空格或系統相關的分隔符(UNIX上是「:」,MS-DOS和MS-Windows上是「;」)分隔它們。如果directory已經在PATH中了,就把它移到前面,以使它可以被立即搜索到。 可以使用字元串「$cwd」,在GDB搜索路徑時,引用當前工作目錄。如果使用「.」代替的話,它引用的是由執行path命令指定的目錄。在添加directory到搜索路徑之前,GDB在directory參數中替換「.」(使用當前路徑)。

show path

顯示可執行文件的搜索路徑列表(PATH環境變數)。

show environment [varname]

列印程序啟動時慣於它的環境變數varname的值。要是沒有給出varname,就列印所有慣於程序的環境變數的名和它的值。可以用env簡寫environment。

set environment varname [=value]

給環境變數varname賦值為value。變數值的更改僅針對於程序,不會影響GDB本身。value可以是任何字元串——環境變數值只能是字元串,對它的任何解釋都由程序本身提供。value參數是可選的。如果去除的話,變數會被賦予一個null值。 例如這個命令:

set env USER = foo

告訴GDB,在隨後的run時,它的用戶是一個名叫「foo」的(「=」前後使用的空格是為了清晰,實際上是不需要的)。

unset environment varname

從傳遞給程序的環境中移除變數varname。這與「set environment varname=」不同,它是從環境中移出變數,而不是給它賦一個空值。

警告:在UNIX系統中,如果有SHELL環境變數的話,GDB使用的是它指定的shell(沒有的話使用/bin/sh)。如果你的SHELL環境變數指定了一個運行初始化文件(如C-Shell的「.cshrc」或者是BASH的「.bashrc」)的shell,掘大你設置在那個文件中的任何變數,都會對你的程序有所影響。你可能希望把這些環境變數的設置移到僅在你注冊時運行的文件中去,這樣的文件有「.login」或「.profile」。

4.5 程序的工作目錄

每次使用run啟動的程序,都GDB的當前工作目錄繼承為它的工作目錄。GDB的工作目錄最初是繼承自它的父進程(通常是shell),不過,你可以在GDB中早散瞎使用cd命令指定一個新的工作目錄。

GDB的工作目錄也擔當著GDB操作的指定文件命令的默認目錄。參見指定文件的命令一節。

cd directory

設置GDB的工作目錄為directory。

pwd

列印GDB的當前工作目錄。

找到正被調試的進程的當前工作目錄,通常是做不到的(因為一個程序可以在它運行的時候改變它的目錄)。如果你工作在GDB可以被配置為帶有「/proc」支持的系統上的話,你可以利用info proc命令(見18.1.3 SVR4進程信息一節)找到debuggee的當前工作目錄。

4.6 程序的輸入輸出

默認情況下,GDB下運行的程序作輸入輸出的終端,與GDB所使用的是相同的。GDB把終端轉換為它自己的終端方式與你交互,不過,它記錄你的應用程序所使用的終端方式,當你繼續運行你的程序時,它再切換回來。

info terminal

顯示由GDB記陸空錄下來的程序所使用的終端模式的信息。

可以使用run命令,利用shell的重定向,重定向程序的輸入和/或輸出。

啟動程序,驅使他的輸出到文件「outfile」。

另外一種指定程序在何處做輸入輸出的方式是使用tty命令。這個命令接受一個作為參數的文件名,並使這個文件成為之後run命令的默認重定向目標。它也為子進程、之後的run命令重置控制終端。例如:

指示後續用run命令啟動的進程默認在終端「/dev/ttyb」上作輸入輸出,並且拿這個作為它們的控制終端。

在run中明確的重定向,優先於tty對輸入/輸出設備的影響,但是並不對控制終端有影響。

當使用tty命令或在run命令中重定向輸入時,只有程序的輸入會受到影響。GDB的輸入依然來自你的終端。tty是set inferior-tty的別名。

可以使用show inferior-tty命令告訴GDB,顯示將來程序運行會被使用的終端的名字。

set inferior-tty /dev/ttyb

設置正被調試的程序的tty為/dev/ttyb。 tty /dev/ttyb run > outfile

show inferior-tty

顯示正被調試的程序的當前tty。

4.7 調試某個已運行的進程

attached process-id

這個命令附著到一個正在GDB以外運行的進程。(info文件顯示活動目標)這個命令帶有一個process-id參數。要找到某個UNIX進程的process-id,通常的方式是使用ps工具,或者使用「jobs –l」shell命令。

attached命令執行之後,第二次按RET的話,是不會被重復的。

為了使用attached,程序必須運行在一個支持進程的環境下。例如:對於在缺乏操作的bare-board目標上的程序,attached是不會工作的。也必須得有發送信號的許可權。

當使用attached的時候,調試器首先定位當前目錄中正運行在進程中的程序,然後(如果沒有發現這個程序)查看元文件搜索路徑(參見指定源文件目錄一節)。你也可以利用file命令裝載程序。參見指定文件的命令一節。

准備好要調試的指定進程後,所做的第一件事就是停止進程。檢查與修改被附著的進程,可以使用平常使用run啟動進程時能夠用到的所有命令。可以插入斷點;可以單步調試並繼續;可以修改存儲器。如果你願意讓進程繼續運行的話,你可以在將GDB附著到進程之後使用continue命令。

detach

當對被附著的進程的調試完成時,可以使用detach命令,把它從GDB的控制下釋放出來。分離進程而繼續執行。detach命令之後,那個進程與GDB再一次變得完全獨立,並且准備附著另外一個進程,或者使用run命令啟動一個。detach命令執行之後,再按RET的話,是不會被重復的。

當已附著到一個進程時,退出GDB或使用run命令,會殺掉那個進程

⑷ 查找/etc/passwd目錄中以r開始的字元串,命令怎麼寫

在Linux /etc/passwd文件中每個用戶都有一個對應的記錄行,它記錄了這個用戶的一些基本屬性。
系統管理員經常會接觸到這個文件的修改以完成對用戶的管理工作。這個文件對所有用戶都是可讀的。如下;
1.username 用悔並戶名它唯一地標識了一個用戶帳號,用戶在登錄時使用的就是它。由大小寫字母和/或數字組成。登錄名中不能有冒號(因為冒號在這里是分隔符。為了兼容起見,登錄名中最好不要包含點字元(.),並且不使用連字元(-)和加號(+)打頭。
2.password 該帳號的口令passwd文件族晌中存放的密碼是經過加密處理的。Linux的加密演算法很嚴密,其中的口令兆前鋒幾乎是不可能被破解的。現在許多Linux系統(如SVR4)都使用了shadow技術,把真正的加密後的用戶口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令欄位中只存放一個特殊的字元,例如「x」或者「*」。

⑸ 系統linux 跪求【find .|cpio -o -H newc|gzip>~/myinitramfs.gz】 的詳細解釋。。一定採納

|find .|cpio -o -H newc|gzip>~/myinitramfs.gz

1. find . 查找顯示當前目錄下的所有文件、文件夾
2. | 管道,將 | 左邊命令的結果專(也就屬是find . 得到的所有文件、文件夾路徑名稱)傳給右邊(也就cpio命令)
3. cpio -o -H newc cpio是將文件系統打包或解包, -o 是打包 ,-H 指定格式 為newc
newc The new (SVR4) portable format, which supports file systems having more than 65536 i-nodes. (4294967295 bytes)
4 | 將cpio打好的包傳給gzip壓縮
5 gzip 壓縮命令的一種,gnuzip。類似zip,rar。

6 >~/myinitramfs.gz 將壓縮後的數據 存為 文件myinitramfs.gz

⑹ linux內核模塊如何開始和結束

GRLB 載入了內核之後,內核首先會再進行二次系統的自檢,而不一定使用 BIOS 檢測的硬體信息。這時內核終於開始替代 BIOS 接管Linux的啟動過程了。

內核完成再次系統自檢之後,開始採用動態的方式載入每個硬體的模塊,這個動態模塊大家可以想像成硬體的驅動(默認 Linux 硬體的驅動是不需要手工安裝的,如果是重要的功能,則會直接編譯到內核當中;如果是非重要的功能,比如硬體驅動會編譯為模塊,則在需要時由內核調用。不過,如果沒有被內核硬體,要想驅動,就需要手工安裝個硬體的硬塊了。具體的安裝方法會在後續章節中介紹)。

那麼,Linux 的內核到底放在了哪裡呢?當然是 /boot 的啟動目錄中了,我們來看看這個目錄下的內容吧。

[root@localhost ~]#ls /boot/
config-2.6.32-279.el6.i686
#內核的配置文件,內核編譯時選擇的功能與模塊
efi
#可擴展固件介面,為英特爾為全新PC固件的體系結構、介面和服務提出的建議標准
grub
#啟動引導程GTUB的數據目錄
initramfe-2.6.32-279.el6.i686.img
#虛擬文件系統(CentOS 6.x 中用initramfs替代了initrd,但功能是一樣的)
lost+found
故boot分區的備份目錄
symvers-2_6.32-279.el6.i686.gz
#模塊符號信息
System.map-2.6.32-279.el6.i686
#內核功能和內存地址的對應列表
vmlinuz-2.6.32-279.el6.i686
#用於啟動的Linux內核。這個文件是一個壓縮的內核鏡像


我們已經知道,Linux 會把不重要的功能編譯成內核模塊,在需要時再調用,從而保證了內核不會過大。在多數 Linux 中,都會把硬體的驅動程序編譯為模塊, 這些模塊保存在 /lib/moles/ 目錄中。常見的 USB、SATA 和 SCSI 等硬碟設備的驅動,還有一些特殊的文件系統(如 LVM、RAID 等)的驅動,都是以模塊的方式來保存的。

如果 Linux 安裝在 IDE 硬碟之上,並且採用的是默認的 ext3/4 文件系統,那麼內核啟動後載入根分區和模塊的載入都沒有什麼問題,系統會順利啟動。但是如果 Linux 安裝在 SCSI 硬碟之上,或者採用的是 LVM 文件系統,那麼內核(內核載入入內存是啟動引導程序 GRUB 調用的,並不存在硬碟驅動不識別的問題)在載入根目錄之前是需要載入 SCSI 硬碟或 LVM 文件系統的驅動的。

SCSI 硬碟和 LVM 文件系統的驅動都放在硬碟的 /lib/moles/ 目錄中,既然內核沒有辦法識別 SCSI 硬碟或 LVM 文件系統,那怎麼可能讀取 /lib/moles/ 目錄中的驅動呢?Linux 給出的解決辦法是使用 initramfs 這個虛擬文件系統來處理這個問題。

initramfe虛擬文件系統

CentOS 6.x 中使用 initramfs 虛擬文件系統取代了 CentOS 5.x 中的 initrd RAM Disk。它們的作用類似,可以通過啟動引導程序載入到內存中,然後會解壓縮並在內存中模擬成一個根目錄,並且這個模擬的文件系統能夠提供一個可執行程序,通過該程序來載入啟動過程中所需的內核模塊,比如 USB、SATA. SCSI 硬碟的驅動和 LVM、RAID 文件系統的驅動。

也就是說,通過 initramfs 虛擬文件系統在內存中模擬出一個根目錄,然後在這個模擬根目錄中載入 SCSI 等硬體的驅動,就可以載入真正的根目錄了,之後才能調用 Linux 的第一個進程 /sbin/init。

Initramfs 虛擬文件系統主要有以下優點:

關機或者某些進程停止,對應的內核模塊就會結束。更多知識請網路《Linux就該這么學》

⑺ 如何在編譯後,指定安裝路徑

1. 安裝目錄變數
在Makefile中,安裝目錄同樣需要使用變數來指定,這樣就可以很方便的修汪瞎改文件的安裝路徑。安裝目錄的標准命名下邊將一一介紹。這些變數基於標準的文件系統結構,這些變數的變種在SVR4、4.4BSD、Linux、Ultrix v4以及其它現代操作系統中都有使用。
安裝者希望在調用make是改變這些值,(例如 make prefix=/usr install),或者在配置時改變困弊空這些值(例如 configure –prefix=/usr)。GNU包不會對在該系統上這些變數適合於哪些值做任何猜想,或者說GNU包不會猜測這些包應該被安裝到哪裡是更合適的:GNU包使用預設的特定設置是為了以便於所有的GNU包行為一致,它允許安裝者做任何自己想要的布局。
以下所羅列的兩個變數是指定安裝文件的根目錄。所有其它安裝目錄都是它們的子目錄。注意:文件不能直接安裝在這兩個目錄下。
prefix
這個變數(通常作為實際文件安裝目錄的父目錄,可以理解為其它實際文件安裝目錄的前綴)用於構造下列(除這兩個安裝根目錄以外的其它目錄變數)變數的預設值。變數「prefix」預設值是「/usr/local」。創建完整的GNU系統時,變數prefix的預設值是空值,「/usr」是「/」的符號連接符文件。(如果使用「Autoconf」工具,它應該寫成「@prefix@」)。注意:當更改了變數「prefix」以後重新執行「make install」,不會導致可執行程序(終極目標)的重建。
exec_prefix
這個前綴用於構造下列變數的預設值。變數「exec_prefix」預設值是「$(prefix)」(如果使用「Autoconf」工具,它應該寫為「@exec_prefix@」)。通常,「$(exec_prefix)」目錄中的子目錄下存放和機器相關文件(例如可執行文件和常式庫)。「$(prefix)」目錄的子目錄存放通用的一般文件。同樣:改變「exec_prefix」的值之後執行「make install」,不會重建可執行程序(終極目標)。
文件(包括可執行程序、說明文檔等)的安裝目錄:
bindir
用於安裝一般用戶可運行的可執行程序。通常它的值為:「/usr/local/bin」,使用時應寫為:「$(exec_prefix)/bin」。(使用「Autoconf」工具時,應該為「@bindir@」)
sbindir
安裝可在shell中直接調用執行的程序。這些命令僅對系統管理員有用(系統管理工具)。通常它的值為:「/usr/local/sbin」,要求在使用時應寫為:「$(exec_prefix)/sbin」。(使用「Autoconf」工具時,應該為「@sbindir@」)
libexecdir
用於安裝那些通常不是由用戶直接使用,而是由其它程序調用的可執行程序。通常它的值為:「/usr/local/libexec」,要求在使用時應寫為:「$(exec_prefix)/libexec」。(使用「Autoconf」工具時,應該為「@libexecdir@」)
程序執行時使用的數據文件可從以下兩個方面來分類:
1. 是否可由程序更改。分為兩類:程序可修改和不可修改的文件(雖然用戶可編輯其中某些文件)。
2. 是否和體系結構相關。分為兩類:體系結構無關文件,可被所有類型的機器共享;體系結構相關文件,僅可被相同類型機器、操作系統共享;其它的就是那些不能被任何兩個機器共享的文件。
這樣就存在六種不同的可卜含能。除編譯生成的目標文件(.o文件)和庫文件以外,不推薦使用那些和特定機器體系結構相關的文件,使用和體系無關的數據文件更加簡潔,而且,它的實現也並不非常困難。
在Makefile中應該使用以下變數為不同類型的文件指定對應的安裝目錄:
`datarootdir'
The root of the directory tree for read-only architecture-independent data files. This should normally be /usr/local/share, but write it as $(prefix)/share. (If you are using Autoconf, write it as `@datarootdir@'.) `datadir''s default value is based on this variable; so are `infodir', `mandir', and others.
Datarootdir
機器體系結構無關的只讀數據文件的根目錄。通常它的值為:「/usr/local/share」,使用時應寫為:「$(prefix)/share」。(使用「Autoconf」工具時,應該為「@datarootdir@」)。『datadir』的預設值是基於這個變數的,`infodir', `mandir'等其它變數的值也是如此。
datadir
用於安裝和機器體系結構無關的只讀數據文件。通常它的值與』datarootdir』一樣,但是我們使用兩個變數是為了用戶能夠移動一些程序特定的文件而不修改如man 文件、info文件的路徑。通常它的值為:「/usr/local/share」,使用時應寫為:「$(prefix)/share」。(使用「Autoconf」工具時,應該為「@datadir@」)。「$(infodir)」和「$(includedir)」作為例外情況,參考後續對它們的詳細描述。
Datadir的定義對所有包都一樣,因此你應該安裝你的數據在它的子目錄下。大部分包安裝它們的數據在如此目錄下:$(datadir)/package-name/.
sysconfdir
用於安裝從屬於特定機器的只讀數據文件,包括:主機配置文件、郵件服務、網路配置文件、「/etc/passwd」文件等。所有該目錄下的文件都應該是普通文本文件(可識別的「ASCII」碼文本文件)。通常它的值為:「/usr/local/etc」,在使用時應寫為:「$(prefix)/etc」。(使用「Autoconf」工具時,應該為「@sysconfdir@」)。
不要將可執行文件安裝在這個目錄下(可執行文件的安裝目錄應該是「$(libexecdir)」或者「$(sbindir)」)。也不要在這個目錄下安裝那些需要更改的文件(系統的配置文件等)。這些文件應該安裝在目錄「$(localstatedir)」下。
sharedstatedir
用於安裝那些可由程序運行時修改的文件,這些文件與體系結構無關。通常它的值為:「/usr/local/com」,要求在使用時應寫為:「$(prefix)/com」。(使用「Autoconf」工具時,應該為「@sharedstatedir@」)
localstatedir
用於安裝那些可由程序運行時修改的文件,但這些文件和體系結構相關。用戶沒有必要通過直接修改這些文件來配置軟體包,對於不同的配置文件,將它們放在「$(datadir)」或者「$(sysconfdir)」目錄中。「$(localstatedir)」值通常為:「/usr/local/var」,在使用時應寫為:「$(prefix)/var」。(使用「Autoconf」工具時,應該為「@localstatedir@」)
libdir
用於存放編譯後的目標文件(.o)文件庫文件(文檔文件或者執行的共享庫文件)。不要在此目錄下安裝可執行文件(可執行文件應該安裝在目錄「$(libexecdir)」下)。變數libdir值通常為:「/usr/local/lib」,使用時應寫為:「$(exec_prefix)/lib」。(使用「Autoconf」工具時,應該為「@libdir@」)
infodir
用於安裝軟體包的 Info 文件。它的預設值為:「/usr/local/info」,使用時應寫為:「$(prefix)/info」。(使用「Autoconf」工具時,應該為「@infodir@」)
lispdir
用於安裝軟體包的Emacs Lisp 文件的目錄。它的預設值為:「/usr/local/share/emacs/site-lisp」,使用時應寫為:「$(prefix)/share/emacs/site-lisp」。當使用Autoconf工具時,應將寫為「@lispdir@」。為了保證「@lispdir@」能夠正常工作,需要在「configure.in」文件中包含如下部分:

lispdir='${datadir}/emacs/site-lisp'
AC_SUBST(lispdir)

includedir
用於安裝用戶程序源代碼使用「#include」包含的頭文件。它的預設值為:「/usr/local/include」,使用時應寫為:「$(prefix)/include」。(使用「Autoconf」工具時,應該為「@includedir@」)。

除gcc外的大多數編譯器不會在目錄「/usr/local/include」中搜尋頭文件,因此這種方式只適用gcc編譯器。這一點應該不是一個問題,因為很多情況下一些庫需要gcc才能工作。對那些依靠其它編譯器的庫文件,需要將頭文件安裝在兩個地方,一個由變數「includedir」指定,另一個由變數「oldincludedir」指定。

oldincludedir
它所指定的目錄也同樣用於安裝頭文件,這些頭文件用於非gcc的編譯器。它的預設值為:「/usr/include」。(使用「Autoconf」工具時,應該為「@oldincludedir@」)。

Makefile在安裝頭文件時,需要判斷變數「oldincludedir」的值是否為空。如果為空,就不使用它進行頭文件的安裝(一般是安裝完成「/usr/local/include」下的頭文件之後才安裝此目錄下的頭文件)。

一個軟體包的安裝不能替換該目錄下已經存在的頭文件,除非是同一個軟體包(重新使用相同的軟體包在此目錄下安裝頭文件)。例如,軟體包「Foo」需要在「oldincludedir」指定的目錄下安裝一個頭文件「foo.h」時,可安裝的條件為:1.目錄「$(oldincludedir)」目錄下不存在頭文件「foo.h」;2. 已經存在頭文件「foo.h」,存在的頭文件「foo.h」是之前軟體包「Foo」安裝的。

檢查頭文件「foo.h」是否來自於軟體包Foo,需要在頭文件的注釋中包含一個「magic」字元串,使用命令「grep」來在該文件中查找這個magic。
`docdir'
The directory for installing documentation files (other than Info) for this package. By default, it should be /usr/local/share/doc/yourpkg, but it should be written as $(datarootdir)/doc/yourpkg. (If you are using Autoconf, write it as `@docdir@'.) The yourpkg subdirectory, which may include a version number, prevents collisions among files with common names, such as README.
這個目錄安裝除了Info外的該包提供的文檔,它的預設值/usr/local/share/doc/yourpkg,使用時應寫為:「$(datarootdir)/doc/yourpkg」。(使用「Autoconf」工具時,應該為「@docdir@」)。Yourpkg子目錄可能包括版本號,為了阻止具有相同文件名字的文件沖突,例如README。
`infodir'
The directory for installing the Info files for this package. By default, it should be, but it should be written as (If you are using Autoconf, write it as `@infodir@'.) infodir is separate from docdir for compatibility with existing practice.
這個目錄安裝該包的info文件。它的預設值是:/usr/local/share/info, 使用時應寫成:$(datarootdir)/info.(使用「Autoconf」工具時,應該為「@infodir@」).infodir從docdir中單獨分離出來為了兼容已經存在的practice。
`htmldir'
`dvidir'
`pdfdir'
`psdir'
Directories for installing documentation files in the particular format. (It is not required to support documentation in all these formats.) They should all be set to $(docdir) by default. (If you are using Autoconf, write them as `@htmldir@', `@dvidir@', etc.) Packages which supply several translations of their documentation should install them in `$(htmldir)/'ll, `$(pdfdir)/'ll, etc. where ll is a locale abbreviation such as `en' or `pt_BR'.
這些目錄用於安裝特定格式的文檔(並不要求支持所有這些格式的文檔)。預設值應該設置為:$(docdir)(使用「Autoconf」工具時,應該為「@htmldir @」等)。
`libdir'
The directory for object files and libraries of object code. Do not install executables here, they probably ought to go in $(libexecdir) instead. The value of libdir should normally be /usr/local/lib, but write it as $(exec_prefix)/lib. (If you are using Autoconf, write it as `@libdir@'.)
`lispdir'
The directory for installing any Emacs Lisp files in this package. By default, it should be /usr/local/share/emacs/site-lisp, but it should be written as $(datarootdir)/emacs/site-lisp.
If you are using Autoconf, write the default as `@lispdir@'. In order to make `@lispdir@' work, you need the following lines in your configure.in file:
lispdir='${datarootdir}/emacs/site-lisp'
AC_SUBST(lispdir)

`localedir'
The directory for installing locale-specific message catalogs for this package. By default, it should be /usr/local/share/locale, but it should be written as $(datarootdir)/locale. (If you are using Autoconf, write it as `@localedir@'.) This directory usually has a subdirectory per locale.
這個目錄安裝該包用於本地特定消息的目錄。預設值是:/usr/local/share/locale, 但是應該寫成:`@localedir@'。這個目錄常常對每個locale(本地化)都有一個子目錄。

⑻ 如何查看/etc/passwd文件以冒號分隔的第二列的所有內容

1)「用戶名」是代表用戶賬號的字元串。通常長度不超過8個字元,並且由大小寫字母和/或數字組成。登錄名中不能有冒號(,因為冒號在這里是分隔符。為了兼容起見,登錄名中最好不要包含點字元(.),並且不使用連字元(-)和加號(+)打頭。

2)「口令」一些系統中,存放著加睜笑密後的用戶口令字。。雖然這個欄位存放的只是用戶口令的加密串,不是
明文,但是由於/etc/passwd文件對所有用戶都可讀,所以這仍是一個安全隱患。因此,現在許多 Linux
系統(如SVR4)都使用了shadow技術,把真正的加密後的用戶口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字
段中只存放一個特殊的字元,例如「x」或者「*」。

3)「用戶標識號」是一個整數,系統內部用它來標識用戶。一般情況下它與用戶名是一一遊行對應的。如果幾個用悉磨含戶名對應的用戶標識號是一樣的,系統內部將把它們視為同一個用戶,但是它們可以有不同的口令、不同的主目錄以及不同的登錄Shell等。

通常用戶標識號的取值范圍是0~65 535。0是超級用戶root的標識號,1~99由系統保留,作為管理賬號,普通用戶的標識號從100開始。在Linux系統中,這個界限是500。

4)「組標識號」欄位記錄的是用戶所屬的用戶組。它對應著/etc/group文件中的一條記錄。

⑼ Linux裡面什麼是ext2fs

EXT2FS第二代擴展文件系統(英語:second extended filesystem,縮寫為 ext2),是LINUX內核所用的文件系統。它開始由Rémy Card設計,用以代替ext,於1993年1月加入linux核心支持之中。ext2 的經典實現為LINUX內核中的ext2fs文件系統驅動,最大可支持2TB的文件系統,至linux核心2.6版時,擴展到可支持32TB。其他的實現包括GNU Hurd,Mac OS X(第3方),Darwin(第3方),BSD。ext2為數個LINUX發行版的默認文件系統,如Debian、Red Hat Linux等 。

簡介

Linux支持多種不同類型的文件系統:網路文件系統NFS,磁碟文件系統Extfs,特殊文件系統proc、tmpfs等。

Ext2fs文件系統基本概念

Inode

Ext2fs中,每個文件都用如下圖所示的inode結構來描述,用戶空間操作的對象是文件路徑和名稱,系統kernel把路徑名稱解析成inode,通過inode號來訪問它代表的文件。

Mode:包含兩個數據,文件類型(普通文件/目錄/字元設備/塊設備/符號鏈接/管道)和用戶訪問許可權信息(0660)。

Ownerinfo:文件屬組信息。

Size:文件長度,單位是byte。

Timestamps:文件訪問和修改的時間戳。

Linkscount:這個項在上圖中沒有體現,它記錄了這個inode存在多少個鏈接,創建新文件時,其inode的linkscount應該為1,文件被刪除後,這個inode的linkscount就變為0。

DataBlocks:指向真實的文件數據塊,因為大文件可能會分配很多的block,直接在inode中保存所有的數據塊指針將會比較困難,也會浪費掉很多空間,畢竟系統中大文件的數量是佔少數的,所以設計了間接塊指針(Indirectblocks)和二級塊指針(Doubleblocks)來指向真實數據塊。

實際上還應該包含了inode號。

目錄

在Ext2fs中,目錄被看做一種特殊文件,也用一個inode來描述,目錄的datablock中保存了目錄下的所有內容,每條內容叫做一個entry,結構如下:

每條entry都保存了inode號、entry的長度、文件名長度、文件類型,並且都是4位元組對齊。


特別地,每個目錄下有兩個特殊的子目錄,'.'和'..',分別代表當前目錄和上一級目錄,這兩個目錄文件其實是硬鏈接。其中'..'有一個重要的作用:FSchecker(可以把文件系統umount後手動執行e2fsck看看)在檢查文件系統的時候,就會使用』..『來檢查目錄是否可以追溯到掛載根目錄,如果檢查失敗,目錄便會被鏈接到掛載根目錄下面的lost+found。

鏈接

為了方便系統內文件共享,Linux支持了兩種基本的鏈接文件:硬鏈接和軟鏈接(也叫符號鏈接)。

硬鏈接並不是一個獨立的文件,不佔用inode,只是在目錄下創建了一條entry,其中inode號保存的是目標文件的inode號,訪問硬鏈接時,文件系統通過inode將訪問操作重定向到目標文件,實現了文件共享,所以硬鏈接就是多個文件名直接指向同一個inode,用stat命令也能看到其inode號就是目標文件的inode號,它的特點:

不能跨文件系統。

目標文件必須先存在(inode存在且linkcount不為0)。

只能對普通文件創建硬鏈接,目錄不行。

刪除一個硬鏈接文件並不影響其他有相同inode號的文件。

軟鏈接是一個獨立的文件,擁有自己的inode,其數據塊存放的是目標文件的名稱,訪問軟鏈接時,kernel先訪問軟鏈接的內容,拿到目標文件名,並重新啟動路徑解析,獲取到目標文件inode號再向文件系統發起訪問。軟鏈接的特點:

可以跨文件系統。

文件和目錄都可以。

可對不存在的文件或目標創建軟鏈接。

軟鏈接有自己文件屬性和許可權。

創建軟鏈接時,鏈接計數i_nlink不會增加;

刪除軟鏈接並不影響被指向的文件,但若被指向的原文件被刪除,則相關軟連接被稱為死鏈接(即danglinglink,若被指向路徑文件被重新創建,死鏈接可恢復為正常的軟鏈接)。

軟鏈接的目標文件也可以是軟鏈接,其解析過程是遞歸的。

注意:軟鏈接創建時目標文件的路徑指向使用絕對路徑比較好,使用相對路徑創建的軟鏈接被移動後該軟鏈接文件將成為一個死鏈接,因為鏈接數據塊中記錄的也是相對路徑指向。

下面這個圖清晰描述了硬鏈接和軟連接之間的區別:

Ext2fs基本結構

在創建文件系統的時候,Ext2fs將設備(磁碟或者分區)劃分成1K、2K或者4K的block,然後通過Blockgroup來管理,Ext2fs/Ext3fs/Ext4fs的結構差不多(Ext2fs主要是少了日誌功能相關的內容),大致如下圖所示:

SuperBlock

SuperBlock是文件系統最重要的數據,它從設備開始位置偏移1024位元組的地方開始存儲,佔用1個block。如果block的大小是1KB,那麼SuperBlock就存放在block-1。如果block的大小是4KB,那Superblock就存放在block-0。

在Ext2fs的第一個版本(reverson0),每個BlockGroup都會存儲一份SuperBlock的一份副本,因為對空間浪費比較嚴重,後來的版本就只在部分BlockGroup(0、1、3、5、7、9這幾個group)中保留了SuperBlock的副本,在這幾個Group,和SuperBlock一起備份的還有GroupDescriptor。當然,如果沒有這么多Group,副本數量自然更少,在後面的demo中也可以看出來。其中Group-0中的SuperBlock叫作PrimarySuperBlock,文件系統被mount時,VFS讀取的也正是這份。

SuperBlock裡面的具體數據包括:

inode和block的總數,以及還有多少未分配。

每個BlockGroup有多少個inode和block。

文件系統唯一身份標識符(UUID),每個設備上的文件系統UUID都不一樣。

...

GDT

GroupDescriptorTable,GDT在文件系統中的layout緊跟Superblock後面,是文件系統第二關鍵的數據,它主要用於存放所有BlockGroup的信息:

Ext2fs為GDT預留了一部分空間,用於文件系統擴容。


通過冗餘提高了文件系統可靠性:在多個group中保存了關鍵數據的冗餘副本,包括superblock、GDT,當這些關鍵數據損壞的時候,很容易從這些冗餘副本中恢復。


提升性能:分成group後,inodetable和datablock之間的」距離「變近了,在執行I/O時,可能會減少磁頭定址的時間。

註:實際上inodesize,每個group中的block數等參數都可以在創建文件系統的時候指定,具體命令參數參考manpage。

Ext2fs的性能優化


為了提升I/O性能,Ext2fs內核代碼也做了很多設計,其中有兩個關鍵的技術:

提前讀:當必須讀取一個塊時,內核代碼在幾個連續的塊上請求I/O。通過這種方式,它試圖確保要讀取的下一個塊已經載入到緩沖區緩存中。提前讀通常在文件的連續讀取期間執行,Ext2fs將它們擴展到目錄讀取,可以是顯式讀取(readdir(2)調用),也可以是隱式讀取(namei內核目錄查找)。

預分配:在將數據寫入文件時,Ext2fs在分配新塊時預先分配最多8個相鄰塊。具體預分配多少個塊取決於blocksize:blocksize=1KB,每次預分配2個block;blocksize=2KB,每次預分配4個block;blocksize=4KB,每次預分配8個block。當然,對於用touch創建的空文件是不會預分配block的。即使在非常滿的文件系統上,預分配命中率也只有75%左右。這種預分配在負載較大的情況下可以獲得良好的寫性能,同時它還允許將連續的塊分配給文件,從而加快未來的順序讀取。

下面是Ext2fs、Ext3fs和Ext4fs的一個簡單對比:

只有Ext2fs的Filesystemstate是notclean,Ext3fs和Ext4fs都是clean,Ext2fs剛被以讀寫模式mount時,這個state被設置成notclean,umount或者以只讀模式mount時,state被設置成clean,啟動時文件系統根據這個狀態來決定是否要執行檢查。

Ext3fs/Ext4fs的Superblock中多了關於日誌功能的信息。

Ext4fs的每個group多了校驗和(checksum)數據。

⑽ 如何編寫Linux Daemon後台程序

守護進程(Daemon)是運行在後台的一種特殊進程。它獨立於控制終端並且周期核瞎模性地執行某種任務或等待處理某些發生的事件。守護進程是一種很有用的進 程。Linux的大多數伺服器就是用守護進程實現的。比如,Internet伺服器inetd,Web伺服器httpd等。同時,守護進程完成許多系統任 務。比如,作業規劃進程crond,列印進程lpd等。 x0dx0a守護進程的編程本身並不復雜,復雜的是各種版本的Unix的實現機制不盡相同,造成不同Unix環境下守護進程的編程規則並不一致。這需要讀者注意,照搬 某些書上的規則(特別是BSD4.3和低版本的System V)到Linux會出現錯誤的。下面將全面介紹Linux下守護進程的編程要點並給出詳細實例。 x0dx0a一. 守護進程及其特性 x0dx0a守護進程最重要的特性是後台運行。在這一點上DOS下的常駐內存程序TSR與之相似。其次,守護進程必須與其運行前的環境隔離開來。這些環境包括未關閉的 文件描述符,控制終端,會話和進程組,工作目錄以及文件創建掩模等。這些環境通常是守護進程從執行它的父進程(特別是shell)中繼承下來的。最後,守 護進程的啟動方式有其特殊之處。它可以在Linux系統啟動時從啟動腳本/etc/rc.d中啟動,可以由作業規劃進程crond啟動,還可以由用戶終端 (通常是shell)執行。 x0dx0a總之,除開這些特殊性以外,守護進程與普通進程基本上沒有什麼區別。因此,編寫守護進程實際上是把一個普通進程按照上述的守護進程的特性改造成為守護進程。如果讀者對進程有比較深入的認識就更容易理解和編程了。 x0dx0a二. 守護進程的編程要點 x0dx0a前面講過,不同Unix環境下守護進程的編程規則並不一致。所幸的是守護進程的編程原則其實都一樣,區別在於具體的實現細節不同。這個原則就是要滿足守護 進程的特性。同時,Linux是基於Syetem V的SVR4並遵循Posix標准,實現起來與BSD4相比更方便。編程要點如下; x0dx0a1. 在後台運行。 x0dx0a為避免掛起控制終端將Daemon放入後台執行。方法是在進程中調用fork使父進程終止,讓Daemon在子進程中後台執行。改緩 x0dx0aif(pid=fork()) x0dx0aexit(0);//是父進程,結束父進程,子進程繼續 x0dx0a2. 脫離控制終端,登錄會話和進程組 x0dx0a有必要先介紹一下Linux中的進程與控制終端,登錄會話和進程組之間的關系:進程屬於一個進程組,進程組號(GID)就是進程組長的進程號(PID)。登錄會話可以包含多個進程組。這些進程組共享一個控制終端。這個控制終端通常是創建進程的登錄終端。 x0dx0a控制終端,登錄會話和進程組通常是從父進程繼承下來的。我們的目的就是要擺脫它們,使之不受它們的影響。方法是在第1點的基礎上,調用setsid()使進程成為會話組長: x0dx0asetsid(); x0dx0a說明:當進程是會話組長時setsid()調用失敗。但第一點已經保證進程不是會話組長。setsid()調用成功後,進程成為新的會話組長和新的進程組長,並與原來的登錄會話和進程組脫離。由於會話過程對控制終端的獨占性,進程同時與控制終端脫離。 x0dx0a3. 禁止進程重新打開控制終端 x0dx0a現在,進程已經成為無終端的會話組長。但它可以重新申請打開一個控制終端。可以通過使進程不再成為會話組長來禁止進程重新打開控制終端: x0dx0aif(pid=fork()) x0dx0aexit(0);//結束第一子進程,第二子進程繼續(第二子進程不再是會話組長) x0dx0a4. 關閉打開的文件描述符 x0dx0a進程從創建它的父進程那裡繼承了打開的文件描述符。如不關閉,將會浪費系統資源,造成進程所在的文件系統無法卸下以及引起無法預料的錯誤。按如下方法關神鄭閉它們: x0dx0afor(i=0;i 關閉打開的文件描述符close(i);> x0dx0afor(i=0;i< NOFILE;++i)x0dx0a5. 改變當前工作目錄 x0dx0a進程活動時,其工作目錄所在的文件系統不能卸下。一般需要將工作目錄改變到根目錄。對於需要轉儲核心,寫運行日誌的進程將工作目錄改變到特定目錄如/tmpchdir("/") x0dx0a6. 重設文件創建掩模 x0dx0a進程從創建它的父進程那裡繼承了文件創建掩模。它可能修改守護進程所創建的文件的存取位。為防止這一點,將文件創建掩模清除:umask(0); x0dx0a7. 處理SIGCHLD信號 x0dx0a處理SIGCHLD信號並不是必須的。但對於某些進程,特別是伺服器進程往往在請求到來時生成子進程處理請求。如果父進程不等待子進程結束,子進程將成為 僵屍進程(zombie)從而佔用系統資源。如果父進程等待子進程結束,將增加父進程的負擔,影響伺服器進程的並發性能。在Linux下可以簡單地將 SIGCHLD信號的操作設為SIG_IGN。 x0dx0asignal(SIGCHLD,SIG_IGN); x0dx0a這樣,內核在子進程結束時不會產生僵屍進程。這一點與BSD4不同,BSD4下必須顯式等待子進程結束才能釋放僵屍進程。 x0dx0a三. 守護進程實例 x0dx0a守護進程實例包括兩部分:主程序test.c和初始化程序init.c。主程序每隔一分鍾向/tmp目錄中的日誌test.log報告運行狀態。初始化程序中的init_daemon函數負責生成守護進程。讀者可以利用init_daemon函數生成自己的守護進程。 x0dx0a1. init.c清單 x0dx0a#include < unistd.h > x0dx0a#include < signal.h > x0dx0a#include < sys/param.h > x0dx0a#include < sys/types.h > x0dx0a#include < sys/stat.h > x0dx0avoid init_daemon(void) x0dx0a{ x0dx0aint pid; x0dx0aint i; x0dx0ax0dx0aif(pid=fork()) x0dx0aexit(0);//是父進程,結束父進程 x0dx0aelse if(pid< 0) x0dx0aexit(1);//fork失敗,退出 x0dx0a//是第一子進程,後台繼續執行 x0dx0ax0dx0asetsid();//第一子進程成為新的會話組長和進程組長 x0dx0a//並與控制終端分離 x0dx0aif(pid=fork()) x0dx0aexit(0);//是第一子進程,結束第一子進程 x0dx0aelse if(pid< 0) x0dx0aexit(1);//fork失敗,退出 x0dx0a//是第二子進程,繼續 x0dx0a//第二子進程不再是會話組長 x0dx0ax0dx0afor(i=0;i< NOFILE;++i)//關閉打開的文件描述符 x0dx0aclose(i); x0dx0achdir("/tmp");//改變工作目錄到/tmp x0dx0aumask(0);//重設文件創建掩模 x0dx0areturn; x0dx0a} x0dx0a2. test.c清單 x0dx0a#include < stdio.h > x0dx0a#include < time.h > x0dx0avoid init_daemon(void);//守護進程初始化函數 x0dx0amain() x0dx0a{ x0dx0aFILE *fp; x0dx0atime_t t; x0dx0ainit_daemon();//初始化為Daemon x0dx0awhile(1)//每隔一分鍾向test.log報告運行狀態 x0dx0a{ x0dx0asleep(60);//睡眠一分鍾 x0dx0aif((fp=fopen("test.log","a")) >=0) x0dx0a{ x0dx0at=time(0); x0dx0afprintf(fp,"I'm here at %sn",asctime(localtime(&t)) ); x0dx0afclose(fp); x0dx0a} x0dx0a} x0dx0a} x0dx0a以上程序在RedHat Linux6.0下編譯通過。步驟如下: x0dx0a編譯:gcc _g _o test init.c test.c x0dx0a執行:./test x0dx0a查看進程:ps _ef x0dx0a從輸出可以發現test守護進程的各種特性滿足上面的要求。

閱讀全文

與文件系統svr4怎麼用相關的資料

熱點內容
maya粒子表達式教程 瀏覽:84
抖音小視頻如何掛app 瀏覽:283
cad怎麼設置替補文件 瀏覽:790
win10啟動文件是空的 瀏覽:397
jk網站有哪些 瀏覽:134
學編程和3d哪個更好 瀏覽:932
win10移動硬碟文件無法打開 瀏覽:385
文件名是亂碼還刪不掉 瀏覽:643
蘋果鍵盤怎麼打開任務管理器 瀏覽:437
手機桌面文件名字大全 瀏覽:334
tplink默認無線密碼是多少 瀏覽:33
ipaddgm文件 瀏覽:99
lua語言編程用哪個平台 瀏覽:272
政采雲如何導出pdf投標文件 瀏覽:529
php獲取postjson數據 瀏覽:551
javatimetask 瀏覽:16
編程的話要什麼證件 瀏覽:94
錢脈通微信多開 瀏覽:878
中學生學編程哪個培訓機構好 瀏覽:852
榮耀路由TV設置文件共享錯誤 瀏覽:525

友情鏈接