1. unix中,默認的共享文件系統在哪個位置
共享文件夾一般在我的文檔,我的做法是現在別的盤建立一個空的文件夾,然後再桌面點擊我的文檔點右鍵,選擇屬性,出現目標文件夾標簽,在目標文件夾位置下面選擇「查找目標」,找到你新建的文件夾,然後點擊「移動」即可。整個我的文檔就改變路徑了,以後另存就不在佔用C盤空間了。而且可以把原來文件夾內容刪除。
2. 無法進入UNIX的共享硬碟如何解決
關機過無法打開的話,說明是無法建立連接了。有沒有提示?是找不到 Unix 伺服器地址還是別的?確認下 DNS 是否良好。
3. unix系統是如何實現文件共享的
unix一般用下面幾種方式實現文件共享:
1、nfs,可以mount遠程主機export的nfs文件系統,當本地文件系統一樣用。
2、samba,可以mount遠程主機的samba共享目錄,和操作本地文件目錄一樣用,這種方式可以和windows之間共享文件目錄。
3、ftp/tftp,伺服器提供共享文件目錄,客戶端用ftp/tftp/wget工具瀏覽下載文件,這種方式主要是提供文件傳輸方法。
4、其它的遠程拷貝和同步工具如:rcp,rsync,scp等。
4. HP-UNIX,通過Samba服務設置共享,user可以普通共享,share可以匿名訪問共享
指定共享名稱,然後進行許可權設置,具體看下smb.conf 配置文件
5. unix是共享軟體嗎
unix是共享軟體。
Unix是20世紀70年代初出現的一個操作系統除了作為網路操作系統之外還可以作為單機操作系統使用,Unix作為一種開發平台和台式操作系統獲得了廣泛使用主要用於工程應用和科學計算等領域。
簡介
UNIX系統是一個分時系統最早的UNIX系統於1970年問世,此前只有面向批處理作業的操作系統這樣的系統對於需要立即得到響應的用戶來說是太慢了。
系統在操作系統的發展過程中都產生過重大影響在此基礎上在對當時現有的技術進行精選提煉和發展的過程中,KThompson於1969年在小型計算機上開發UNIX系統後於1970年投入運行。
UNIX系統的用戶日益增多應用范圍也日益擴大,無論在各種類型的微型機小型機還是在中大型計算機以及在計算機工作站甚至個人計算機上很多都已配有UNIX系統。
6. 關於unix的共享內存問題ftok函數參數
ID是子序號。
在一般的UNIX實現中,是將文件的索引節點號取出,前面加上子序號得到函數ftok的返回值。
如指定文件的索引節點號為65538,換算成16進制為0x010002,而你指定的ID值為38,換算成16進制為0x26,則最後的key_t返回值為0x26010002。
查詢文件索引節點號的方法是: ls
-i
7. 如何在unix環境下實現共享內存
mmap()範例
下面將給出使用mmap()的兩個範例:範例1給出兩個進程通過映射普通文件實現共享內存通信;範例2給出父子進程通過匿名映射實現共享內存。系統調用mmap()有許多有趣的地方,下面是通過mmap()映射普通文件實現進程間的通信的範例,我們通過該範例來說明mmap()實現共享內存的特點及注意事項。
範例1:兩個進程通過映射普通文件實現共享內存通信
範例1包含兩個子程序:map_normalfile1.c及map_normalfile2.c。編譯兩個程序,可執行文件分別為map_normalfile1及map_normalfile2。兩個程序通過命令行參數指定同一個文件來實現共享內存方式的進程間通信。map_normalfile2試圖打開命令行參數指定的一個普通文件,把該文件映射到進程的地址空間,並對映射後的地址空間進行寫操作。map_normalfile1把命令行參數指定的文件映射到進程地址空間,然後對映射後的地址空間執行讀操作。這樣,兩個進程通過命令行參數指定同一個文件來實現共享內存方式的進程間通信。
下面是兩個程序代碼:
/*-------------map_normalfile1.c-----------*/
#include <sys/mman.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
typedef struct{
char name[4];
int age;
}people;
main(int argc, char** argv) // map a normal file as shared mem:
{
int fd,i;
people *p_map;
char temp;
fd=open(argv[1],O_CREAT|O_RDWR|O_TRUNC,00777);
lseek(fd,sizeof(people)*5-1,SEEK_SET);
write(fd,"",1);
p_map = (people*) mmap( NULL,sizeof(people)*10,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0 );
close( fd );
temp = 'a';
for(i=0; i<10; i++)
{
temp += 1;
memcpy( ( *(p_map+i) ).name, &temp,2 );
( *(p_map+i) ).age = 20+i;
}
printf(" initialize over \n ");
sleep(10);
munmap( p_map, sizeof(people)*10 );
printf( "umap ok \n" );
}
/*-------------map_normalfile2.c-----------*/
#include <sys/mman.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
typedef struct{
char name[4];
int age;
}people;
main(int argc, char** argv) // map a normal file as shared mem:
{
int fd,i;
people *p_map;
fd=open( argv[1],O_CREAT|O_RDWR,00777 );
p_map = (people*)mmap(NULL,sizeof(people)*10,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
for(i = 0;i<10;i++)
{
printf( "name: %s age %d;\n",(*(p_map+i)).name, (*(p_map+i)).age );
}
munmap( p_map,sizeof(people)*10 );
}
map_normalfile1.c首先定義了一個people數據結構,(在這里採用數據結構的方式是因為,共享內存區的數據往往是有固定格式的,這由通信的各個進程決定,採用結構的方式有普遍代表性)。map_normfile1首先打開或創建一個文件,並把文件的長度設置為5個people結構大小。然後從mmap()的返回地址開始,設置了10個people結構。然後,進程睡眠10秒鍾,等待其他進程映射同一個文件,最後解除映射。
map_normfile2.c只是簡單的映射一個文件,並以people數據結構的格式從mmap()返回的地址處讀取10個people結構,並輸出讀取的值,然後解除映射。
分別把兩個程序編譯成可執行文件map_normalfile1和map_normalfile2後,在一個終端上先運行./map_normalfile2 /tmp/test_shm,程序輸出結果如下:
initialize over
umap ok
在map_normalfile1輸出initialize over 之後,輸出umap ok之前,在另一個終端上運行map_normalfile2 /tmp/test_shm,將會產生如下輸出(為了節省空間,輸出結果為稍作整理後的結果):
name: b age 20; name: c age 21; name: d age 22; name: e age 23; name: f age 24;
name: g age 25; name: h age 26; name: I age 27; name: j age 28; name: k age 29;
在map_normalfile1 輸出umap ok後,運行map_normalfile2則輸出如下結果:
name: b age 20; name: c age 21; name: d age 22; name: e age 23; name: f age 24;
name: age 0; name: age 0; name: age 0; name: age 0; name: age 0;
從程序的運行結果中可以得出的結論
1、 最終被映射文件的內容的長度不會超過文件本身的初始大小,即映射不能改變文件的大小;
2、 可以用於進程通信的有效地址空間大小大體上受限於被映射文件的大小,但不完全受限於文件大小。打開文件被截短為5個people結構大小,而在map_normalfile1中初始化了10個people數據結構,在恰當時候(map_normalfile1輸出initialize over 之後,輸出umap ok之前)調用map_normalfile2會發現map_normalfile2將輸出全部10個people結構的值,後面將給出詳細討論。
註:在linux中,內存的保護是以頁為基本單位的,即使被映射文件只有一個位元組大小,內核也會為映射分配一個頁面大小的內存。當被映射文件小於一個頁面大小時,進程可以對從mmap()返回地址開始的一個頁面大小進行訪問,而不會出錯;但是,如果對一個頁面以外的地址空間進行訪問,則導致錯誤發生,後面將進一步描述。因此,可用於進程間通信的有效地址空間大小不會超過文件大小及一個頁面大小的和。
3、 文件一旦被映射後,調用mmap()的進程對返回地址的訪問是對某一內存區域的訪問,暫時脫離了磁碟上文件的影響。所有對mmap()返回地址空間的操作只在內存中有意義,只有在調用了munmap()後或者msync()時,才把內存中的相應內容寫回磁碟文件,所寫內容仍然不能超過文件的大小。
範例2:父子進程通過匿名映射實現共享內存
#include <sys/mman.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
typedef struct{
char name[4];
int age;
}people;
main(int argc, char** argv)
{
int i;
people *p_map;
char temp;
p_map=(people*)mmap(NULL,sizeof(people)*10,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0);
if(fork() == 0)
{
sleep(2);
for(i = 0;i<5;i++)
printf("child read: the %d people's age is %d\n",i+1,(*(p_map+i)).age);
(*p_map).age = 100;
munmap(p_map,sizeof(people)*10); //實際上,進程終止時,會自動解除映射。
exit();
}
temp = 'a';
for(i = 0;i<5;i++)
{
temp += 1;
memcpy((*(p_map+i)).name, &temp,2);
(*(p_map+i)).age=20+i;
}
sleep(5);
printf( "parent read: the first people,s age is %d\n",(*p_map).age );
printf("umap\n");
munmap( p_map,sizeof(people)*10 );
printf( "umap ok\n" );
}
考察程序的輸出結果,體會父子進程匿名共享內存:
child read: the 1 people's age is 20
child read: the 2 people's age is 21
child read: the 3 people's age is 22
child read: the 4 people's age is 23
child read: the 5 people's age is 24
parent read: the first people,s age is 100
umap
umap ok
回頁首
四、對mmap()返回地址的訪問
前面對範例運行結構的討論中已經提到,linux採用的是頁式管理機制。對於用mmap()映射普通文件來說,進程會在自己的地址空間新增一塊空間,空間大小由mmap()的len參數指定,注意,進程並不一定能夠對全部新增空間都能進行有效訪問。進程能夠訪問的有效地址大小取決於文件被映射部分的大小。簡單的說,能夠容納文件被映射部分大小的最少頁面個數決定了進程從mmap()返回的地址開始,能夠有效訪問的地址空間大小。超過這個空間大小,內核會根據超過的嚴重程度返回發送不同的信號給進程。可用如下圖示說明:
注意:文件被映射部分而不是整個文件決定了進程能夠訪問的空間大小,另外,如果指定文件的偏移部分,一定要注意為頁面大小的整數倍。下面是對進程映射地址空間的訪問範例:
#include <sys/mman.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
typedef struct{
char name[4];
int age;
}people;
main(int argc, char** argv)
{
int fd,i;
int pagesize,offset;
people *p_map;
pagesize = sysconf(_SC_PAGESIZE);
printf("pagesize is %d\n",pagesize);
fd = open(argv[1],O_CREAT|O_RDWR|O_TRUNC,00777);
lseek(fd,pagesize*2-100,SEEK_SET);
write(fd,"",1);
offset = 0; //此處offset = 0編譯成版本1;offset = pagesize編譯成版本2
p_map = (people*)mmap(NULL,pagesize*3,PROT_READ|PROT_WRITE,MAP_SHARED,fd,offset);
close(fd);
for(i = 1; i<10; i++)
{
(*(p_map+pagesize/sizeof(people)*i-2)).age = 100;
printf("access page %d over\n",i);
(*(p_map+pagesize/sizeof(people)*i-1)).age = 100;
printf("access page %d edge over, now begin to access page %d\n",i, i+1);
(*(p_map+pagesize/sizeof(people)*i)).age = 100;
printf("access page %d over\n",i+1);
}
munmap(p_map,sizeof(people)*10);
}
如程序中所注釋的那樣,把程序編譯成兩個版本,兩個版本主要體現在文件被映射部分的大小不同。文件的大小介於一個頁面與兩個頁面之間(大小為:pagesize*2-99),版本1的被映射部分是整個文件,版本2的文件被映射部分是文件大小減去一個頁面後的剩餘部分,不到一個頁面大小(大小為:pagesize-99)。程序中試圖訪問每一個頁面邊界,兩個版本都試圖在進程空間中映射pagesize*3的位元組數。
版本1的輸出結果如下:
pagesize is 4096
access page 1 over
access page 1 edge over, now begin to access page 2
access page 2 over
access page 2 over
access page 2 edge over, now begin to access page 3
Bus error //被映射文件在進程空間中覆蓋了兩個頁面,此時,進程試圖訪問第三個頁面
版本2的輸出結果如下:
pagesize is 4096
access page 1 over
access page 1 edge over, now begin to access page 2
Bus error //被映射文件在進程空間中覆蓋了一個頁面,此時,進程試圖訪問第二個頁面
結論:採用系統調用mmap()實現進程間通信是很方便的,在應用層上介面非常簡潔。內部實現機制區涉及到了linux存儲管理以及文件系統等方面的內容,可以參考一下相關重要數據結構來加深理解。在本專題的後面部分,將介紹系統v共享內存的實現。
參考資料
[1] Understanding the Linux Kernel, 2nd Edition, By Daniel P. Bovet, Marco Cesati , 對各主題闡述得重點突出,脈絡清晰。
[2] UNIX網路編程第二卷:進程間通信,作者:W.Richard Stevens,譯者:楊繼張,清華大學出版社。對mmap()有詳細闡述。
[3] Linux內核源代碼情景分析(上),毛德操、胡希明著,浙江大學出版社,給出了mmap()相關的源代碼分析。
[4]mmap()手冊
8. 什麼是USER共享
1 Samba 簡介
Samba(SMB是其縮寫) 是一個網路伺服器,用於Linux和Windows共享文件之用;Samba 即可以用於Windows和Linux之間的共享文件,也一樣用於Linux和Linux之間的共享文件;不過對於Linux和Linux之間共享文件有更好的網路文件系統NFS,NFS也是需要架設伺服器的;
大家知道在Windows 網路中的每台機器即可以是文件共享的伺服器,也可以同是客戶機;Samba 也一樣能行,比如一台Linux的機器,如果架了Samba Server 後,它能充當共享伺服器,同時也能做為客戶機來訪問其它網路中的Windows共享文件系統,或其它Linux的Sabmba 伺服器;
我們在Windows網路中,看到共享文件功能知道,我們直接就可以把共享文件夾當做本地硬碟來使用。在Linux的中,就是通過Samba的向網路中的機器提供共享文件系統,也可以把網路中其它機器的共享掛載在本地機上使用;這在一定意義上說和FTP是不一樣的。
Samba 用的netbios協議,如果您用Samba 不成功,
Linux與Windows 、Linux 和 Linux
2 Samba 功能和應用范圍
Samba 應該范圍主要是Windows和Linux 系統共存的網路中使用;如果一個網路環境都是Linux或Unix類的系統,沒有必要用Samba,應該用NFS更好一點;
那Samba 能為我們提供點什麼服務呢?主要是共享文件和共享列印機;
3 Samba 兩個伺服器相關啟動程序、客戶端及伺服器配置文件等;
3.1 Samba 有兩個伺服器,一個是smb,另一個是nmb;
smb 是Samba 的主要啟動伺服器,讓其它機器能知道此機器共享了什麼;如果不打開nmb伺服器的話,只能通過IP來訪問,比如在Windows的IE瀏覽器上打入下面的一條來訪問;
\\192.168.1.5\共享目錄
\\192.168.1.5\opt
而nmb是解析用的,解析了什麼呢?就是把這台Linux機器所共享的工作組及在此工作組下的netbios name解析出來;
一般的情況下,在RPM包的系統,如果是用RPM包安裝的Samba ,一般可以通過如下的方式來啟動Samba伺服器;
[root@localhost ~]# /etc/init.d/smb start
啟動 SMB 服務: [ 確定 ]
啟動 NMB 服務: [ 確定 ]
如果停止呢?就在smb後面加stop ;重啟就是restart
[root@localhost ~]# /etc/init.d/smb stop
[root@localhost ~]# /etc/init.d/smb restart
對於所有系統來說,通用的辦法就是直接運行smb 和nmb;當然您要知道smb和nmb所在的目錄才行;如果是自己編譯的Samba ,您應該知道您把Samba放在哪裡了;
[root@localhost ~]# /usr/sbin/smbd
[root@localhost ~]# /usr/sbin/nmbd
查看伺服器是否運行起來了,則用下面的命令;
[root@localhost ~]# pgrep smbd
[root@localhost ~]# pgrep nmbd
關掉Samba伺服器,也可以用下面的辦法,大多是通用的;要root許可權來執行;
[root@localhost ~]# pkill smbd
[root@localhost ~]# pkill nmbd
3.2 查看Samba 伺服器的埠及防火牆;
查看這個有何用呢?有時你的防火牆可能會把smbd伺服器的埠封掉,所以我們應該smbd伺服器所佔用的埠;下面查看中,我們知道smbd所佔用的埠是139和445 ;
[root@localhost ~]# netstat -tlnp |grep smb
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 10639/smbd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 10639/smbd
如果您有防火牆,一定要把這兩個埠打開。如果不知道怎麼打開。可能你和我一樣是新手,還是把防火牆規則清掉也行;
[root@localhost ~]# iptables -F
或
[root@localhost ~]# /sbin/iptables -F
3.3、查看Samba 伺服器的配置文件;
如果我們是用Linux發行版自帶的Samba軟體包,一般情況下Samba伺服器的配置文件都位於/etc/samba目錄中,伺服器的主配置文件是smb.conf;也有有戶配置文件 smbpasswd、smbusers和lmhosts等(最好您查看一下這些文件的內容);還有一個文件是secrets.tdb,這個文件是Samba 伺服器啟動手自動生成的;我們慢慢根據教程的進度來適當地增加這些文件的說明吧;一下子都說出來,感覺內容太多;所以只能一點一點的來了;
3.4、Samba 在Linux 中的一些工具(伺服器端和客戶端);
smbcacls smbcontrol smbencrypt smbmount smbprint smbstatus smbtree
smbclient smbcquotas smbmnt smbpasswd smbspool smbtar smbumount
smbd nmbd mount
其中伺服器端的是smbd、nmbd、smbpasswd ;其它的大多是客戶端;這些並不是都需要一定要精通的,但至少得會用幾個;比如smbmount(也就是mount 加參數的用法),還用smbclient等;
3.5 在Linux 中的常用工具mount(smbmount)和smbclient;Windows查看Linux共享的方法 ;
3.5.1 在Linux系統中查看網路中Windows共享文件及Linux中的Samba共享文件;
一般的情況下,我們要用到smbclient;常用的用法也無非是下面的;
[root@localhost ~]# smbclient -L //ip地址或計算機名
這個以後慢慢補充吧;
3.5.2 在Windows中訪問Linux Samba伺服器共享文件的辦法;
這個簡單吧,在網上領居,查看工作組就能看得到,或者在瀏覽器上輸入如下的
\\ip地址或計算機名
這樣就能看到這個機器上有什麼共享的了,點滑鼠操作完成;如果訪問不了,不要忘記把Linux的防火牆規劃清掉,或讓相應的埠通過;
3.5.3 smbfs文件系統的掛載;
mount 的用法,載入網路中的共享文件夾到本地機;mount就是用於掛載文件系統的,SMB做為網路文件系統的一種,也能用mount掛載;smbmount說到底也是用mount的一個變種;
mount 掛載smbfs的用法;
mount -t smbfs -o codepage=cp936,username=用戶名,password=密碼 , -l //ip地址/共享文件夾名 掛載點
或
mount -t smbfs -o codepage=cp936,username=用戶名,password=密碼 , -l //計算機名/共享文件夾名 掛載點
或
mount -t smbfs -o codepage=cp936 //ip地址或計算機名/共享文件夾名 掛載點
smbmount的用法:
smbmount -o username=用戶名,password=密碼 , -l //ip地址或計算機名/共享文件夾名 掛載點
smbmount //ip地址或計算機名/共享文件夾名 掛載點
說明:
如果您的伺服器是以share共享的,則無需用戶名和密碼就能掛載,如果出現要密碼的提示,直接回車就行;您也可以用smbmount 來掛載,這樣就無需用mount -t smbfs來指定文件系統的類型了;
對於掛載點,我們要自己建立一個文件夾,比如我們可以建在/opt/smbhd,這由您說的算吧;
在mount的命令中,我們發現有這樣的一個參數codepage=cp936,這是伺服器端文件系統的編碼的指定,cp936 就是簡體中文,當然您可以用utf8等,嘗試一下吧。
如果您掛載了遠程的smbfs文件系統出現的是簡體中文亂碼,就要考慮掛載時要指定編碼了;
4、由最簡單的一個例子說起,匿名用戶可讀可寫的實現;
第一步: 更改smb.conf
我們來實現一個最簡單的功能,讓所有用戶可以讀寫一個Samba 伺服器共享的一個文件夾;我們要改動一下smb.conf ;首先您要備份一下smb.conf文件;
[root@localhost ~]# cd /etc/samba
[root@localhost samba]# mv smb.conf smb.confBAK
然後我們來重新創建一個smb.conf文件;
[root@localhost samba]#touch smb.conf
然後我們把下面這段寫入smb.conf中;
[global]
workgroup = LinuxSir
netbios name = LinuxSir05
server string = Linux Samba Server TestServer
security = share
[linuxsir]
path = /opt/linuxsir
writeable = yes
browseable = yes
guest ok = yes
註解:
[global]這段是全局配置,是必段寫的。其中有如下的幾行;
workgroup 就是Windows中顯示的工作組;在這里我設置的是LinuxSir
netbios name 就是在Windows中顯示出來的計算機名;
server string 就是Samba伺服器說明,可以自己來定義;這個不是什麼重要的;
security 這是驗證和登錄方式,這里我們用了share ;驗證方式有好多種,這是其中一種;另外一種常用的是user的驗證方式;如果用share呢,就是不用設置用戶和密碼了;
[linuxsir] 這個在Windows中顯示出來是共享的目錄;
path = 可以設置要共享的目錄放在哪裡;
writeable 是否可寫,這里我設置為可寫;
browseable 是否可以瀏覽,可以;
guest ok 匿名用戶以guest身份是登錄;
第二步:建立相應目錄並授權;
[root@localhost ~]# mkdir -p /opt/linuxsir
[root@localhost ~]# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)
[root@localhost ~]# chown -R nobody:nobody /opt/linuxsir
注釋:關於授權nobody,我們先用id命令查看了nobody用戶的信息,發現他的用戶組也是nobody,我們要以這個為准。有些系統nobody用戶組並非是nobody ;
第三步:啟動smbd和nmbd伺服器;
[root@localhost ~]# smbd
[root@localhost ~]# nmbd
第四步:查看smbd進程,確認Samba 伺服器是否運行起來了;
[root@localhost ~]# pgrep smbd
13564
13568
第五步:訪問Samba 伺服器的共享;
在Linux 中您可以用下面的命令來訪問;
[root@localhost ~]# smbclient -L //LinuxSir05
Password: 註:直接按回車
在Windows中,您可以用下面的辦法來訪問;
//LinuxSir05/
如果對您有幫助,請記得採納為滿意答案,謝謝!祝您生活愉快!
vaela
9. 怎麼讓手機共享電腦寬頻連接的網路
利用win7自帶的虛擬WIFI網卡,不需要路由器即可創建自己的網路供手機上網,方法如下:
1、按WIN+R調出「運行」欄,在「運行」菜單欄輸入「cmd」,點擊確認
歡迎下載騰訊電腦管家了解更多知識,體驗更多功能。
10. vmware lunix怎麼共享文件
1.在虛擬機系統沒有運行的情況下,點擊虛擬機工具欄的VM->settings->options->Shared Folders,按照提示添加一個你要共享的windows下的文件夾。2.安裝vmtools,vmtools安裝成功後會看到目錄/mnt/hgfs.如果沒有該目錄則可以手動建立
3.ubuntu終端下運行 sudo apt-get install open-vm-dkms
4.進入目錄:/etc/init.d,把"sudo mount -t vmhgfs .host:/ /mnt/hgfs"寫到open-vm-tools文件的最後一行(需要root許可權,可以用命令:sudo vi open-vm-tools)。
5.在當前目錄:/etc/init.d/運行,"sudo ./open-vm-tools restart",運行成功後你會在目錄:/mnt/hgfs下面看到你共享的文件夾