⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 freebsd-lib.pl

📁 Unix下基于Web的管理工具
💻 PL
📖 第 1 页 / 共 2 页
字号:
# freebsd-lib.pl# Mount table functions for freebsd$uname_release = `uname -r`;# Return information about a filesystem, in the form:#  directory, device, type, options, fsck_order, mount_at_boot# If a field is unused or ignored, a - appears instead of the value.# Swap-filesystems (devices or files mounted for VM) have a type of 'swap',# and 'swap' in the directory fieldsub list_mounts{local(@rv, @p, @o, $_, $i, $j); $i = 0;# Get /etc/fstab mountsopen(FSTAB, $config{'fstab_file'});while(<FSTAB>) {	local(@o, $at_boot);	chop; s/#.*$//g;	if (!/\S/) { next; }	@p = split(/\s+/, $_);	if ($p[2] eq "proc" || $p[2] eq "procfs") { $p[2] = $p[0] = "proc"; }	if ($p[2] eq "swap") { $p[1] = "swap"; }	$rv[$i] = [ $p[1], $p[0], $p[2] ];	$rv[$i]->[5] = "yes";	@o = split(/,/ , $p[3] eq "defaults" ? "" : $p[3]);	if (($j = &indexof("noauto", @o)) >= 0) {		# filesytem is not mounted at boot		splice(@o, $j, 1);		$rv[$i]->[5] = "no";		}	$rv[$i]->[3] = (@o ? join(',' , @o) : "-");	$rv[$i]->[4] = (@p >= 5 ? $p[5] : 0);	$i++;	}close(FSTAB);return @rv;}# create_mount(directory, device, type, options, fsck_order, mount_at_boot)# Add a new entry to the fstab file, old or new automounter filesub create_mount{local(@mlist, @amd, $_); local($opts);# Adding a normal mount to the fstab fileopen(FSTAB, ">> $config{'fstab_file'}");print FSTAB "$_[1]  $_[0]  $_[2]";$opts = $_[3] eq "-" ? "" : $_[3];if ($_[5] eq "no") {	$opts = join(',' , (split(/,/ , $opts) , "noauto"));	}if ($opts eq "") { print FSTAB "  defaults"; }else { print FSTAB "  $opts"; }print FSTAB "  0  ";print FSTAB $_[4] eq "-" ? "0\n" : "$_[4]\n";close(FSTAB);}# change_mount(num, directory, device, type, options, fsck_order, mount_at_boot)# Change an existing permanent mountsub change_mount{local($i, @fstab, $line, $opts, $j, @amd);$i = 0;# Update fstab fileopen(FSTAB, $config{fstab_file});@fstab = <FSTAB>;close(FSTAB);open(FSTAB, "> $config{fstab_file}");foreach (@fstab) {	chop; ($line = $_) =~ s/#.*$//g;	if ($line =~ /\S/ && $i++ == $_[0]) {		# Found the line to replace		print FSTAB "$_[2]  $_[1]  $_[3]";		$opts = $_[4] eq "-" ? "" : $_[4];		if ($_[6] eq "no") {			$opts = join(',' , (split(/,/ , $opts) , "noauto"));			}		if ($opts eq "") { print FSTAB "  defaults"; }		else { print FSTAB "  $opts"; }		print FSTAB "  0  ";		print FSTAB $_[5] eq "-" ? "0\n" : "$_[5]\n";		}	else { print FSTAB $_,"\n"; }	}close(FSTAB);}# delete_mount(index)# Delete an existing permanent mountsub delete_mount{local($i, @fstab, $line, $opts, $j, @amd);$i = 0;# Update fstab fileopen(FSTAB, $config{fstab_file});@fstab = <FSTAB>;close(FSTAB);open(FSTAB, "> $config{fstab_file}");foreach (@fstab) {	chop; ($line = $_) =~ s/#.*$//g;	if ($line !~ /\S/ || $i++ != $_[0]) {		# Don't delete this line		print FSTAB $_,"\n";		}	}close(FSTAB);}# list_mounted()# Return a list of all the currently mounted filesystems and swap files.# The list is in the form:#  directory device type options# Under FreeBSD, there seems to be no way to get additional mount options# used by filesystems like NFS etc. Even getting the full details of mounted# filesystems requires C code! So we have to call a specially-written external# program to get the mount listsub list_mounted{# get the list of mounted filesystemslocal(@rv, $_);local $cmd = $uname_release =~ /^3\./ ? "./freebsd-mounts-3"				      : "./freebsd-mounts-2";open(CMD, "$cmd |");while(<CMD>) {	local @p = split(/\t/, $_);	if ($p[2] eq "procfs" || $p[1] eq "procfs") { $p[1] = $p[2] = "proc"; }	push(@rv, \@p);	}close(CMD);# add output from swapinfoforeach (split(/\n/, `swapinfo`)) {	if (/^(\/\S+)\s+\d+\s+\d+/) {		push(@rv, [ "swap", $1, "swap", "-" ]);		}	}return @rv;}# mount_dir(directory, device, type, options)# Mount a new directory from some device, with some options. Returns 0 if ok,# or an error string if failedsub mount_dir{local($out, $opts, $shar, %options, %smbopts);if ($_[2] eq "swap") {	# Use swapon to add the swap space..	$out = `swapon $_[1] 2>&1`;	if ($?) { return "<pre>$out</pre>"; }	}else {	# some disk-based filesystem	$opts = $_[3] eq "-" ? "" : "-o \"$_[3]\"";	$opts = join(',', grep { !/quota/ } split(/,/, $opts));	$out = `mount -t $_[2] $opts $_[1] $_[0] 2>&1`;	if ($?) { return "<pre>$out</pre>"; }	}return 0;}# unmount_dir(directory, device, type)# Unmount a directory that is currently mounted. Returns 0 if ok,# or an error string if failedsub unmount_dir{local($out, %smbopts, $dir);if ($_[2] eq "swap") {	# Not possible!	&error("Swap space cannot be removed");	}else {	$out = `umount $_[0] 2>&1`;	if ($?) { return "<pre>$out</pre>"; }	}return 0;}# mount_modes(type)# Given a filesystem type, returns 4 numbers that determine how the file# system can be mounted, and whether it can be fsck'd# The first is:#  0 - cannot be permanently recorded#	(smbfs under linux)#  1 - can be permanently recorded, and is always mounted at boot#	(swap under linux)#  2 - can be permanently recorded, and may or may not be mounted at boot#	(most normal filesystems)# The second is:#  0 - mount is always permanent => mounted when saved#	(swap under linux)#  1 - doesn't have to be permanent#	(normal fs types)# The third is:#  0 - cannot be fsck'd at boot time#  1 - can be be fsck'd at boot# The fourth is:#  0 - can be unmounted#  1 - cannot be unmountedsub mount_modes{if ($_[0] eq "swap")	{ return (2, 1, 0, 1); }elsif ($_[0] eq "ufs")	{ return (2, 1, 1, 0); }else	{ return (2, 1, 0, 0); }}# disk_space(type, directory)# Returns the amount of total and free space for some filesystem, or an# empty array if not appropriate.sub disk_space{if (&get_mounted($_[1], "*") < 0) { return (); }if ($_[0] eq "proc" || $_[0] eq "swap") { return (); }`df -k $_[1]` =~ /Mounted on\n\S+\s+(\S+)\s+\S+\s+(\S+)/;return ($1, $2);}# list_fstypes()# Returns an array of all the supported filesystem types. If a filesystem is# found that is not one of the supported types, generate_location() and# generate_options() will not be called for it.sub list_fstypes{local @rv = ("ufs", "nfs", "cd9660", "msdos", "swap");push(@rv, "ext2fs") if (&has_command("mount_ext2fs"));push(@rv, "ntfs") if (&has_command("mount_ntfs"));return @rv;}# fstype_name(type)# Given a short filesystem type, return a human-readable name for itsub fstype_name{local(%fsmap);%fsmap = ("ufs", "FreeBSD Unix Filesystem",	  "nfs","Network Filesystem",	  "cd9660","ISO9660 CD-ROM",	  "msdos","MS-DOS Filesystem",	  "ext2fs","Linux Filesystem",	  "ntfs","Windows NT Filesystem",	  "swap","Virtual Memory",	  "proc","Process Image Filesystem");return $config{long_fstypes} && $fsmap{$_[0]} ? $fsmap{$_[0]} : uc($_[0]);}# multiple_mount(type)# Returns 1 if filesystems of this type can be mounted multiple times, 0 if notsub multiple_mount{return $_[0] eq "nfs";}# generate_location(type, location)# Output HTML for editing the mount location of some filesystem.sub generate_location{if ($_[0] eq "nfs") {	# NFS mount from some host and directory	$_[1] =~ /^([^:]+):(.*)$/;	print "<tr> <td><b>NFS Hostname</b></td>\n";	print "<td><input name=nfs_host size=20 value=\"$1\">\n";	&nfs_server_chooser_button("nfs_host");	print "</td>\n";	print "<td><b>NFS Directory</b></td>\n";	print "<td><input name=nfs_dir size=20 value=\"$2\">\n";	&nfs_export_chooser_button("nfs_host", "nfs_dir");	print "</td> </tr>\n";	}else {	if ($_[0] eq "swap") {		# Swap file or device		printf "<tr> <td valign=top><b>Swap File</b></td>\n";		}	else {		# Disk-based filesystem		printf "<tr> <td valign=top><b>%s Disk</b></td>\n",			&fstype_name($_[0]);		}	print "<td colspan=3>\n";	if ($_[1] =~ /^\/dev\/wd(\d)s(\d)([a-z]*)$/) {		$disk_dev = 0; $ide_t = $1; $ide_s = $2; $ide_p = $3;		}	elsif ($_[1] =~ /^\/dev\/sd(\d)s(\d)([a-z]*)$/) {		$disk_dev = 1; $scsi_t = $1; $scsi_s = $2; $scsi_p = $3;		}	else { $disk_dev = 2; }	printf "<input type=radio name=disk_dev value=0 %s> IDE Hard Disk:\n",		$disk_dev == 0 ? "checked" : "";	print "Device <input name=ide_t size=3 value=\"$ide_t\">\n";	print "Slice <input name=ide_s size=3 value=\"$ide_s\">\n";	print "Partition <input name=ide_p size=3 value=\"$ide_p\"><br>\n";	printf "<input type=radio name=disk_dev value=1 %s> SCSI Disk:\n",		$disk_dev == 1 ? "checked" : "";	print "Device <input name=scsi_t size=3 value=\"$scsi_t\">\n";	print "Slice <input name=scsi_s size=3 value=\"$scsi_s\">\n";	print "Partition <input name=scsi_p size=3 value=\"$scsi_p\"><br>\n";	printf "<input type=radio name=disk_dev value=2 %s> Other Device:\n",		$disk_dev == 2 ? "checked" : "";	printf "<input size=20 name=dev_path value=\"%s\"><br>\n",		$disk_dev == 2 ? $_[1] : "";	print "</td> </tr>\n";	}}# generate_options(type, newmount)# Output HTML for editing mount options for a particular filesystem # under this OSsub generate_options{if ($_[0] ne "swap") {	# These options are common to all filesystems	print "<tr> <td><b>Read-only?</b></td>\n";	printf "<td nowrap><input type=radio name=bsd_ro value=1 %s> Yes\n",		defined($options{"rdonly"}) || defined($options{"ro"})			? "checked" : "";	printf "<input type=radio name=bsd_ro value=0 %s> No</td>\n",		defined($options{"rdonly"}) || defined($options{"ro"})			? "" : "checked";	print "<td><b>Buffer writes to filesystem?</b></td>\n";	printf"<td nowrap><input type=radio name=bsd_sync value=0 %s> Yes\n",		defined($options{"sync"}) ? "" : "checked";	printf "<input type=radio name=bsd_sync value=1 %s> No</td> </tr>\n",		defined($options{"sync"}) ? "checked" : "";	print "<tr> <td><b>Allow device files?</b></td>\n";	printf "<td nowrap><input type=radio name=bsd_nodev value=0 %s> Yes\n",		defined($options{"nodev"}) ? "" : "checked";	printf "<input type=radio name=bsd_nodev value=1 %s> No</td>\n",		defined($options{"nodev"}) ? "checked" : "";	print "<td><b>Allow execution of binaries?</b></td>\n";	printf"<td nowrap><input type=radio name=bsd_noexec value=0 %s> Yes\n",		defined($options{"noexec"}) ? "" : "checked";	printf "<input type=radio name=bsd_noexec value=1 %s> No</td> </tr>\n",		defined($options{"noexec"}) ? "checked" : "";	print "<tr> <td><b>Disallow setuid programs?</b></td>\n";	printf "<td nowrap><input type=radio name=bsd_nosuid value=1 %s> Yes\n",		defined($options{"nosuid"}) ? "checked" : "";	printf "<input type=radio name=bsd_nosuid value=0 %s> No</td>\n",		defined($options{"nosuid"}) ? "" : "checked";	print "<td><b>Update access times?</b></td>\n";	printf"<td nowrap><input type=radio name=bsd_noatime value=0 %s> Yes\n",		defined($options{"noatime"}) ? "" : "checked";	printf "<input type=radio name=bsd_noatime value=1 %s> No</td> </tr>\n",		defined($options{"noatime"}) ? "checked" : "";	if ($uname_release =~ /^3\./) {		# FreeBSD 3.x has some more options		print "<tr> <td><b>Follow symbolic links?</b></td>\n";		printf "<td nowrap><input type=radio name=bsd_nosymfollow value=0 %s> Yes\n",			defined($options{"nosymfollow"}) ? "" : "checked";		printf "<input type=radio name=bsd_nosymfollow value=1 %s> No</td>\n",			defined($options{"nosymfollow"}) ? "checked" : "";		print "<td><b>Files inherit group from SUID directories?</b></td>\n";		printf"<td nowrap><input type=radio name=bsd_suiddir value=1 %s> Yes\n",			defined($options{"suiddir"}) ? "checked" : "";		printf "<input type=radio name=bsd_suiddir value=0 %s> No</td> </tr>\n",			defined($options{"suiddir"}) ? "" : "checked";		}	}if ($_[0] eq "ufs") {	# UFS filesystems support quotas	print "<tr> <td><b>User quotas at boot</b></td> <td colspan=3>\n";	printf "<input type=radio name=ufs_userquota value=0 %s> Disabled\n",		defined($options{'userquota'}) ? "" : "checked";	printf "<input type=radio name=ufs_userquota value=1 %s> Enabled\n",		defined($options{'userquota'}) && $options{'userquota'} eq ""			? "checked" : "";	printf "<input type=radio name=ufs_userquota value=2 %s>\n",		$options{'userquota'} ? "checked" : "";	print "Enabled, use file\n";	printf "<input name=ufs_userquota_file size=30 value=\"%s\">\n",		$options{'userquota'};	print "</td> </tr>\n";			print "<tr> <td><b>Group quotas at boot</b></td> <td colspan=3>\n";	printf "<input type=radio name=ufs_groupquota value=0 %s> Disabled\n",		defined($options{'groupquota'}) ? "" : "checked";	printf "<input type=radio name=ufs_groupquota value=1 %s> Enabled\n",		defined($options{'groupquota'}) && $options{'groupquota'} eq ""			? "checked" : "";	printf "<input type=radio name=ufs_groupquota value=2 %s>\n";		$options{'groupquota'} ? "checked" : "";	print "Enabled, use file\n";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -