晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /proc/thread-self/root/scripts/ |
Upload File : |
#!/usr/local/cpanel/3rdparty/bin/perl
# cpanel - scripts/fixetchosts Copyright 2022 cPanel, L.L.C.
# All rights reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
package scripts::fixetchosts;
use strict;
use Cpanel::SafeFile ();
use Cpanel::Validate::Hostname ();
use Cpanel::IP::Loopback ();
use Cpanel::DIp::MainIP ();
use Cpanel::Sys::Hostname::FQDN ();
use Cpanel::FileUtils::TouchFile ();
use IO::Handle ();
exit script(@ARGV) unless caller;
sub script {
return run('/etc/hosts');
}
sub run {
my ($file) = @_;
my $mainip = Cpanel::DIp::MainIP::getmainserverip();
my $hostname = Cpanel::Sys::Hostname::FQDN::get_fqdn_hostname();
my $shorthostname = Cpanel::Sys::Hostname::FQDN::get_short_hostname();
# CPANEL-36014: If the returned hostname ends with a trailing dot, strip it.
$hostname =~ s/\.$//;
Cpanel::FileUtils::TouchFile::touchfile($file);
die "The hostname $hostname is not valid.\n" unless Cpanel::Validate::Hostname::is_valid($hostname);
update( $file, $mainip, $hostname, $shorthostname );
return 0;
}
sub update {
my ( $file, $mainip, $hostname, $shorthostname ) = @_;
my $hosts_fh = IO::Handle->new();
my $hosts_lock = Cpanel::SafeFile::safeopen( $hosts_fh, '+<', $file );
if ($hosts_lock) {
my %SEENIP;
my @ETCHOSTS;
while ( my $line = readline $hosts_fh ) {
chomp $line;
if ( $line =~ m/^\s*#/ || $line =~ m/^\s*$/ ) {
push @ETCHOSTS, { 'raw' => $line };
}
else {
my ( $ip, $hosts ) = split( /\s+/, $line, 2 );
my @line_hosts;
foreach my $host ( split( /\s+/, $hosts ) ) {
next if ( $ip ne $mainip && $host eq $hostname ); # Drop mismatch hostnames for the main IP
next if ( $ip eq $mainip && ( $host eq $hostname || $host eq $shorthostname ) ); # These will be re-added
push @line_hosts, $host if ( !grep { $_ eq $host } @line_hosts ); # Drop duplicates while preserving order
}
if ( !@line_hosts ) { ## Drop empty lines
next if $ip eq $mainip; # Prevent duplicate commented lines for the main IP
push @ETCHOSTS, { 'raw' => '# ' . $line }; # Preserve lines that were commented out in full
}
else { ## Save valid entries
push @ETCHOSTS, { 'ip' => $ip, 'hosts' => \@line_hosts };
$SEENIP{$ip} = 1;
}
}
}
seek( $hosts_fh, 0, 0 );
my $added_hostname = 0;
foreach my $line_ref (@ETCHOSTS) {
if ( exists $line_ref->{'raw'} ) {
print {$hosts_fh} $line_ref->{'raw'} . "\n";
}
else {
my $ip = $line_ref->{'ip'};
my $hosts_ref = $line_ref->{'hosts'};
if ( $ip eq $mainip && !$added_hostname ) {
$added_hostname = 1;
unshift @{$hosts_ref}, $hostname, $shorthostname;
}
elsif ( Cpanel::IP::Loopback::is_loopback($ip) ) {
if ( !grep { $_ eq 'localhost' } @{$hosts_ref} ) {
unshift @{$hosts_ref}, 'localhost';
}
}
print {$hosts_fh} $ip . "\t\t" . join( ' ', @{$hosts_ref} ) . "\n";
}
}
if ( !exists $SEENIP{'127.0.0.1'} ) {
print {$hosts_fh} "127.0.0.1\t\tlocalhost\n";
}
if ( !exists $SEENIP{$mainip} ) {
print {$hosts_fh} $mainip . "\t\t" . $hostname . ' ' . $shorthostname . "\n";
}
truncate( $hosts_fh, tell($hosts_fh) );
Cpanel::SafeFile::safeclose( $hosts_fh, $hosts_lock );
}
return;
}