真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

linux命令解鎖文件夾 linux怎么解鎖文件

linux文件鎖定被使用

一、什么是文件鎖定

公司主營(yíng)業(yè)務(wù):成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出聞喜免費(fèi)做網(wǎng)站回饋大家。

對(duì)于鎖這個(gè)字,大家一定不會(huì)陌生,因?yàn)槲覀兩钪芯痛嬖谥罅康逆i,它們各個(gè)方面發(fā)揮著它的作用,現(xiàn)在世界中的鎖的功能都可歸結(jié)為一句話,就是阻止某些人做某些事,例如,門(mén)鎖就是阻止除了屋主之外的人進(jìn)入這個(gè)房子,你進(jìn)入不到這個(gè)房子,也就不能使用房子里面的東西。

而因?yàn)槌绦蚪?jīng)常需要共享數(shù)據(jù),而這通常又是通過(guò)文件來(lái)實(shí)現(xiàn)的,試想一個(gè)情況,A進(jìn)程正在對(duì)一個(gè)文件進(jìn)行寫(xiě)操作,而另一個(gè)程序B需要對(duì)同一個(gè)文件進(jìn)行讀操作,并以讀取到的數(shù)據(jù)作為自己程序運(yùn)行時(shí)所需要的數(shù)據(jù),這會(huì)發(fā)生什么情況呢?進(jìn)程B可能會(huì)讀到錯(cuò)亂的數(shù)據(jù),因?yàn)樗⒉恢懒硪粋€(gè)進(jìn)程A正在改寫(xiě)這個(gè)文件中的數(shù)據(jù)。

為了解決類似的問(wèn)題,就出現(xiàn)了文件鎖定,簡(jiǎn)單點(diǎn)來(lái)說(shuō),這是文件的一種安全的更新方式,當(dāng)一個(gè)程序正在對(duì)文件進(jìn)行寫(xiě)操作時(shí),文件就會(huì)進(jìn)入一種暫時(shí)狀態(tài),在這個(gè)狀態(tài)下,如果另一個(gè)程序嘗試讀這個(gè)文件,它就會(huì)自動(dòng)停下來(lái)等待這個(gè)狀態(tài)結(jié)束。Linux系統(tǒng)提供了很多特性來(lái)實(shí)現(xiàn)文件鎖定,其中最簡(jiǎn)單的方法就是以原子操作的方式創(chuàng)建鎖文件。

用回之前的例子就是,文件鎖就是當(dāng)文件在寫(xiě)的時(shí)候,阻止其他的需要寫(xiě)或者要讀文件的進(jìn)程來(lái)操作這個(gè)文件。

二、創(chuàng)建鎖文件

創(chuàng)建一個(gè)鎖文件是非常簡(jiǎn)單的,我們可以使用open系統(tǒng)調(diào)用來(lái)創(chuàng)建一個(gè)鎖文件,在調(diào)用open時(shí)oflags參數(shù)要增加參數(shù)O_CREAT和O_EXCL標(biāo)志,如file_desc = open("/tmp/LCK.test", O_RDWR|O_CREAT|O_EXCL, 0444);就可以創(chuàng)建一個(gè)鎖文件/tmp/LCK.test。O_CREAT|O_EXCL,可以確保調(diào)用者可以創(chuàng)建出文件,使用這個(gè)模式可以防止兩個(gè)程序同時(shí)創(chuàng)建同一個(gè)文件,如果文件(/tmp/LCK.test)已經(jīng)存在,則open調(diào)用就會(huì)失敗,返回-1。

如果一個(gè)程序在它執(zhí)行時(shí),只需要獨(dú)占某個(gè)資源一段很短的時(shí)間,這個(gè)時(shí)間段(或代碼區(qū))通常被叫做臨界區(qū),我們需要在進(jìn)入臨界區(qū)之前使用open系統(tǒng)調(diào)用創(chuàng)建鎖文件,然后在退出臨界區(qū)時(shí)用unlink系統(tǒng)調(diào)用刪除這個(gè)鎖文件。

注意:鎖文件只是充當(dāng)一個(gè)指示器的角色,程序間需要通過(guò)相互協(xié)作來(lái)使用它們,也就是說(shuō)鎖文件只是建議鎖,而不是強(qiáng)制鎖,并不會(huì)真正阻止你讀寫(xiě)文件中的數(shù)據(jù)。

可以看看下面的例子:源文件文件名為filelock1.c,代碼如下:

#include unistd.h #include stdlib.h #include stdio.h #include fcntl.h #include errno.h int main() { const char *lock_file = "/tmp/LCK.test1"; int n_fd = -1; int n_tries = 10; while(n_tries--) { //創(chuàng)建鎖文件 n_fd = open(lock_file, O_RDWR|O_CREAT|O_EXCL, 0444); if(n_fd == -1) { //創(chuàng)建失敗 printf("%d - Lock already present ", getpid()); sleep(2); } else { //創(chuàng)建成功 printf("%d - I have exclusive access ", getpid()); sleep(1); close(n_fd); //刪除鎖文件,釋放鎖 unlink(lock_file); sleep(2); } } return 0; }

