Strona główna Ubuntu C++ Hardware HTML i javascript Java Software SQL

Awk|Bash - automatyczne montowanie partycji ntfs z uprawnieniami "rwx" dla danego użytkownika.

Dodano: 2011-07-15

W systemie Ubuntu 11.04 można się spotkać z problemem nie możliwości modyfikowania jak i wykonywania skryptów na partycjach ntfs (New Technology File System) wynikającym z bezpiecznego montowania przez system nowych dysków.

Najlepszym rozwiązaniem jest automatyczne zamontowanie partycji ntfs przy starcie systemu z odpowiednimi uprawnieniami dla użytkownika.

Poniższy skrypt automatycznie pobiera informację o istniejących partycjach na dysku (dyskach) twardych w formacie New Technology File System i dopisuje ich „montowanie” w pliku /etc/fstab.

Uprawnienia do partycji są nadawane użytkownikowi, na którym koncie zostanie wykonany skrypt z następującymi uprawnieniami: użytkownik wykonujący skrypt będzi posiadał pełny dostęp do plików, dla jego grupy zostaje przyznane prawo do odczytu i zapisu, natomiast reszta świata posiada prawo tylko do odczytu. Więcej informacji o opcjach montowania partycji można znaleźć na stronie montowanie partycji Windows

Skrypt ten działa bez zarzutu w przypadku partycji ntfs, które posiadają nazwę LABEL, a w swoich nazwach nie mają spacji (lub innych „zakazanych” znaków :). W innych przypadkach należy go odpowiednio zmodyfikować.

W skrypcie wykorzystano trzy ważne komendy:

  • blkid - wyświetlenie wszystkich partycji
  • id -u - unikatowy systemowy numer użytkownika, na koncie którego się pracuje
  • sudo sh -c - wykonanie komend na prawach roota (sprawdź co będzie bez nich :)
Drukuj Zaznacz kod
automatically_add_mount_ntfs.awk
#!/bin/bash

if [ -f mount_ntfs.out ];
then
	rm mount_ntfs.out;
	
fi

id -u > id_user.out

sudo blkid | awk ' BEGIN { 
	print "Skryt tworzacy komendy montujace partycje NTFS z uprawnieniami:";
	getline uidUser < "id_user.out";
	rightMount = "uid=" uidUser ",umask=0013";
	print "\""rightMount"\"\n";
	print "Zalozenie ze partycje posiadaja nazwy [LABEL] oraz nie zawieraja one spacji ;)";
	system("rm id_user.out");
}{
	print $0;

	if ($4 == "TYPE=\"ntfs\""){
		partToMount = substr($1, 0, length($1));		
		partFolderMount = "/media/"substr($2, 8, length($2));
		partFolderMount = substr(partFolderMount, 0, index(partFolderMount, "\""));
		mountC = partToMount " " partFolderMount " ntfs " rightMount " " 0 " " 0;
		print mountC;	
		system("sudo sh -c \"echo "mountC" >> /etc/fstab\"");
	}
}
END {
	print "Koniec!";
}'

read