Hi,
有钱终成眷属
没钱亲眼目睹

技术文章 第9页

给NANA博客主题添加留言板功能

伊阳阅读()

本文最后更新于2021年4月1日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

这几天,博客启用了懿古今博主的NANA主题,但是里面没有留言板功能,就想着把之前主题的留言板直接复制过来用,结果是用不成。这不,这几天就把留言板针对NANA主题做了修改适配。
下面我就介绍下方法:
第一步、复制下列代码,并保存为guestbook.php。

<?php 
/* Template Name: GuestBook */
get_header(); 
?>
<div id="content" class="site-content">	
   <div class="clear"></div>
     <div id="primary" class="content-area">
	<main id="main" class="site-main" role="main">
	<?php while ( have_posts() ) : the_post(); ?>
	<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
	  <header class="entry-header">
	   <h1 class="entry-title"><?php the_title(); ?></h1>
	   <div class="single_info">
	    <span class="date"><?php the_time( 'Y-m-d H:i' ) ?></span>
	    <span class="views"><?php if( function_exists( 'the_views' ) ) { the_views(); print '人阅读 '; } ?></span>			
	    <span class="edit"><?php edit_post_link('编辑', '  ', '  '); ?></span>
	   </div>			
	 </header><!-- .entry-header -->					
	 <div class="entry-content">
	   <?php the_content(); ?>
	   <?php wp_reset_query();endwhile; ?></br>
	 <div id="dzq">
	 <?php
	    $query="SELECT COUNT(comment_ID) AS cnt, comment_author, comment_author_url, comment_author_email FROM (SELECT * FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->posts.ID=$wpdb->comments.comment_post_ID) WHERE comment_date > date_sub( NOW(), INTERVAL 24 MONTH ) AND user_id='0' AND comment_post_ID ='118' AND comment_author_email != '330601425@qq.com' AND post_password='' AND comment_approved='1' AND comment_type='') AS tempcmt GROUP BY comment_author_email ORDER BY cnt DESC LIMIT 20";
	    $wall = $wpdb->get_results($query);
	    $maxNum = $wall[0]->cnt;
	    foreach ($wall as $comment){
	    $width = round(40/($maxNum / $comment->cnt),2);
	    if( $comment->comment_author_url )
	    $url = $comment->comment_author_url;
	    else $url="#";
	    $avatar = get_avatar( $comment->comment_author_email, $size = '36');
	    $tmp = "<li><a target=\"_blank\" href=\"".$comment->comment_author_url."\" title=\"".$comment->comment_author_url."\">".$avatar."<em>".$comment->comment_author."</em> <span>+".$comment->cnt."</span></br></a></li>";
	   $output .= $tmp;
	   }
	    $output = "<ul class=\"readers-list\">".$output."</ul>";
	    echo $output ;
	  ?>
	</div></br>
        <div id="comments">
            <?php comments_template('/guestcomments.php');?>
        </div>		
	</div><!-- .entry-content -->
	</article><!-- #post -->
	</main><!-- .site-main -->
	</div><!-- .content-area -->
	<?php get_sidebar();?>
	<div class="clear"></div>
</div><!-- .site-content -->
<?php get_footer();?>

其中,comment_post_ID =’118′中的“118”为你留言板页面的ID,comment_author_email != ‘330601425@qq.com’,邮箱地址为自己的邮箱,作用是排除自己的留言的显示统计。
第二步、复制Nana\inc\functions\comment-template.php的全部代码,并另存为guestcomments.php。
第三步、将下列css代码复制到主题下的style.css,样式可以自行修改美化。

#dzq{padding:10px 20px 15px 25px;margin-top: 0px;}
.readers-list{line-height:20px;text-align:left;overflow:hidden;_zoom:1}
.readers-list li{width:180px;float:left;margin-right:5px;list-style:none}
.readers-list a{background:#fb2929;}
.readers-list a{position:relative;display:block;height:50px;margin:4px;padding:4px 4px 4px 44px;overflow:hidden;border:#fb2929 1px solid;border-radius:5px;box-shadow:#eee 0 0 2px}
.readers-list img,.readers-list em,.readers-list span{-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;transition:all .2s ease-out}
.readers-list img{width:38px;height:38px;float:left;margin:2px 8px 0px -35px;border-radius:19px;border:#fff 2px solid;}
.readers-list em{font-style:normal;margin-right:10px;line-height:40px;color:#fff}.readers-list span{width:40px;text-align:right;position:absolute;right:6px;top:0px;color:#fff}
.readers-list a:hover{border-color:#fb2929;box-shadow:#ccc 0 0 2px;background-color:#fff;background-image:none}
.readers-list a:hover img{opacity:.7;margin-left:10px;border:#fb2929 2px solid;}
.readers-list a:hover em{color:#FF5E52;margin-right:0}
.readers-list a:hover span{display:block;color:#Fff;right:130px;top:0;text-align:center;border-right:#fb2929 1px solid;height:50px;line-height:47px;background:#fb2929}

最后,在后台新建一页面,名称改为留言板,模版选择GuestBook,保存即可。

效果如下图


上面的统计排行的留言功能,理论上也适用其他的Wordpress主题,至于如何修改,还需自行琢磨,在此,我不做介绍。

Linux yum源服务器的搭建及配置方法

伊阳阅读()

本文最后更新于2021年4月1日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

RPM 包的安装过程虽然方便、快捷,但存在很强的依赖性,尤其是库文件依赖,还要去 rpmfind 网站査找库文件到底属于哪个 RPM 包,从而导致 RPM 包的安装非常烦琐。那么,有没有其他的安装方法呢?

答案是肯定的,yum 在线管理就可以解决RPM 包的依赖性问题,而大大简化 RPM 包的安装过程。但需要明确的是,首先,yum 安装的还是 RPM 包,其次,yum 安装是需要有可用的 yum 服务器存在的,当然这个 yum 服务器可以在网上,也可以使用光盘在本地搭建。

yum 可以方便地进行 RPM 包的安装、升级、査询和卸载,可以自动解决依赖性问题,非常的方便和快捷。但是,一定要注意 yum 的卸载功能。yum 在卸载软件的同时会卸载这个软件的依赖包,但是如果卸载的依赖包是系统的必备软件包,就有可能导致系统崩溃。除非你确实知道 yum 在自动卸载时会卸载哪些软件包,否则最好不要执行 yum 卸载。

yum源搭建

yum 源既可以使用网络 yum 源,也可以使用本地光盘作为 yum 源。
要使用网络 yum 源,你的主机必须是正常联网的,且必须安装 yum 软件。查看命令如下:

[root@localhost ~]# rpm -qa | grep yum
yum-metadata-parser-1.1.2-16.el6.i686
yum-3.2.29-30.el6.centos.noarch
yum-utils-1.1.30-14.el6.noarch
yum-plugin-fastestmirror-1.1.30-14.el6.noarch
yum-plugin-security-1.1.30-14.el6.noarch

如果没有安装,则需要手工使用 RPM 包方式安装。

网络yum源服务器搭建

在主机联网的情况下,CentOS 的 yum 是可以直接使用的,但我们也需要了解一下 yum 源配置文件的内容,以便更好的去使用。

yum 源配置文件保存在 /etc/yum.repos.d/ 目录中,文件的扩展名一定是”*.repo”。也就是说,yum 源配置 文件只要扩展名是”*.repo”就会生效。

[root@localhost ~]# ls /etc/yum.repos.d/
CentOS-Base.repo
CentOS-Media.repo
CentOS-Debuginfo.repo.bak、
CentOS-Vault.repo

这个目录中有 4 个 yum 源配置文件,默认情况下 CentOS-Base.repo 文件生效。我们打开这个文件看看,命令如下:

[root@localhost yum.repos.d]# vim /etc/yum.repos.d/ CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/? release= $releasever&arch=$basearch&repo=os
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
…省略部分输出…

在 CentOS-Base.repo 文件中有 5 个 yum 源容器,这里只列出了 base 容器,其他容器和 base 容器类似。

  • [base]:容器名称,一定要放在[]中。
  • name:容器说明,可以自己随便写。
  • mirrorlist:镜像站点,这个可以注释掉。
  • baseurl:我们的 yum 源服务器的地址。默认是 CentOS 官方的 yum 源服务器,是可以使用的。如果你觉得慢,则可以改成你喜欢的 yum 源地址。
  • enabled:此容器是否生效,如果不写或写成 enabled 则表示此容器生效,写成 enable=0 则表示此容器不生效。
  • gpgcheck:如果为 1 则表示 RPM 的数字证书生效;如果为 0 则表示 RPM 的数字证书不生效。
  • gpgkey:数字证书的公钥文件保存位置。不用修改。
在网络可用时,yum 源配置文件默认是不需要进行任何修改就可以使用的。

 

以本地光盘作为 yum 源服务器

如果 Linux 主机不能联网时,难道yum 就不能用了吗? 答案是否定的,yum 已经考虑到了这个问题,所以在 /etc/yum.repos.d/ 目录下 还有一个 CentOS-Media.repo 文件,这个文件就是以本地光盘作为 yum 源服务器的模板文件,只需要进行简单的修改即可。

1) 放入 CentOS 安装光盘,并挂载光盘到指定位置。命令如下:

[root@localhost ~]# mkdir /mnt/cdrom
#创建cdrom目录,作为光盘的挂载点
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
mount: block device/dev/srO is write-protected, mounting read-only    #挂载光盘到/mnt/cdrom目录下

2) 修改其他几个 yum 源配置文件的扩展名,让它们失效,因为只有扩展名是”*.repo”的文件才能作为 yum 源配置文件。当然也可以删除其他几个 yum 源配置文件,但是如果删除了,当你又想用网络作为 yum 源时,就没有了参考文件,所以最好还是修改扩展名。 命令如下:

[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mv CentOS-Base, repo CentOS-Base.repo.bak
[root@localhost yum.repos.d]#mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
[root@localhost yum.repos.d]# mv CentOS-Vault.repo CentOS-Vault.repo.bak

3) 修改光盘 yum 源配置文件 CentOS-Media.repo,参照以下方修改:

[root@localhost yum.repos.d]# vim CentOS-Media.repo
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom
#地址为你自己的光盘挂载地址
#file:///media/cdrom/
#file:///media/cdrecorder/
#注释这两个的不存在地址
gpgcheck=1
enabled=1
#把enabled=0改为enabled=1, 让这个yum源配置文件生效
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

配置完成,现在可以感受一下yum的便捷了。

Linux RPM包的特点、安装、升级和卸载方法

伊阳阅读()

本文最后更新于2021年2月9日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

在Linux系统中,程序安装一般有两种安装方式,一种称为“源码包”,一种为RPM包。今天主要说的是RMP的特点及安装方式。

首先,要说的是RPM 包的优点:

  • 包管理系统简单,只通过几个命令就可以实现包的安装、升级、査询和卸载。
  • 安装速度比源码包安装快得多。

RPM 包的缺点:

  • 经过编译,不能在看到源代码。
  • 功能选择不如源码包灵活。
  • 依赖性。有时我们会发现,在安装软件包 a 时需要先安装 b 和 c,而在安装 b 时需要先安装 d 和 e。这就需要先安装 d 和 e,再安装 b 和 c,最后才能安装 a。比如,我买了一个漂亮的灯具,打算安装在客厅里,可是在安装灯具之前,客厅需要有顶棚,并且顶棚需要刷好油漆。安装软件和装修及其类似,需要有一定的顺序,但是有时依赖性会非常强。

下面将说明RPM包的安装、升级及卸载方法

RPM 包默认安装路径

RPM 包一般采用系统默认路径安装,安装路径如下:

/etc/              配置文件安装目录
/usr/bin/          可执行的命令安装目录
/usr/lib/          程序所使用的函数库保存位置
/usr/share/doc/    基本的软件使用手册保存位置
/usr/share/man/    帮助文件保存位置
 
注意:RPm可以指定安装路径,但是一旦手工指定安装路径,所有的安装文件就会安装到手工指定位置,而不会安装到系统默认位置。而系统的默认搜索位置并不会改变,依然会去默认位置之下搜索,当然系统就不能直接找到所需的文件,也就失去了作为系统默认安装路径的一些好处。所以我们一般不会指定 RPM 包的安装路径,而使用默认安装路径。
RPM包的安装
[root@localhost ~]# rpm -ivh 包全名
#注意一定是包全名。如果是跟包全名的命令,则要注意路径,因为软件包在光盘当中
 
  • -i:安装(install);
  • -v:显示更详细的信息(verbose);
  • -h:打印 #,显示安装进度(hash);

例如,安装 apache 软件包,注意出现两个 100% 才是正确安装,第一个 100% 仅是在准备,第二个 100% 才是正确安装。如下所示:

[root@localhost ~]# rpm -ivh \
/mnt/cdrom/Packages/httpd-2.2.15-15.el6.centos.1.i686.rpm
Preparing...
####################
[100%]
1:httpd
####################
[100%]
 

如果打算同时安装多个软件包呢?可以用一条命令同时安装,将多个软件包用空格分开就可以了。

[root@localhost ~]# rpm -ivh a.rpm b.rpm c.rpm
#一次安装多个软件包
 

如果还有其他安装要求,比如想强制安装某个软件包而不管它是否有依赖性,就可以通过选项进行调整:

  • -nodeps:不检测依赖性安装。软件安装时会检测依赖性,确定所需的底层软件是否安装,如果没有安装则会报错。如果不管依赖性,想强制安装,则可以使用这个选项。注意:这样不检测依赖性安装的软件基本上是不能使用的,所以不建议这样做。
  • -replacefiles:替换文件安装。如果要安装软件包,但是包中的部分文件已经存在,那么在正常安装时会报”某个文件已经存在”的错误,从而导致软件无法安装。使用这个选项可以忽略这个报错而覆盖安装。
  • -replacepkgs:替换软件包安装。如果软件包已经安装,那么此选项可以把软件包重复安装一遍。
  • -force:强制安装。不管是否已经安装,都重新安装。也就是-replacefiles和-replacepkgs的综合。
  • -test:测试安装。不会实际安装,只是检测一下依赖性。
  • -prefix:指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。注意:如果指定了安装路径,软件没有安装到系统默认路径中,那么系统会找不到这些安装的软件,需要进行手工配置才能被系统识别。所以,我们一遍采用默认路径安装RPM包。

apache 服务安装成功后,尝试启动。命令如下:

[root@localhost ~]# service 服务名 start|stop| restart|status
 

参数:

  • start:启动服务;
  • stop:停止服务;
  • restart:重启服务;
  • status: 査看服务状态;

例如:

[root@localhost ~]# service httpd start #启动apache服务
 

服务启动之后,就可以査看端口号 80 是否出现。命令如下:

[root@localhost ~]# netstat -tlun | grep 80
tcp 0 0 :::80 :::* LISTEN
 
注意,RPM 包默认保存在系统光盘的 Packages(注意 P 大写)目录中,所以在安装软件前需要挂载光盘。

例如:

mkdir/mnt/cdrom <-建立挂载点
mount /dev/cdrom /mnt/cdrom <-挂载光盘
 

我们一直在说依赖性很麻烦,那么依赖性报错是什么样呢?我们来继续说说 gcc 这个软件,刚刚我们在写 hello.c 的时候假设这个软件已经安装成功了。其实,如果采用"基本服务器"方式安装 Linux 系统,那么 gcc 这个软件是没有安装的,需要我们手工安装,但是安装这个软件是会报依赖性错误的。

[root@localhost ~]# rpm -ivh /mnt/cdrom/Packages/ gcc-4.4.6-4.el6.i686.rpm
error: Failed dependencies: <―依赖性错误
cloog-ppi >= 0.15 is needed by gcc-4.4.6-4.el6.i686
cpp = 4.4.6-4.el6 is needed by gcc-4.4.6-4.el6.i686
glibc-devel >= 2.2.90-12 is needed by gcc-4.4.6-4.el6.i686
 

这里的依赖性很明显,需要我们先安装 cloog-ppl、cpp 和 glibc-devel 三个软件,其中:

  • ">="表示版本要大于或等于所显示版本;
  • "<="表示版本要小于或等于所显示版本;
  • "="表示版本要等于所显示版本;

我们当然可以手工安装,只是比较麻烦。那么,有办法让它自动解决依赖性,直接安装吗?有,我们可以使用 yum 在线安装工具,它会自动安装依赖的软件,帮助我们解决依赖性。所以,再卖一个关子,我们不在这里安装 gcc,留到安装 yum 的时候让 gcc 自动安装。

RPM包的升级

[root@localhost ~]# rpm -Uvh 包全名
 

选项:
-U(大写):升级安装。如果没有安装过,则系统直接安装。如果安装过的版本较低,则升级到新版本(upgrade);

[root@localhost ~]# rpm -Fvh 包全名
 

选项:
-F(大写):升级安装。如果没有安装过,则不会安装。必须安装有较低版本才能升级(freshen);

RPM包卸载

卸载是有依赖性的。比如,在安装的时候,要先安装 httpd 软件包,再安装 httpd 的功能模块 mod_ssl 包。那么,在卸载的时候,一定要先卸载 mod_ssl 软件包,再卸载 httpd 软件包,否则就会报错。软件包卸载和拆除大楼是一样的,你要拆除 2 楼和 3 楼,一定要先拆除 3 楼。
删除格式非常简单,如下:

[root@localhost ~]# rpm -e 包名
 

选项:
-e 卸载(erase);
如果不按依赖性卸载,就会报依赖性错误。例如:

[root@localhost ~]# rpm -e httpd
error: Failed dependencies:
httpd-mmn = 20051115 is needed by (installed) mod_wsgi-3.2-1.el6.i686
httpd-mmn = 20051115 is needed by (installed) php-5.3.3-3.el6_2.8.i686
httpd-mmn = 20051115 is needed by (installed) mod_ssl-1:2.2.15-15.el6.
centos.1.i686
httpd-mmn = 20051115 is needed by (installed) mod_perl-2.0.4-10.el6.i686
httpd = 2.2.15-15.el6.centos.1 is needed by (installed) httpd-manual-2.2.
15-15.el6.centos.1 .noarch
httpd is needed by (installed) webalizer-2.21_02-3.3.el6.i686
httpd is needed by (installed) mod_ssl-1:2.2.15-15.el6.centos.1.i686
httpd=0:2.2.15-15.el6.centos.1 is needed by(installed)mod_ssl-1:2.2.15-15.el6.centos.1.i686
 

当然,卸载命令是支持"--nocteps"选项的,可以不检测依赖性直接卸载。但是,如果这样做,则很可能导致其他软件包无法正常使用,所以并不推荐这样卸载。

Linux网络接口的配置

伊阳阅读()

本文最后更新于2021年2月9日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

当我们在Linxu系统中,想查看IP地址信息时,该如何操作呢?这里,我们会用到命令 ifconfig ,其主要作用是查看IP地址的信息。如:

root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:OC:29:C5:FB:AA #eth0网卡信息 网络类型为以太网 MAC地址
inet addr:192.168.44.3 Beast:192.168.44.255 Mask:255.255.255.0
#IP地址 广播地址 子网掩码
inet6 addr: fe80::20c:29ff:fec5:fbaa/64 Scope:Link #IPv6的地址(目前不生效)
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 #网络参数  最大传输单元数据包转送次数
RX packets:881 errors:0 dropped:0 overruns:0 frame:0
#接收到的数据包惰况
TX packets:8S3 errors:0 dropped:0 overruns:0 carrier:0
#发送的数据包情况
collisions:0 txqueuelen:1000
#数据包碰撞 数据缓冲区长度
RX bytes:82229 (80.3 KiB) TX bytes:273463 (267.0 KiB)
#接收包的大小 发送包的大小
Interrupt:19 Base address:0x2000
#IRQ中街 内存地址
lo Link encap:Local Loopback
#本地回环网卡信息
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
RX bytes:840 (840.0 b) TX bytes:840 (840.0 b)
 

ifconfig 命令主要用于査看 IP 地址、子网掩码和 MAC 地址这三类信息。

lo 网卡是 Loopback 的缩写,也就是本地回环网卡,这个网卡的 IP 地址是 127.0.0.1。它只代表我们的网络协议正常,就算不插入网线也可以 ping 通,所以基本没有实际使用价值,大家了解一下即可。
那么,当我们要配置临时IP地址,该如何操作呢?可以利用下列命令进行配置:

[root@localhost ~]#ifconfig eth0 192.168.44.3
#配置IP地址,不指定子网掩码就会使用标准子网掩码
[root@localhost ~]#ifconfig eth0 192.168.44.3 netmask 255.255.255.0
#配置IP地址,同时配置子网掩码
 

但需要说明的是,上述命令当系统一重启,配置就会失效。所以我们还是应该使用 setup 命令进行 IP 地址配置。

Linux权限位的说明

伊阳阅读()

本文最后更新于2021年2月9日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

当我看到Linux的权限位说明时,做了如下解释,今天就把看到的记录下来,以备后期查看。
当使用ls 命令时,用长格式显示的第一列会是文件的权限,例如:

[root@localhost ~]# ls -linstall.log
-rw-r--r--.1 root root 24772 1月 14 18:17 install.log

第一列的权限位如果不计算最后的”.”(这个点的含义我们在后面解释),则共有 10 位,这 10位权限位的含义如图

第 1 位代表文件类型。Linux 不像 Windows 使用扩展名表示文件类型,而是使用权限位的第 1 位表示文件类型。虽然 Linux 文件的种类不像 Windows 中那么多,但是分类也不少,详细情况可以使用”info ls”命令查看。

  • -“-“:普通文件。
  • -“b”:块设备文件。这是一种特殊设备文件,存储设备都是这种文件,如分区文件 /dev/sda1 就是这种文件。
  • -“c”:字符设备文件。这也是特殊设备文件,输入设备一般都是这种文件,如鼠标、键盘等。
  • -“d”:目录文件。Linux 中一切皆文件,所以目录也是文件的一种。
  • -“l”:软链接文件。
  • -“p”:管道符文件。这是一种非常少见的特殊设备文件。
  • -“s”:套接字文件。这也是一种特殊设备文件,一些服务支持 Socket 访问,就会产生这样的文件。

第 2~4 位代表文件所有者的权限。

  • -r:代表 read,是读取权限。
  • -w:代表 write,是写权限。
  • -x:代表 execute,是执行权限。

如果有字母,则代表拥有对应的权限;如果是”-“,则代表没有对应的权限。
第 5~7 位代表文件所属组的权限,同样拥有”rwx”权限。

第 8~10 位代表其他人的权限,同样拥有”rwx”权限。

[root@localhost ~]#ls -linstall.log
-rw-r--r--.1 root root 24772 1月 14 18:17 install.log

这个文件的所有者,也就是 root 拥户,拥有读和写权限;所属组中的用户,也就是 root 组中除 root 用户以外的其他用户,拥有只读权限;而其他人拥有只读权限。

最后,我们再看看权限位的这个”.”的作用。这个点是在 CentOS 6 以上的系统中才出现的,在以前的系统中是没有的。如果在文件的权限位中含有”.”,则表示这个文件受 SELinux 的安全规则管理。

绝对路径和相对路径的区别

伊阳阅读()

本文最后更新于2021年2月9日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

这段时间在学习Linux的相关知识,当中介绍了绝对路径与相对路径的区别,以及两种路径如何使用。下面是有关两者的区别与使用方法。

在学习之前,我们先要弄明白什么是绝对的、什么又是相对的。其实我们一直说现实生活中没有绝对的事情,没有绝对的大,也没有绝对的小;没有绝对的快,也没有绝对的慢。这只是由于参照物的不同或认知的局限,导致会暂时认为某些东西可能是绝对的、不能改变的。比如目前我们认为光速是最快的速度,我们不能突破光速的限制。但也有可能随着技术的进步,我们会突破这一限制。

而在Linux的路径中是有绝对路径的,那是因为Linux有最高目录,也就是根目录。如果路径是从根目录开始,一级一级指定的,那使用的就是绝对路径。

例如:

[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# cd /etc/rc.d/init.d/
 

上述切换目录的方法用的就是绝对路径。
那么所谓相对路径指的是只从当前所在目录开始,切换目录。例如:

[root@localhost /]# cd etc/
 

#当前所在路径是/目录,而/目录下有etc目录,所以可以切换

[root@localhost etc]# cd etc/
-bash:cd:etc/:没有那个文件或目录
 

#而同样的命令,由于当前所在目录改变了,所以就算是同一个命令也会报错,除非在/etc/目录中还有一个etc目录

所以,虽然绝对路径输入更加烦琐,但是更准确,报错的可能性也更小。对于初学者而言,大家还是使用绝对路径比较好。

再举个例子,假设我当前在 root 用户的家目录中。

[root@localhost ~]#
 

那么,该如何使用相对路径进入 /usr/local/src/ 目录中呢?

[root@localhost ~]# cd ../usr/local/src/
 

从我当前所在路径算起,加入”..”代表进入上一级目录,而上—级目录是根目录,而根目录中有 usr 目录,就会一级一级地进入 src 目录了。

用简单方法给WordPress不同页面添加不同侧边栏

伊阳阅读()

本文最后更新于2021年4月1日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

使用wordpress也有一段时间了,可是一直没有去好好学习他。对于写代码,不是很在行。所以呢,就只有在原有模板的基础上改动改动。下文要说的就是如何让wordpress在不同页面显示不同的侧边栏。

今天就介绍下比较简单方法,给Wordpress根据不同页面添加不同的侧边栏。

在模板文件夹下建立另外sidebar1.php、sidebar2.php、sidebar3.php等,修改每个文件需要显示的内容,然后在不同页面中调用不同的文件。

比如首页的侧边栏按照sidebar1.php的修改显示,在index.php文件最后找到

<?php get_sidebar(); ?>,

然后把他修改为:

<?php include (TEMPLATEPATH . '/sidebar1.php'); ?>

同样地原理,你也可以修改single.php等文件。是不是根据很简单呢!!!

深信服防火墙端口映射配置

伊阳阅读()

本文最后更新于2020年9月23日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

今年我负责的一个项目配备了1台深信服的防火墙AF-1020,内外网都配置完成,但项目需要将一台服务器映射到外网中,之后查阅配备的使用说明书,也没有交代如何配置。最终还是在公司同事的帮助下完成了服务器的内外网端口映射,下面我就将配置步骤列举出来,以便后期需要。

一、需要新增一个业务,也就是要映射的内网服务器。

1、按照:对象–>网络对象–>新增–>业务

业务

2、之后会弹出,其中:名称,自己填一个(如:1.51)

3、服务器配置点击“新增”,填入需要映射的服务器内网ip(如:10.19.1.51)

4、点击“确定”后,在点击“保存”。

业务就添加完成了。

二、新增一个自定义服务,如开放8084端口。

1、按照:对象–>服务–>自定义服务–>新增

2、名称,根据自己需要填,如tcp8084;TCP栏填入要进行映射的端口。
之后,点击确定后,服务也就添加完成了。

三、下来要进行地址转换配置。
内容查看

此隐藏内容查看价格1立即支付

五、现在还剩最后一步,需要添加安全策略

1、按照:策略–>安全策略–>安全防护策略–>新增–>业务防护策略

2、策略名称,自己填一个,如permit_1.51,源区域选择“外网”,网络对象选择“全部”,目的区域选择“内网”,网络对象选择“1.51”,点击下一步

3、漏洞攻击防护选择默认,动作为拒绝;内容安全选择默认,动作为允许,点击下一步

4、僵尸网络选择默认模板,动作选择允许,点击确定

通过上述5个步骤的配置,内网服务器映射已经完成。如果又域名的话可以是:域名+端口号,也可以是:外网IP+端口号。还要提醒的是,在配置外网的端口时,一定要确认运营商是否对改端口进行了封禁,如果封禁了,需要重新设置一个未封禁的端口。

本人文笔有限,望见谅~~~

如何使WordPress退出登录后跳转到指定页面

伊阳阅读()

本文最后更新于2021年4月1日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

目前从WordPress后台退出登陆后会跳转到登录界面,然后必须再点击一下跳转到首页,才可以,这样子显得很麻烦。如果我们需要Wordpress退出后跳到外面地址,那要如何实现呢?下面将介绍实现的方法。

将下面的php代码放到当前主题的functions.php中即可:

add_filter('logout_url', 'logout_redirect', 10,2); 
function logout_redirect($turl, $redir) {
  $redir = 'http://www.abc.net/'; // 这里改成你要跳转的网址
  return $logouturl . '&redirect_to=' . urlencode($redir);
}

之后,你在后台页面上点击退出后,就可以跳转到指定页面了。

WordPress获取文章浏览次数及获取浏览次数最多的文章

伊阳阅读()

本文最后更新于2021年4月1日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

纯代码统计文章浏览次数
1、在主题的 functions.php文件的最后一个 ?> 前面添加下面的代码:

function record_visitors(){   
  if (is_singular()){   
      global $post;   
      $post_ID = $post->ID;   
      if($post_ID){   
         $post_views = (int)get_post_meta($post_ID, 'views', true);   
         if(!update_post_meta($post_ID, 'views', ($post_views+1))) {   
            add_post_meta($post_ID, 'views', 1, true);   
         }   
      }   
    }   
}   
add_action('wp_head', 'record_visitors');   
//函数名称:post_views   
//函数作用:取得文章的阅读次数   
function post_views($before = '(点击 ', $after = ' 次)', $echo = 1) {   
  global $post;   
  $post_ID = $post->ID;   
  $views = (int)get_post_meta($post_ID, 'views', true);   
  if ($echo) echo $before, number_format($views), $after;   
  else return $views;   
}  

2、在需要显示该统计次数的地方使用下面的代码调用:

<?php post_views(' ', ' 次'); ?>

获取浏览次数最多的文章
1、这个一般来说,就是用来获得热门文章了.如果要获取上面的函数统计出来的浏览次数最多的文章,可以在 functions.php文件的最后一个 ?>; 前面添加下面的代码:

//函数作用:取得阅读最多的文章   
function get_most_viewed_format($mode = '', $limit = 10, $show_date = 0, $term_id = 0, $beforetitle= '(', $aftertitle = ')', $beforedate= '(', $afterdate = ')', $beforecount= '(', $aftercount = ')') {   
  global $wpdb, $post;   
  $output = '';   
  $mode = ($mode == '') ? 'post' : $mode;   
  $type_sql = ($mode != 'both') ? "AND post_type='$mode'" : '';   
  $term_sql = (is_array($term_id)) ? "AND $wpdb->term_taxonomy.term_id IN (" . join(',', $term_id) . ')' : ($term_id != 0 ? "AND   $wpdb->term_taxonomy.term_id = $term_id" : '');   
  $term_sql.= $term_id ? " AND $wpdb->term_taxonomy.taxonomy != 'link_category'" : '';   
  $inr_join = $term_id ? "INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)" : '';   
  // database query   
  $most_viewed = $wpdb->get_results("SELECT ID, post_date, post_title, (meta_value+0) AS views FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) $inr_join WHERE post_status = 'publish' AND post_password = '' $term_sql $type_sql AND meta_key = 'views' GROUP BY ID ORDER BY views DESC LIMIT $limit");   
  if ($most_viewed) {   
   foreach ($most_viewed as $viewed) {   
    $post_ID    = $viewed->ID;   
    $post_views = number_format($viewed->views);   
    $post_title = esc_attr($viewed->post_title);   
    $get_permalink = esc_attr(get_permalink($post_ID));   
    $output .= "<li>$beforetitle$post_title$aftertitle";   
    if ($show_date) {   
      $posted = date(get_option('date_format'), strtotime($viewed->post_date));   
      $output .= "$beforedate $posted $afterdate";   
    }   
    $output .= "$beforecount $post_views $aftercount</li>";   
   }   
  } else {   
   $output = "<li>N/A</li>n";   
  }   
  echo $output;   
} 

2、然后使用下面的函数调用:

<?php get_most_viewed_format(); ?> 
说明:这里博主需要补充一下的是,用上面的方法获得的文章浏览次数统计,与WP-Postviews 插件是有所差别的,这里的代码获取的,其实就连搜索引擎爬虫也会进行统计。