同時(shí)運(yùn)行同一個(gè)程序的兩個(gè)實(shí)例,運(yùn)行結(jié)果為:

?

從運(yùn)行的結(jié)果可以看出兩個(gè)程序交叉地對(duì)對(duì)文件進(jìn)行鎖定,但是真實(shí)的操作卻是,每次調(diào)用open函數(shù)去檢查/tmp/LCK.test1這個(gè)文件是否存在,如果存在open調(diào)用就失敗,顯示有進(jìn)程已經(jīng)把這個(gè)文件鎖定了,如果這個(gè)文件不存在,就創(chuàng)建這個(gè)文件,并顯示許可信息。但是這種做法有一定的缺憾,我們可以看到文件/tmp/LCK.test1被創(chuàng)建了很多次,也被unlink刪除了很多次,也就是說(shuō)我們不能使用已經(jīng)事先有數(shù)據(jù)的文件作為這種鎖文件,因?yàn)槿绻募呀?jīng)存在,則open調(diào)用總是失敗。

給我的感覺(jué)是,這更像是一種對(duì)進(jìn)程工作的協(xié)調(diào)性安排,更像是二進(jìn)制信號(hào)量的作用,文件存在為0,不存在為1,而不是真正的文件鎖定。

三、區(qū)域鎖定

我們還有一個(gè)問(wèn)題,就是如果同一個(gè)文件有多個(gè)進(jìn)程需要對(duì)它進(jìn)行讀寫(xiě),而一個(gè)文件同一時(shí)間只能被一個(gè)進(jìn)程進(jìn)行寫(xiě)操作,但是多個(gè)進(jìn)程讀寫(xiě)的區(qū)域互不相關(guān),如果總是要等一個(gè)進(jìn)程寫(xiě)完其他的進(jìn)程才能對(duì)其進(jìn)行讀寫(xiě),效率又太低,那么是否可以讓多個(gè)進(jìn)程同時(shí)對(duì)文件進(jìn)行讀寫(xiě)以提高數(shù)據(jù)讀寫(xiě)的效率呢?

為了解決上面提到的問(wèn)題,和出現(xiàn)在第二點(diǎn)中的問(wèn)題,即不能把文件鎖定到指定的已存在的數(shù)據(jù)文件上的問(wèn)題,我們提出了一種新的解決方案,就是區(qū)域鎖定。

簡(jiǎn)單點(diǎn)來(lái)說(shuō),區(qū)域鎖定就是,文件中的某個(gè)部分被鎖定了,但其他程序可以訪問(wèn)這個(gè)文件中的其他部分。

然而,區(qū)域鎖定的創(chuàng)建和使用都比上面說(shuō)的文件鎖定復(fù)雜很多。

1、創(chuàng)建區(qū)域鎖定

在Linux上為實(shí)現(xiàn)這一功能,我們可以使用fcntl系統(tǒng)調(diào)用和lockf調(diào)用,但是下面以fcntl系統(tǒng)調(diào)用來(lái)講解區(qū)域鎖定的創(chuàng)建。

fctnl的函數(shù)原理為:

int fctnl(int fildes, int command, ...);

它對(duì)一個(gè)打開(kāi)的文件描述進(jìn)行操作,并能根據(jù)command參數(shù)的設(shè)置完成不同的任務(wù),它有三個(gè)可選的任務(wù):F_GETLK,F(xiàn)_SETLK,F_SETLKW,至于這三個(gè)參數(shù)的意義下面再詳述。而當(dāng)使用這些命令時(shí),fcntl的第三個(gè)參數(shù)必須是一個(gè)指向flock結(jié)構(gòu)的指針,所以在實(shí)際應(yīng)用中,fctnl的函數(shù)原型一般為:int fctnl(int fildes, int command, struct flock *flock_st);

2、flock結(jié)構(gòu)

準(zhǔn)確來(lái)說(shuō),flock結(jié)構(gòu)依賴具體的實(shí)現(xiàn),但是它至少包括下面的成員:

short l_type;文件鎖的類型,對(duì)應(yīng)于F_RDLCK(讀鎖,也叫共享鎖),F(xiàn)_UNLCK(解鎖,也叫清除鎖),F(xiàn)_WRLCK(寫(xiě)鎖,也叫獨(dú)占鎖)中的一個(gè)。

short l_whence;從文件的哪個(gè)相對(duì)位置開(kāi)始計(jì)算,對(duì)應(yīng)于SEEK_SET(文件頭),SEEK_CUR(當(dāng)前位置),SEEK_END(文件尾)中的一個(gè)。

off_t l_start;從l_whence開(kāi)始的第l_start個(gè)字節(jié)開(kāi)始計(jì)算。

off_t l_len;鎖定的區(qū)域的長(zhǎng)度。

pid_t l_pid;用來(lái)記錄參持有鎖的進(jìn)程。

成員l_whence、l_start和l_len定義了一個(gè)文件中的一個(gè)區(qū)域,即一個(gè)連續(xù)的字節(jié)集合,例如:

struct flock region;

region.l_whence = SEEK_SET;

region.l_start = 10;

region.l_len = 20;

則表示fcntl函數(shù)操作鎖定的區(qū)域?yàn)槲募^開(kāi)始的第10到29個(gè)字節(jié)之間的這20個(gè)字節(jié)。

3、文件鎖的類型

從上面的flock的成員l_type的取值我們可以知道,文件鎖的類型主要有三種,這里對(duì)他們進(jìn)行詳細(xì)的解說(shuō)。

F_RDLCK:

從它的名字我們就可以知道,它是一個(gè)讀鎖,也叫共享鎖。許多不同的進(jìn)程可以擁有文件同一(或重疊)區(qū)域上的讀(共享)鎖。而且只要任一進(jìn)程擁有一把讀(共享)鎖,那么就沒(méi)有進(jìn)程可以再獲得該區(qū)域上的寫(xiě)(獨(dú)占)鎖。為了獲得一把共享鎖,文件必須以“讀”或“讀/寫(xiě)”方式打開(kāi)。

簡(jiǎn)單點(diǎn)來(lái)說(shuō)就是,當(dāng)一個(gè)進(jìn)程在讀文件中的數(shù)據(jù)時(shí),文件中的數(shù)據(jù)不能被改變或改寫(xiě),這是為了防止數(shù)據(jù)被改變而使讀數(shù)據(jù)的程序讀取到錯(cuò)亂的數(shù)據(jù),而文件中的同一個(gè)區(qū)域能被多個(gè)進(jìn)程同時(shí)讀取,這是容易理解的,因?yàn)樽x不會(huì)破壞數(shù)據(jù),或者說(shuō)讀操作不會(huì)改變文件的數(shù)據(jù)。

F_WRLCK:

從它的名字,我們就可以知道,它是一個(gè)寫(xiě)鎖,也叫獨(dú)占鎖。只有一個(gè)進(jìn)程可以在文件中的任一特定區(qū)域擁有一把寫(xiě)(獨(dú)占)鎖。一旦一個(gè)進(jìn)程擁有了這樣一把鎖,任何其他進(jìn)程都無(wú)法在該區(qū)域上獲得任何類型的鎖。為了獲得一把寫(xiě)(獨(dú)占)鎖,文件也必須以“讀”或“讀/寫(xiě)”方式打開(kāi)。

簡(jiǎn)單點(diǎn)來(lái)說(shuō),就是一個(gè)文件同一區(qū)域(或重疊)區(qū)域進(jìn)在同一時(shí)間,只能有一個(gè)進(jìn)程能對(duì)其進(jìn)行寫(xiě)操作,并且在寫(xiě)操作進(jìn)行期間,其他的進(jìn)程不能對(duì)該區(qū)域進(jìn)行讀取數(shù)據(jù)。這個(gè)要求是顯然易見(jiàn)的,因?yàn)槿绻麅蓚€(gè)進(jìn)程同時(shí)對(duì)一個(gè)文件進(jìn)行寫(xiě)操作,就會(huì)使文件的內(nèi)容錯(cuò)亂起來(lái),而由于寫(xiě)時(shí)會(huì)改變文件中的數(shù)據(jù),所以它也不允許其他進(jìn)程對(duì)文件的數(shù)據(jù)進(jìn)行讀取和刪除文件等操作。

F_UNLCK:

從它的名字就可以知道,它用于把一個(gè)鎖定的區(qū)域解鎖。

4、不同的command的意義

在前面說(shuō)到fcntl函數(shù)的command參數(shù)時(shí),說(shuō)了三個(gè)命令選項(xiàng),這里將對(duì)它們進(jìn)行詳細(xì)的解說(shuō)。

F_GETLK命令,它用于獲取fildes(fcntl的第一個(gè)參數(shù))打開(kāi)的文件的鎖信息,它不會(huì)嘗試去鎖定文件,調(diào)用進(jìn)程可以把自己想創(chuàng)建的鎖類型信息傳遞給fcntl,函數(shù)調(diào)用就會(huì)返回將會(huì)阻止獲取鎖的任何信息,即它可以測(cè)試你想創(chuàng)建的鎖是否能成功被創(chuàng)建。fcntl調(diào)用成功時(shí),返回非-1,如果鎖請(qǐng)求可以成功執(zhí)行,flock結(jié)構(gòu)將保持不變,如果鎖請(qǐng)求被阻止,fcntl會(huì)用相關(guān)的信息覆蓋flock結(jié)構(gòu)。失敗時(shí)返回-1。

所以,如果調(diào)用成功,調(diào)用程序則可以通過(guò)檢查flock結(jié)構(gòu)的內(nèi)容來(lái)判斷其是否被修改過(guò),來(lái)檢查鎖請(qǐng)求能否被成功執(zhí)行,而又因?yàn)閘_pid的值會(huì)被設(shè)置成擁有鎖的進(jìn)程的標(biāo)識(shí)符,所以大多數(shù)情況下,可以通過(guò)檢查這個(gè)字段是否發(fā)生變化來(lái)判斷flock結(jié)構(gòu)是否被修改過(guò)。

使用F_GETLK的fcntl函數(shù)調(diào)用后會(huì)立即返回。

舉個(gè)例子來(lái)說(shuō),例如,有一個(gè)flock結(jié)構(gòu)的變量,flock_st,flock_st.l_pid = -1,文件的第10~29個(gè)字節(jié)已經(jīng)存在一個(gè)讀鎖,文件的第40~49個(gè)字節(jié)中已經(jīng)存在一個(gè)寫(xiě)鎖,則調(diào)用fcntl時(shí),如果用F_GETLK命令,來(lái)測(cè)試在第10~29個(gè)字節(jié)中是否可以創(chuàng)建一個(gè)讀鎖,因?yàn)檫@個(gè)鎖可以被創(chuàng)建,所以,fcntl返回非-1,同時(shí),flock結(jié)構(gòu)的內(nèi)容也不會(huì)改變,flock_st.l_pid = -1。而如果我們測(cè)試第40~49個(gè)字節(jié)中是否可以創(chuàng)建一個(gè)寫(xiě)鎖時(shí),由于這個(gè)區(qū)域已經(jīng)存在一個(gè)寫(xiě)鎖,測(cè)試失敗,但是fcntl還是會(huì)返回非-1,只是flock結(jié)構(gòu)會(huì)被這個(gè)區(qū)域相關(guān)的鎖的信息覆蓋了,flock_st.l_pid為擁有這個(gè)寫(xiě)鎖的進(jìn)程的進(jìn)程標(biāo)識(shí)符。

F_SETLK命令,這個(gè)命令試圖對(duì)fildes指向的文件的某個(gè)區(qū)域加鎖或解鎖,它的功能根據(jù)flock結(jié)構(gòu)的l_type的值而定。而對(duì)于這個(gè)命令來(lái)說(shuō),flock結(jié)構(gòu)的l_pid字段是沒(méi)有意義的。如果加鎖成功,返回非-1,如果失敗,則返回-1。使用F_SETLK的fcntl函數(shù)調(diào)用后會(huì)立即返回。

F_SETLKW命令,這個(gè)命令與前面的F_SETLK,命令作用相同,但不同的是,它在無(wú)法獲取鎖時(shí),即測(cè)試不能加鎖時(shí),會(huì)一直等待直到可以被加鎖為止。

5、例子

看了這么多的說(shuō)明,可能你已經(jīng)很亂了,就用下面的例子來(lái)整清你的思想吧。

源文件名為filelock2.c,用于創(chuàng)建數(shù)據(jù)文件,并將文件區(qū)域加鎖,代碼如下:

#include unistd.h #include stdlib.h #include stdio.h #include fcntl.h int main() { const char *test_file = "test_lock.txt"; int file_desc = -1; int byte_count = 0; char *byte_to_write = "A"; struct flock region_1; struct flock region_2; int res = 0; //打開(kāi)一個(gè)文件描述符 file_desc = open(test_file, O_RDWR|O_CREAT, 0666); if(!file_desc) { fprintf(stderr, "Unable to open %s for read/write ", test_file); exit(EXIT_FAILURE); } //給文件添加100個(gè)‘A’字符的數(shù)據(jù) for(byte_count = 0; byte_count 100; ++byte_count) { write(file_desc, byte_to_write, 1); } //在文件的第10~29字節(jié)設(shè)置讀鎖(共享鎖) region_1.l_type = F_RDLCK; region_1.l_whence = SEEK_SET; region_1.l_start = 10; region_1.l_len = 20; //在文件的40~49字節(jié)設(shè)置寫(xiě)鎖(獨(dú)占鎖) region_2.l_type = F_WRLCK; region_2.l_whence = SEEK_SET; region_2.l_start = 40; region_2.l_len = 10; printf("Process %d locking file ", getpid()); //鎖定文件 res = fcntl(file_desc, F_SETLK, ?ion_1); if(res == -1) { fprintf(stderr, "Failed to lock region 1 "); } res = fcntl(file_desc, F_SETLK, ?ion_2); if(res == -1) { fprintf(stderr, "Failed to lock region 2 "); } //讓程序休眠一分鐘,用于測(cè)試 sleep(60); printf("Process %d closing file ", getpid()); close(file_desc); exit(EXIT_SUCCESS); }

下面的源文件filelock3.c用于測(cè)試上一個(gè)文件設(shè)置的鎖,測(cè)試可否對(duì)兩個(gè)區(qū)域都加上一個(gè)讀鎖,代碼如下:

#include unistd.h #include stdlib.h #include stdio.h #include fcntl.h int main() { const char *test_file = "test_lock.txt"; int file_desc = -1; int byte_count = 0; char *byte_to_write = "A"; struct flock region_1; struct flock region_2; int res = 0; //打開(kāi)數(shù)據(jù)文件 file_desc = open(test_file, O_RDWR|O_CREAT, 0666); if(!file_desc) { fprintf(stderr, "Unable to open %s for read/write ", test_file); exit(EXIT_FAILURE); } //設(shè)置區(qū)域1的鎖類型 struct flock region_test1; region_test1.l_type = F_RDLCK; region_test1.l_whence = SEEK_SET; region_test1.l_start = 10; region_test1.l_len = 20; region_test1.l_pid = -1; //設(shè)置區(qū)域2的鎖類型 struct flock region_test2; region_test2.l_type = F_RDLCK; region_test2.l_whence = SEEK_SET; region_test2.l_start = 40; region_test2.l_len = 10; region_test2.l_pid = -1; //

三、解空鎖問(wèn)題

如果我要給在本進(jìn)程中沒(méi)有加鎖的區(qū)域解鎖會(huì)發(fā)生什么事情呢?而如果這個(gè)區(qū)域中其他的進(jìn)程有對(duì)其進(jìn)行加鎖又會(huì)發(fā)生什么情況呢?

如果一個(gè)進(jìn)程實(shí)際并未對(duì)一個(gè)區(qū)域進(jìn)行鎖定,而調(diào)用解鎖操作也會(huì)成功,但是它并不能解其他的進(jìn)程加在同一區(qū)域上的鎖。也可以說(shuō)解鎖請(qǐng)求最終的結(jié)果取決于這個(gè)進(jìn)程在文件中設(shè)置的任何鎖,沒(méi)有加鎖,但對(duì)其進(jìn)行解鎖得到的還是沒(méi)有加鎖的狀態(tài)。

linux文件只讀模式怎么解除

解除Linux文件只讀模式的方法有以下幾種:

1. 使用chmod命令:chmod +w 文件名

2. 使用vim編輯器:在vim編輯器中輸入: set w

3. 使用chattr命令:chattr -i 文件名

4. 使用mount命令:mount -o remount, rw 文件所在的目錄

操作系統(tǒng),linux中 lockf(1,1,0);和 lockf(1,0,0); 是什么作用

ockf(fd,1,0)是給fd文件上鎖,lockf(fd,0,0)是解鎖,配合使用,實(shí)現(xiàn)進(jìn)程的互斥。

頭文件

#include sys/file.h

函數(shù):

int lockf(int fd, int cmd, off_t len);

fd -- 文件id.

fcntl(2)的接口(inteface)函數(shù)

返回1表示調(diào)用lockf成功.

lockf用于鎖定或打開(kāi)鎖定一個(gè)共享文件.

操作有:

F_LOCK(鎖定),F_TLOCK,F_ULOCK(打開(kāi)鎖定),F_TEST

擴(kuò)展資料:

注意事項(xiàng)

lockf()函數(shù)允許將文件區(qū)域用作信號(hào)量(監(jiān)視鎖),或用于控制對(duì)鎖定進(jìn)程的訪問(wèn)(強(qiáng)制模式記錄鎖定)。試圖訪問(wèn)已鎖定資源的其他進(jìn)程將返回錯(cuò)誤或進(jìn)入休眠狀態(tài),直到資源解除鎖定為止。當(dāng)關(guān)閉文件時(shí),將釋放進(jìn)程的所有鎖定,即使進(jìn)程仍然有打開(kāi)的文件。當(dāng)進(jìn)程終止時(shí),將釋放進(jìn)程保留的所有鎖定。

函數(shù)聲明:

/* 'lockf' is a simpler interface to the locking facilities of 'fcntl'. LEN is always relative to the current file position. The CMD argument is one of the following. This function is a cancellation point and therefore not marked with __THROW. */

#include unistd.h

int lockf(int fd, int cmd, off_t len);

linux文件被鎖上了為什么不能解鎖

你只是設(shè)置了 /etc/apache2 的權(quán)限, 你還應(yīng)該設(shè)置子文件和目錄的權(quán)限

sudo chmod -R 777 /etc/apache2

linux怎么解鎖文件夾

是權(quán)限的問(wèn)題。右鍵看文件夾的屬性與權(quán)限,看能否更改權(quán)限為可讀寫(xiě)。 如果是自己的用戶權(quán)限不足以更改該文件夾的權(quán)限,就需要使用root用戶來(lái)更改了。

《Linux下部分常用指令筆記》

一、創(chuàng)建linux維護(hù)用戶

登錄root用戶

創(chuàng)建新用戶

useradd 新用戶名

設(shè)置用戶密碼

passwd 新用戶密碼

二、安裝jdk和配置環(huán)境變量

建議在root用戶下直接安裝jdk,并直接配置環(huán)境變量,同時(shí)給非root用戶設(shè)置讀和執(zhí)行權(quán)限

解壓包

tar xvf jdk包名.tar

配置全局變量

編輯/etc/profile文件

vi /etc/profile

按I鍵,切換成編輯模式。

在文件未加入一下配置

export JAVA_HOME=jdk的解壓文件目錄

export JRE_HOME=jdk的解壓文件目錄/jre

export?CLASSPATH=.:${JAVA_HOME}/lib:${?JRE_HOME}/lib:$CLASSPATH

export JAVA_PATH=${JAVA_HOME}/bin:${?JRE_HOME}/bin

export PATH=$PATH:${JAVA_PATH}

保存并退出

Esc ??

:wq

重載配置文件使其生效

source /etc/profile

檢查是否安裝成功

Javac

Java version

權(quán)限修改

讀4寫(xiě)2執(zhí)行1,順序所有者、組成員、其他用戶

Chomd ?755 ?jdk的解壓文件目錄

三、安裝tomcat

安裝tomcat和放入war包使用非root的維護(hù)用戶

如果使用root安裝的話記得設(shè)置權(quán)限。( chomd -r 外層文件目錄 )

su - 用戶名

1、解壓包

tar ?xvf ?tomcat包名.tar

2、將war包放入tomcat/webapps目錄下

3、Tomcat啟動(dòng)服務(wù)和停止服務(wù)

查看進(jìn)程

ps -ef | grep java

啟動(dòng)應(yīng)用

Tomcat bin目錄下.startup.sh

停止應(yīng)用

建議使用

Kill -9 進(jìn)程號(hào)

注:解壓出應(yīng)用文件后,注意配置信息的修改

四、IBM MQ部署 (7.5之后的版本)

(以下是使用9.0版本的正確部署命令)

一、 卸載舊版本IBM MQ (可選)

因?yàn)椴渴瓠h(huán)境沒(méi)有安裝過(guò)mq,卸載這部分命令我沒(méi)有親自測(cè)試過(guò)

設(shè)置環(huán)境

以用戶身份登錄到組mqm,找到mq的安裝位置 /opt/mqm

source ./setmqenv -s

查看隊(duì)列管理器的狀態(tài)

dspmq -o installation

停止與要卸載的安裝關(guān)聯(lián)的所有正在運(yùn)行的隊(duì)列管理器

endmqm SXRECV

停止與隊(duì)列管理器關(guān)聯(lián)的所有偵聽(tīng)器。

endmqlsr -m SXRECV

查看系統(tǒng)上當(dāng)前安裝的軟件包(組件)

sudo rpm -qa | grep MQSeries

列出軟件包并一次性卸載

sudo rpm -qa | grep MQSeries | xargs rpm -ev

再將對(duì)應(yīng)的用戶及安裝目錄給刪除

rm -rf /opt/mqm

userdel -r mqm

檢查MQ license

license文件在安裝目錄中 /opt/mqm/lib 可以找到

amqtcert.lic - is a trial license

amqbcert.lic - is a beta license

amqpcert.lic - is the production license

——————————————————————————————————————

二、安裝新版本ibm mq

解壓,解壓文件都在MQServer中

tar –xzvf IBM_MQ_9.1.5_LINUX_X86-64.tar.gz

進(jìn)入MQServer文件夾中:

cd MQServer/

運(yùn)行MQ許可證程序

./mqlicense.sh

安裝WebSphere MQ for Linux服務(wù)器(Runtime、SDK 和 Server 軟件包):

rpm -U MQSeriesRuntime-9.1.5-0.x86_64.rpm

rpm -U MQSeriesSDK-9.1.5-0.x86_64.rpm

rpm -U MQSeriesServer-9.1.5-0.x86_64.rpm

安裝WebSphere MQ for Linux客戶機(jī):

rpm -U MQSeriesClient-9.0.0-0.x86_64.rpm

安裝WebSphere MQ樣本程序:

rpm -U MQSeriesSamples-9.0.0-0.x86_64.rpm

創(chuàng)建組和用戶

安裝過(guò)程創(chuàng)建了一個(gè)名為mqm的用戶和一個(gè)同樣名為 mqm 的組。設(shè)置一個(gè)密碼來(lái)解鎖。

passwd mqm

——————————————————————————————————————

三、 配置

(這部分隊(duì)列管理器、通道、隊(duì)列等根據(jù)實(shí)際情況自行配置)

切換用戶:

su mqm

創(chuàng)建隊(duì)列管理器

使用crtmqm命令來(lái)創(chuàng)建一個(gè)名為 SXRECV

的隊(duì)列管理器。我們把它作為缺省隊(duì)列,并且將不在創(chuàng)建時(shí)指定死信隊(duì)列。然后使用strmqm命令啟動(dòng)隊(duì)列管理器。

crtmqm -q ?SXRECV

strmqm ?SXRECV

——————

如果執(zhí)行crtmqm命令時(shí)提示

-bash-3.2$ crtmqm

-bash: crtmqm: command not found

find / -name crtmqm

則需要配置mqm用戶的環(huán)境變量,編輯如下文件,并添加下面的內(nèi)容,如下:

第一種方法:相對(duì)第二種較安全僅對(duì)mqm用戶有效

方法一:

(1) -bash-3.2$ vi /var/mqm/.bash_profile --有可能會(huì)在文件夾下看不到這個(gè)文件,通過(guò)編輯即可看到

PATH=$PATH:/opt/mqm/samp/bin:/opt/mqm/bin:bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin

(2)執(zhí)行“.”命令,使這個(gè)文件生效

-bash-3.2$ source ?.bash_profile

(3)再次嘗試實(shí)行crtmqm或是dspmqm命令,即可發(fā)現(xiàn)已經(jīng)生效。

方法二:

( 1)

su ?root

[if !supportLists](2)[endif]

vim /etc/profile

[if !supportLists](3)[endif] 在最后面加上:

PATH=$PATH:/opt/mqm/samp/bin:/opt/mqm/bin:bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/bin

( 4)關(guān)閉遠(yuǎn)程終端重新打開(kāi),無(wú)需重啟服務(wù)器

——————

運(yùn)行隊(duì)列管理器

runmqsc SXRECV

創(chuàng)建通道和隊(duì)列

DEFINE QLOCAL (XYDATA) REPLACE USAGE (NORMAL) DEFPSIST (YES) MAXDEPTH (300000) DESCR('興業(yè)銀行')

DEFINE QLOCAL (XYTRANS) REPLACE USAGE (XMITQ) DEFPSIST (YES) MAXDEPTH (300000) DESCR('興業(yè)銀行')

DEFINE QREMOTE (XYACK) REPLACE DEFPSIST (YES) RQMNAME (SXSEND) ?RNAME (XYACK) XMITQ (XYTRANS) DESCR('XXXX')

DEFINE CHANNEL (XYDATA) CHLTYPE (RCVR) TRPTYPE (TCP) REPLACE DESCR('XXXX')

DEFINE CHANNEL (XYACK) CHLTYPE (SDR) CONNAME ('166.1.1.8(2214)') XMITQ (XYTRANS) TRPTYPE (TCP) DISCINT (0) CONVERT (NO) SHORTRTY (30) SHORTTMR (10) LONGRTY (999999999) LONGTMR (20) REPLACE DESCR('XXXX')

DEFINE CHANNEL (SVRCONN) CHLTYPE (SVRCONN) MCAUSER('mqm')

創(chuàng)建監(jiān)聽(tīng)

DEFINE LISTENER (RECLISTENER) TRPTYPE (TCP) CONTROL(QMGR) PORT (2214)

啟動(dòng)監(jiān)聽(tīng)

start LISTENER(RECLISTENER)

啟動(dòng)通道

start channel(SVRCONN)

start channel(XYDATA)

start channel(XYACK)

———————————————————————————————————————————————————

四、2035錯(cuò)誤碼 說(shuō)明

如果程序連接mq報(bào)錯(cuò)2035,則需要對(duì)權(quán)限認(rèn)證做設(shè)置,則進(jìn)行以此操作

1、

ALTER QMGR CHLAUTH(DISABLED)

2、

ALTER CHL(通道名) CHLTYPE(SVRCONN) MCAUSER('mqm')

3、

ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL)

或者直接將連接認(rèn)證選項(xiàng)置為空,將其完全關(guān)閉,指令如下:

ALTER QMGR CONNAUTH('')

在執(zhí)行完上述兩條命令中的任一條后,都需要刷新連接認(rèn)證的緩存,指令如下:

REFRESH SECURITY TYPE(CONNAUTH)

五、mq操作命令

一、MQ的啟動(dòng)與停止

1、MQ的啟動(dòng)

strmqm QMgrName

如果啟動(dòng)默認(rèn)隊(duì)列管理器,strmqm后可以忽略隊(duì)列管理器名稱。

2、MQ的關(guān)閉

endmqm?-i?QMgrName

停止mq

二、MQ運(yùn)行狀態(tài)查看與常用操作

1、 查看隊(duì)列管理器運(yùn)行狀態(tài)

su mqm

執(zhí)行如下命令檢查隊(duì)列管理器運(yùn)行狀態(tài):dspmq顯示結(jié)果中QMNAME表示MQ隊(duì)列管理器的名稱,STATUS表示當(dāng)前運(yùn)行狀態(tài)。運(yùn)行狀態(tài)有如下幾種:Starting正在啟動(dòng)Running正在運(yùn)行Ending正在停止Ended normally已經(jīng)正常終止Ended immediately已經(jīng)立即終止Ended preemtively已經(jīng)強(qiáng)制終止Ended unexpectively異常終止

注意:停止MQ后必須使用dspmq命令進(jìn)行狀態(tài)檢查

2、查看通道運(yùn)行狀態(tài)與啟停通道

runmqsc

dis chl(*);查看所有通道定義

dis chs(*);查看所有通道狀態(tài),如果沒(méi)有查詢到通道狀態(tài),或報(bào)錯(cuò)AMQ8420: Channel Status not found,請(qǐng)啟動(dòng)通道

dis chs(ChannelName); 查看通道ChannelName的狀態(tài)

通道狀態(tài)有如下幾種:

STARTING正在啟動(dòng)BINDING正在綁定INITIALIZING正在初始化RUNNING正常STOPPING?正在停止RETRYING重試PAUSED等待STOPPED已停止REQUESTING請(qǐng)求

start?chl(ChannelName);啟動(dòng)通道

stop?chl(ChannelName);停止通道

* 重置通道

reset channel(ChannelName);?重置通道序號(hào)。當(dāng)本地與其他MQ隊(duì)列管理器的通道無(wú)法正常啟動(dòng)的情況,檢查日志發(fā)現(xiàn)是通道序號(hào)不一致,此時(shí)就需要先停止發(fā)送方通道,清空隊(duì)列深度并在發(fā)送方和接收方進(jìn)行通道計(jì)數(shù)的重置,重置后啟動(dòng)通道即可恢復(fù)通訊。

注意:重置成功mq序列號(hào)一般相同或相差1

3、查看通道監(jiān)聽(tīng)狀態(tài)與啟停監(jiān)聽(tīng)

runmqsc

dis listner(*);查看通道監(jiān)聽(tīng)定義

dis lsstatu(listnerName);查看監(jiān)聽(tīng)狀態(tài)

start?lstr(listnerName); 啟動(dòng)監(jiān)聽(tīng)

stop?lstr(listnerName); 停止監(jiān)聽(tīng)?

4、查看隊(duì)列深度

runmqsc

dis q(*);查看所有各類隊(duì)列的屬性

dis?qlocal(QName);查看所有本地隊(duì)列的屬性

隊(duì)列深度屬性為:CURDEPTH

查看隊(duì)列深度display ql('隊(duì)列名') ?curdepth

*清空隊(duì)列深度

清空隊(duì)列深度

clear ql(‘隊(duì)列名’)

三、MQ發(fā)送和接收消息

su mqm

發(fā)送消息

amqsput ?隊(duì)列名 ?隊(duì)列管理器

獲取消息

amqsget ?隊(duì)列名 ?隊(duì)列管理器

可通過(guò)配合查看隊(duì)列深度命令,完成mq的聯(lián)調(diào)

六、其他維護(hù)中常用linux命令

1、測(cè)試端口連接

telnet ip port

2、查看已啟動(dòng)的端口

netstat -an | grep 端口號(hào)

3、查看應(yīng)用進(jìn)程

ps -ef |grep java

4、修改權(quán)限

chomd ?XXX(對(duì)應(yīng)的權(quán)限) ?文件目錄

5、修改文件或目錄下所有文件所有者和組

Chomd -R 用戶名:組名 ?文件目錄

6、查看目錄內(nèi)容

ls 或者ls -l (簡(jiǎn)寫(xiě)ll)

7、查看文件輸出

cat 目錄/文件名

或者

Vi 目錄/文件名 按i可進(jìn)入編輯

按 G 到文檔末尾

按 gg 到文件首行

不保存退出

Esc ??:q!

保存退出

Esc ??:wq

vi 進(jìn)入文檔文檔后查找關(guān)鍵字

Esc 進(jìn)入命令行

/關(guān)鍵字

按n向下繼續(xù)查找

按N向上繼續(xù)查找

8、殺進(jìn)程

Kill -9 進(jìn)程號(hào)

9、復(fù)制

cp -r 源目錄 ?目標(biāo)目錄

10、移動(dòng)

mv ?-i 源文件或目錄 目標(biāo)文件或目錄

11、刪除

rm -R 文件目錄

12、 切換工作目錄

cd ?相對(duì)路徑或絕對(duì)路徑

~也表示為 home 目錄 的意思, . 則是表示目前所在的目錄, .. 則表示目前目錄位置的上一層目錄。


本文標(biāo)題:linux命令解鎖文件夾 linux怎么解鎖文件
網(wǎng)頁(yè)地址:http://weahome.cn/article/hpejdj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部