Skip to content Skip to main navigation Skip to footer

Linux

Linux:Linux有问必答:如何用Perl检测Linux的发行版本

提问:我需要写一个Perl程序,它会包含Linux发行版相关的代码。为此,Perl程序需要能够自动检测运行中的Linux的发行版(如Ubuntu、CentOS、Debian、Fedora等等),以及它是什么版本号。如何用Perl检测Linux的发行版本?

如果要用Perl脚本检测Linux的发行版,你可以使用一个名为Linux::Distribution的Perl模块。该模块通过检查/etc/lsb-release以及其他在/etc下的发行版特定的目录来猜测底层Linux操作系统。它支持检测所有主要的Linux发行版,包括Fedora、CentOS、Arch Linux、Debian、Ubuntu、SUSE、Red Hat、Gentoo、Slackware、Knoppix和Mandrake。

Linux:Linux有问必答:如何用Perl检测Linux的发行版本
Linux:Linux有问必答:如何用Perl检测Linux的发行版本

要在Perl中使用这个模块,你首先需要安装它。

在Debian或者Ubuntu上安装 Linux::Distribution

基于Debian的系统直接用apt-get安装

$ sudo apt-get install liblinux-distribution-packages-perl

在Fedora、CentOS 或者RHEL上安装 Linux::Distribution

如果你的Linux没有Linux::Distribution模块的安装包(如基于红帽的系统),你可以使用CPAN来构建。

首先确保你的Linux系统安装了CPAN

$ sudo yum -y install perl-CPAN

然后,使用这条命令来构建并安装模块:

$ sudo perl -MCPAN -e 'install Linux::Distribution'

用Perl确定Linux发行版

Linux::Distribution模块安装完成之后,你可以使用下面的代码片段来确定你运行的Linux发行版本。

use Linux::Distribution qw(distribution_name distribution_version);
my $linux = Linux::Distribution->new;
if ($linux) {
  my $distro = $linux->distribution_name();
  my $version = $linux->distribution_version();
  print "Distro: $distro $versionn";
}
else {
  print "Distro: unknownn";
}

via: http://ask.xmodulo.com/detect-linux-distribution-in-perl.html

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-3961-1.html

Linux:你不一定知道,如何重置CentOS 7的Root密码

重置Centos 7 Root密码的方式和Centos 6完全不同。让我来展示一下到底如何操作。

Linux:你不一定知道,如何重置CentOS 7的Root密码
Linux:你不一定知道,如何重置CentOS 7的Root密码

1 – 在启动grub菜单,选择编辑选项启动

Linux:你不一定知道,如何重置CentOS 7的Root密码
Linux:你不一定知道,如何重置CentOS 7的Root密码

2 – 按键盘e键,来进入编辑界面

Linux:你不一定知道,如何重置CentOS 7的Root密码
Linux:你不一定知道,如何重置CentOS 7的Root密码

3 – 找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/sh

Linux:你不一定知道,如何重置CentOS 7的Root密码
Linux:你不一定知道,如何重置CentOS 7的Root密码

4 – 现在按下 Control+x ,使用单用户模式启动

Linux:你不一定知道,如何重置CentOS 7的Root密码
Linux:你不一定知道,如何重置CentOS 7的Root密码

5 – 现在,可以使用下面的命令访问系统

chroot /sysroot

6 – 重置密码

passwd root

7 – 更新系统信息

touch /.autorelabel

8 – 退出chroot

exit

9 – 重启你的系统

reboot

就是这样!


via: http://www.unixmen.com/reset-root-password-centos-7/

作者:M.el Khamlichi 译者:su-kaiyao 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-3962-1.html

Linux:CentOS 7下搭建高可用集群

Linux:CentOS 7下搭建高可用集群
Linux:CentOS 7下搭建高可用集群

本文以两台机器实现双集热备高可用集群,主机名node1IP192.168.122.168 ,主机名node2IP192.168.122.169

一、安装集群软件

必须软件pcspacemakercorosyncfence-agents-all,如果需要配置相关服务,也要安装对应的软件

二、配置防火墙

1、禁止防火墙和selinux

# systemctl disable firewalld
# systemctl stop firewalld

修改/etc/sysconfig/selinux确保SELINUX=disabled,然后执行setenforce 0或者reboot服务器以生效

2、设置防火墙规则

# firewall-cmd --permanent --add-service=high-availability
# firewall-cmd --add-service=high-availability

 三、各节点之间主机名互相解析

分别修改2台主机名分别为node1node2,在centos 7中直接修改/etc/hostname加入本机主机名和主机表,然后重启网络服务即可。

#vi /etc/hostname
node1
#systemctl restart network.service
#hostname
node1

 配置2台主机的主机表,在/etc/hosts中加入

192.168.122.168 node1
192.168.122.169 node2

 四、各节点之间时间同步

node1node2分别进行时间同步,可以使用ntp实现。 

[root@node1 ~]# ntpdate 172.16.0.1 //172.16.0.1 为时间服务器 

五、各节点之间配置ssh的无密码密钥访问。

下面的操作需要在各个节点上操作。

# ssh-keygen -t rsa -P ‘’   #这个生成一个密码为空的公钥和一个密钥,把公钥复制到对方节点上即可
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node2 #对方主机名用登录用户名

两台主机都要互相可以通信,所以两台主机都得互相生成密钥和复制公钥,相互的节点上的hosts文件是都要解析对方的主机名, 192.168.122.168 node1 192.168.122.169 node2 

# ssh node2 ‘date’;date #测试一下是否已经互信 

六、通过pacemaker来管理高可用集群

1、创建集群用户

为了有利于各节点之间通信和配置集群,在每个节点上创建一个hacluster的用户,各个节点上的密码必须是同一个。

# passwd hacluster
Changing password for user hacluster.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

2、设置pcsd开机自启动

# systemctl start pcsd.service
# systemctl enable pcsd.service

3、集群各节点之间进行认证

# pcs cluster auth node1 node2Username: hacluster Password: node1: Authorized node2: Authorized

4、创建并启动集群

[root@z1 ~]# pcs cluster setup --start --name my_cluster node1 node2
node1: Succeeded
node1: Starting Cluster...
node2: Succeeded
node2: Starting Cluster...

5、设置集群自启动

# pcs cluster enable –all

6、查看集群状态信息

[root@z1 ~]# pcs cluster status

7、设置fence设备

这个可以参考

corosync默认启用了stonith,而当前集群并没有相应的stonith设备,因此此默 认配置目前尚不可用,这可以通过如下命令验证:

#crm_verify -L -V

可以通过如下面命令禁用stonith

#pcs property set stonith-enabled=false(默认是true)

8、配置存储

高可用集群既可以使用本地磁盘来构建纯软件的镜像型集群系统,也可以使用专门的共享磁盘装置来构建大规模的共享磁盘型集群系统,充分满足客户的不同需求。

共享磁盘主要有iscsiDBRD。本文并没有使用共享磁盘。

9、配置浮点IP

不管集群服务在哪运行,我们要一个固定的地址来提供服务。在这里我选择192.168.122.101作为浮动IP,给它取一个好记的名字 ClusterIP 并且告诉集群 每30秒检查它一次。

# pcs resource create VIP ocf:heartbeat:IPaddr2 ip=192.168.122.170 cidr_netmask=24 op monitor interval=30s
# pcs update VIP op monitor interval=15s

10、配置apache服务

node1node2上安httpd ,确认httpd开机被禁用

# systemctl status httpd.service;

配置httpd监控页面(貌似不配置也可以通过systemd监控),分别在node1node2上执行

# cat > /etc/httpd/conf.d/status.conf << EOF
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost
EOF

首先我们为Apache创建一个主页。在centos上面默认的Apache docroot/var/www/html,所以我们在这个目录下面建立一个主页。

node1节点修改如下:

[root@node1 ~]# cat <<-END >/var/www/html/index.html

Hello node1

END

node2节点修改如下:

[root@node2 ~]# cat <<-END >/var/www/html/index.html

Hello node2

END

下面语句是将httpd作为资源添加到集群中:

#pcs resource create WEB apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status"

11、创建group

VIPWEB resource捆绑到这个group中,使之作为一个整体在集群中切换。(此配置为可选)

# pcs resource group add MyGroup VIP
# pcs resource group add MyGroup WEB

12、配置服务启动顺序

以避免出现资源冲突,语法:(pcs resource group add的时候也可以根据加的顺序依次启动,此配置为可选)

# pcs constraint order [action] then [action]
# pcs constraint order start VIP then start WEB

13、指定优先的 Location (此配置为可选)

Pacemaker 并不要求你机器的硬件配置是相同的,可能某些机器比另外的机器配置要好。这种状况下我们会希望设置:当某个节点可用时,资源就要跑在上面之类的规则。为了达到这个效果我们创建location约束。同样的,我们给他取一个描述性的名字(prefer-node1),指明我们想在上面跑WEB 这个服务,多想在上面跑(我们现在指定分值为50,但是在双节点的集群状态下,任何大于0的值都可以达到想要的效果),以及目标节点的名字:

# pcs constraint location WEB prefers node1=50
# pcs constraint location WEB prefers node2=45

这里指定分值越大,代表越想在对应的节点上运行。

14、资源粘性(此配置为可选)

一些环境中会要求尽量避免资源在节点之间迁移。迁移资源通常意味着一段时间内无法提供服务,某些复杂的服务,比如Oracle数据库,这个时间可能会很长。

为了达到这个效果,Pacemaker 有一个叫做“资源粘性值”的概念,它能够控制一个服务(资源)有多想呆在它正在运行的节点上。

Pacemaker为了达到最优分布各个资源的目的,默认设置这个值为0。我们可以为每个资源定义不同的粘性值,但一般来说,更改默认粘性值就够了。资源粘性表示资源是否倾向于留在当前节点,如果为正整数,表示倾向,负数则会离开,-inf表示负无穷,inf表示正无穷。

# pcs resource defaults resource-stickiness=100

 

常用命令汇总:

查看集群状态#pcs status

查看集群当前配置:#pcs config

开机后集群自启动:#pcs cluster enable –all

启动集群:#pcs cluster start –all

查看集群资源状态:#pcs resource show

验证集群配置情况:#crm_verify -L -V

测试资源配置:#pcs resource debug-start resource

设置节点为备用状态:#pcs cluster standby node1

来源:https://linux.cn/article-3963-1.html

Linux:在Linux中使用LVM构建灵活的磁盘存储(第一部分)

Linux:在Linux中使用LVM构建灵活的磁盘存储(第一部分)
Linux:在Linux中使用LVM构建灵活的磁盘存储(第一部分)

逻辑卷管理器(LVM)让磁盘空间管理更为便捷。如果一个文件系统需要更多的空间,可以在它的卷组中将空闲空间添加到其逻辑卷中,而文件系统可以根据你的意愿调整大小。如果某个磁盘启动失败,用于替换的磁盘可以使用卷组注册成一个物理卷,而逻辑卷扩展可以将数据迁移到新磁盘而不会丢失数据。

Linux:在Linux中使用LVM构建灵活的磁盘存储(第一部分)
Linux:在Linux中使用LVM构建灵活的磁盘存储(第一部分)
在Linux中创建LVM存储

在如今,每台服务器空间都会因为我们的需求增长而不断扩展。逻辑卷可以用于RAID,SAN。单个物理卷将会被加入组以创建卷组,在卷组中,我们需要切割空间以创建逻辑卷。在使用逻辑卷时,我们可以使用某些命令来跨磁盘、跨逻辑卷扩展,或者减少逻辑卷大小,而不用重新格式化和重新对当前磁盘分区。卷可以跨磁盘抽取数据,这会增加I/O数据量。

LVM特性

  • 可以在任何时候灵活地扩展空间。
  • 可以安装和处理任何文件系统。
  • 可以通过迁移来恢复错误磁盘。
  • 可以使用快照功能恢复文件系统到先前的阶段。等等……

我的服务器设置 – 需求

  • 操作系统 —— 安装有LVM的CentOS 6.5
  • 服务器IP地址 —— 192.168.0.200

在Linux中创建LVM磁盘存储

1. 我们已经在虚拟磁盘(VDA)中使用了带LVM的CentOS 6.5操作系统。在此,我们可以使用下列命令查看到物理卷(PV),卷组(VG),逻辑卷(LV)。

# pvs
# vgs
# lvs

Linux:在Linux中使用LVM构建灵活的磁盘存储(第一部分)
Linux:在Linux中使用LVM构建灵活的磁盘存储(第一部分)
检查物理卷

下面是上面截图中各个参数的说明。

  • 物理磁盘大小(PV Size)
  • 用作虚拟磁盘vda的磁盘
  • 卷组大小(VG Size)
  • 卷组名称(vg_tecmint)
  • 逻辑卷名称(LogVol00,LogVol01)
  • LogVol00分配给swap,大小1GB
  • LogVol01分配给/,大小16.5GB

从上面看,我们可以知道VDA磁盘中没有足够的空闲空间。

2. 为了创建一个新卷组,我们需要在这台服务器上添加额外的3个硬盘。3个驱动器不是强制使用的,只要一个就足够用来创建新的VG,并在其中创建LV了。我在这里添加了更多的磁盘,目的只是用于演示和更多命令功能的说明。

下面是我已经额外添加的磁盘。

sda, sdb, sdc

# fdisk -l

Linux:在Linux中使用LVM构建灵活的磁盘存储(第一部分)
Linux:在Linux中使用LVM构建灵活的磁盘存储(第一部分)
验证添加的磁盘

  • 用于操作系统(CentOS 6.5)的默认磁盘。
  • 默认磁盘上定义的分区(vda1 = swap),(vda2 = /)。
  • 额外添加的磁盘Disk1,Disk2,Disk3。

各个磁盘大小都是20GB,默认的卷组的PE大小为4MB,我们在该服务器上配置的卷组使用默认PE。

Linux:在Linux中使用LVM构建灵活的磁盘存储(第一部分)
Linux:在Linux中使用LVM构建灵活的磁盘存储(第一部分)
卷组显示

  • VG Name – 卷组名称。
  • Format – LVM架构使用LVM2。
  • VG Access – 卷组为读写模式,备好待用。
  • VG Status – 卷组可调整大小,如果我们需要添加更多空间,我们可以扩展更多。
  • Cur LV – 当前卷组中有2个逻辑卷。
  • CurPV and Act PV – 当前使用的物理磁盘是1(vda),已被激活,因此我们可以使用该卷组。
  • PE Size – 磁盘的物理扩展大小,可以定义使用PE,或者GB,LVM的默认PE大小是4MB。例如,如果我们需要创建5GB大小的逻辑卷,我们可以使用总计1280 PE,你们懂我的意思么?

这里解释一下 -> 1024MB = 1GB,这样的话,1024MB x 5 = 5120PE = 5GB,然后5120/4 = 1280,4是默认的PE大小。

  • Total PE – 该卷组具有的PE数量。
  • Alloc PE – 总的PE使用量,已经使用的全部PE,4482 x 4PE = 17928。
  • Free PE – 这里因为已经使用,所以没有空闲PE了。

3. 只使用了vda,当前CentOS在使用lvm的vda物理磁盘中安装了/boot,/,swap,,该磁盘中没有空间剩余。

# df -TH

Check the Disk Space
检查磁盘空间

上面的图片中显示了用于根的挂载点已使用了18GB,因此没有空闲空间可用了。

4. 那么,让我们创建新的物理卷(pv),以及名为tecmintaddvg的卷组(vg),并在其中创建逻辑卷(lv)。这里,我们可以创建4个逻辑卷,分别名为 tecmint_documentstecmint_manager以及tecmintaddvg

我们可以扩展当前使用的卷组以获得更多空间。但在这里,我们将要做的是,创建新的卷组,然后在里面肆意妄为吧。过会儿,我们可以看到怎样来扩展使用中的卷组的文件系统。

在使用新磁盘前,我们需要使用fdisk来对磁盘分区。

# fdisk -cu /dev/sda
  • c – 关闭DOS兼容模式,推荐使用该选项。
  • u – 当列出分区表时,会以扇区而不是柱面显示。

Linux:在Linux中使用LVM构建灵活的磁盘存储(第一部分)
Linux:在Linux中使用LVM构建灵活的磁盘存储(第一部分)
创建新的物理分区

接下来,请遵循以下步骤来创建新分区。

  • 选择n来创建新分区。
  • 选择p来创建主分区。
  • 选择我们需要创建的分区号。
  • Enter两次来使用整个磁盘空间。
  • 我们需要修改新创建的分区类型,输入t
  • 选择需要修改的分区号,选择我们创建的分区号1
  • 这里,我们需要修改类型。我们需要创建LVM,因此我们使用LVM的类型代码8e。如果不知道类型代码,按L来列出所有类型代码。
  • 打印我们创建的分区以确认。
  • 这里我们可以看到Linux LVM的ID 8e。
  • 写入修改并退出fdisk。

重复以上步骤,为另外2个磁盘sdb和sdc创建新分区。然后重启机器,使用fdisk命令来验证分区表。

# fdisk -l

Linux:在Linux中使用LVM构建灵活的磁盘存储(第一部分)
Linux:在Linux中使用LVM构建灵活的磁盘存储(第一部分)
验证分区表

来源:https://linux.cn/article-3965-1.html

Linux:配置 Linux 的访问控制列表(ACL)

使用拥有权限控制的Liunx,工作是一件轻松的任务。它可以定义任何user,group和other的权限。无论是在桌面电脑或者不会有很多用户的虚拟Linux实例,或者当用户不愿意分享他们之间的文件时,这样的工作是很棒的。然而,如果你是在一个大型组织,你运行了NFS或者Samba服务给不同的用户,然后你将会需要灵活的挑选并设置很多复杂的配置和权限去满足你的组织不同的需求。

Linux:配置 Linux 的访问控制列表(ACL)
Linux:配置 Linux 的访问控制列表(ACL)

Linux(和其他Unix等POSIX兼容的操作系统)有一种被称为访问控制列表(ACL)的权限控制方法,它是一种权限分配之外的普遍范式。例如,默认情况下你需要确认3个权限组:owner、group和other。而使用ACL,你可以增加权限给其他用户或组别,而不单只是简单的”other”或者是拥有者不存在的组别。可以允许指定的用户A、B、C拥有写权限而不再是让他们整个组拥有写权限。

ACL支持多种Linux文件系统,包括ext2, ext3, ext4, XFS, Btfrs, 等。如果你不确定你的文件系统是否支持ACL,请参考文档。

在文件系统使ACL生效

首先,我们需要安装工具来管理ACL。

Ubuntu/Debian 中:

$ sudo apt-get install acl

CentOS/Fedora/RHEL 中:

# yum -y install acl

Archlinux 中:

# pacman -S acl

出于演示目的,我将使用ubuntu server版本,其他版本类似。

安装ACL完成后,需要激活我们磁盘分区的ACL功能,这样我们才能使用它。

首先,我们检查ACL功能是否已经开启。

$ mount
Linux:配置 Linux 的访问控制列表(ACL)
Linux:配置 Linux 的访问控制列表(ACL)

你可以注意到,我的root分区中ACL属性已经开启。万一你没有开启,你需要编辑/etc/fstab文件,在你需要开启ACL的分区的选项前增加acl标记。

Linux:配置 Linux 的访问控制列表(ACL)
Linux:配置 Linux 的访问控制列表(ACL)

现在我们需要重新挂载分区(我喜欢完全重启,因为我不想丢失数据),如果你对其它分区开启ACL,你必须也重新挂载它。

$ sudo mount / -o remount

干的不错!现在我们已经在我们的系统中开启ACL,让我们开始和它一起工作。

ACL 范例

基础ACL通过两条命令管理:setfacl用于增加或者修改ACL,getfacl用于显示分配完的ACL。让我们来做一些测试。

我创建一个目录/shared给一个假设的用户,名叫freeuser

$ ls -lh /
Linux:配置 Linux 的访问控制列表(ACL)
Linux:配置 Linux 的访问控制列表(ACL)

我想要分享这个目录给其他两个用户test和test2,一个拥有完整权限,另一个只有读权限。

首先,为用户test设置ACL:

$ sudo setfacl -m u:test:rwx /shared

现在用户test可以随意创建文件夹,文件和访问在/shared目录下的任何地方。

Linux:配置 Linux 的访问控制列表(ACL)
Linux:配置 Linux 的访问控制列表(ACL)

现在我们增加只读权限给用户test2:

$ sudo setfacl -m u:test2:rx /shared

注意test2读取目录需要执行(x)权限

Linux:配置 Linux 的访问控制列表(ACL)
Linux:配置 Linux 的访问控制列表(ACL)

让我来解释下setfacl命令格式:

  • -m 表示修改ACL。你可以增加新的,或修改存在的ACL
  • u: 表示用户。你可以使用 g 来设置组权限
  • test 用户名
  • :rwx 需要设置的权限。

现在让我向你展示如何读取ACL:

$ ls -lh /shared
Linux:配置 Linux 的访问控制列表(ACL)
Linux:配置 Linux 的访问控制列表(ACL)

你可以注意到,正常权限后多一个+标记。这表示ACL已经设置成功。要具体看一下ACL,我们需要运行:

$ sudo getfacl /shared
Linux:配置 Linux 的访问控制列表(ACL)
Linux:配置 Linux 的访问控制列表(ACL)

最后,如果你需要移除ACL:

$ sudo setfacl -x u:test /shared
Linux:配置 Linux 的访问控制列表(ACL)
Linux:配置 Linux 的访问控制列表(ACL)

如果你想要立即擦除所有ACL条目:

$ sudo setfacl -b /shared
Linux:配置 Linux 的访问控制列表(ACL)
Linux:配置 Linux 的访问控制列表(ACL)

最后,在设置了ACL文件或目录工作时,cp和mv命令会改变这些设置。在cp的情况下,需要添加“p”参数来复制ACL设置。如果这不可行,它将会展示一个警告。mv默认移动ACL设置,如果这也不可行,它也会向您展示一个警告。

总结

使用ACL让在你想要分享的文件上拥有更多的能力和控制,特别是在NFS/Samba服务。此外,如果你的主管共享主机,这个工具是必备的。


via: http://xmodulo.com/2014/08/configure-access-control-lists-acls-linux.html

作者:Christopher Valerio 译者:VicYu 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-3966-1.html

Linux:Linux有问必答:如何使用tcpdump来捕获TCP SYN,ACK和FIN包

问题:我想要监控TCP连接活动(如,建立连接的三次握手,以及断开连接的四次握手)。要完成此事,我只需要捕获TCP控制包,如SYN,ACK或FIN标记相关的包。我怎样使用tcpdump来仅仅捕获TCP SYN,ACK和/或FYN包?

作为业界标准的捕获工具,tcpdump提供了强大而又灵活的包过滤功能。作为tcpdump基础的libpcap包捕获引擎支持标准的包过滤规则,如基于5重包头的过滤(如基于源/目的IP地址/端口和IP协议类型)。

Linux:Linux有问必答:如何使用tcpdump来捕获TCP SYN,ACK和FIN包
Linux:Linux有问必答:如何使用tcpdump来捕获TCP SYN,ACK和FIN包

tcpdump/libpcap的包过滤规则也支持更多通用分组表达式,在这些表达式中,包中的任意字节范围都可以使用关系或二进制操作符进行检查。对于字节范围表达,你可以使用以下格式:

proto [ expr : size ]

“proto”可以是熟知的协议之一(如ip,arp,tcp,udp,icmp,ipv6),“expr”表示与指定的协议头开头相关的字节偏移量。有我们熟知的直接偏移量如tcpflags,也有取值常量如tcp-syn,tcp-ack或者tcp-fin。“size”是可选的,表示从字节偏移量开始检查的字节数量。

使用这种格式,你可以像下面这样过滤TCP SYN,ACK或FIN包。

只捕获TCP SYN包:

 # tcpdump -i  "tcp[tcpflags] & (tcp-syn) != 0"

只捕获TCP ACK包:

# tcpdump -i  "tcp[tcpflags] & (tcp-ack) != 0"

只捕获TCP FIN包:

# tcpdump -i  "tcp[tcpflags] & (tcp-fin) != 0"

之捕获TCP SYN或ACK包:

 # tcpdump -r  "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"
Linux:Linux有问必答:如何使用tcpdump来捕获TCP SYN,ACK和FIN包
Linux:Linux有问必答:如何使用tcpdump来捕获TCP SYN,ACK和FIN包

via: http://ask.xmodulo.com/capture-tcp-syn-ack-fin-packets-tcpdump.html

译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-3967-1.html

Linux:在Linux中扩展/缩减LVM(第二部分)

前面我们已经了解了怎样使用LVM创建弹性的磁盘存储。这里,我们将了解怎样来扩展卷组,扩展和缩减逻辑卷。在这里,我们可以缩减或者扩展逻辑卷管理(LVM)中的分区,LVM也可称之为弹性卷文件系统。

Linux:在Linux中扩展/缩减LVM(第二部分)
Linux:在Linux中扩展/缩减LVM(第二部分)

 

前置需求

什么时候我们需要缩减卷?

或许我们需要创建一个独立的分区用于其它用途,或者我们需要扩展任何空间低的分区。遇到这种情况时,使用 LVM我们可以很容易地缩减大尺寸的分区,以及扩展空间低的分区,只要按下面几个简易的步骤来即可。

我的服务器设置 —— 需求

  • 操作系统 – 安装有LVM的CentOS 6.5
  • 服务器IP – 192.168.0.200

如何扩展卷组以及缩减逻辑卷

扩展逻辑卷

目前,我们已经有一个PV,VG和2个LV。让我们用下面的命令来列出它们。

# pvs
# vgs
# lvs
Linux:在Linux中扩展/缩减LVM(第二部分)
Linux:在Linux中扩展/缩减LVM(第二部分)

逻辑卷扩展

在物理卷和卷组中没有空闲空间可用了,所以,现在我们不能扩展逻辑卷的大小。要扩展,我们需要添加一个物理卷(PV),然后通过扩展vg来扩展卷组,这样我们就会得到足够大的空间来扩展逻辑卷大小了。所以,首先我们应该去添加一个物理卷。

要添加一个新PV,我们必须使用fdisk来创建一个LVM分区。

# fdisk -cu /dev/sda
  • 选择n来创建新分区。
  • 选择p来创建主分区。
  • 选择我们需要创建的分区号。
  • 如果有其它可用磁盘,请按1
  • 使用t来修改分区类型。
  • 输入8e来将分区类型修改为Linux LVM。
  • 使用p来打印创建的分区(这里我们没有使用该选项)。
  • w写入修改。

完成后重启系统。

Linux:在Linux中扩展/缩减LVM(第二部分)
Linux:在Linux中扩展/缩减LVM(第二部分)

创建LVM分区

使用fdisk列出并检查我们创建的分区。

# fdisk -l /dev/sda

Linux:在Linux中扩展/缩减LVM(第二部分)
Linux:在Linux中扩展/缩减LVM(第二部分)

验证LVM分区

接下来,使用下列命令来创建新PV(物理卷)。

# pvcreate /dev/sda1

使用下面的命令来验证pv。

# pvs
Linux:在Linux中扩展/缩减LVM(第二部分)
Linux:在Linux中扩展/缩减LVM(第二部分)

创建物理卷

扩展卷组

添加该pv到vg_tecmint卷组来扩展卷组的大小,以获取更多空间来扩展lv

# vgextend vg_tecmint /dev/sda1

让我们检查现在正在使用的卷组的大小。

# vgs
Linux:在Linux中扩展/缩减LVM(第二部分)
Linux:在Linux中扩展/缩减LVM(第二部分)

扩展卷组

我们甚至可以看到哪个PV用于创建使用中的特定卷组。

# pvscan

Check Volume Group

检查卷组

这里,我们可以看到卷组所处的物理卷。我们已经添加了一个pv,而且它完全空着。在扩展逻辑卷之前,让我们先看看我们所拥有的各个卷组的大小。

Linux:在Linux中扩展/缩减LVM(第二部分)
Linux:在Linux中扩展/缩减LVM(第二部分)

检查所有逻辑卷

  • LogVol00用于Swap。
  • LogVol01用于/。
  • 现在我们有16.50GB大小的空间用于/(root)。
  • 当前有4226物理扩展(PE)可用。

现在,我们打算去扩展/分区LogVol01。在扩展后,我们可以像上面那样列出它的大小以确认。我们能可以使用GB或PE来扩展,这一点我已经在LVM第一部分解释过了,这里我使用PE来扩展。

要获取可用的物理扩展大小,运行以下命令。

# vgdisplay
Linux:在Linux中扩展/缩减LVM(第二部分)
Linux:在Linux中扩展/缩减LVM(第二部分)

检查可用的物理扩展

总共有4607空闲PE可用,亦即有18GB空间空间可用。因此,我们可以将我们的逻辑卷扩展到18GB这么大。让我们使用PE大小来扩展。

# lvextend -l +4607 /dev/vg_tecmint/LogVol01

使用+来添加更多空间。在扩展后,我们需要改变文件系统大小,使用以下命令。

# resize2fs /dev/vg_tecmint/LogVol01

Linux:在Linux中扩展/缩减LVM(第二部分)
Linux:在Linux中扩展/缩减LVM(第二部分)
扩展逻辑卷

  • 用来使用物理扩展扩展逻辑卷的命令。
  • 这里我们可以看到它从16.51GB扩展到了34GB。
  • 如果文件系统已被挂载并处于使用中,改变文件系统大小。
  • 要扩展逻辑卷,我们不需要卸载文件系统

现在,让我们看看当前使用的改变大小后的逻辑卷。

# lvdisplay
Linux:在Linux中扩展/缩减LVM(第二部分)
Linux:在Linux中扩展/缩减LVM(第二部分)

改变逻辑卷大小

  • LogVol01用于扩展的卷 /。
  • 扩展后,从16.50GB上升到了34.50GB。
  • C当前扩展,在扩展前有4226,我们已经添加了4607个扩展,因此现在有8833。

现在,如果我们检查可用的vg的话,空闲PE将会是0。

# vgdisplay

查看扩展的结果。

# pvs
# vgs
# lvs
Linux:在Linux中扩展/缩减LVM(第二部分)
Linux:在Linux中扩展/缩减LVM(第二部分)

验证分区大小改变

  • 添加的新物理卷。
  • 卷组vg_tecmint从17.51GB扩展到了35.50GB。
  • 逻辑卷LogVol01从16.51GB扩展到了34.50GB。

这里,我们已经完成扩展卷组和逻辑卷的过程。让我们一起迈向逻辑卷管理中一些有趣的部分。

来源:https://linux.cn/article-3974-1.html

Linux:Linux有问必答:如何创建新的亚马逊AWS访问密钥

问题:我在配置一个需要访问我的亚马逊AWS帐号的应用时被要求提供AWS访问密钥ID秘密访问密钥,我怎样创建一个新的AWS访问密钥呢?

亚马逊AWS安全凭证用于验证你以及授权任何第三方应用访问你的AWS帐号,有各种不同的AWS安全凭证可用,如密码、访问密钥、多因素身份验证、X.509证书等。

如果你想要创建新的访问密钥(访问密钥ID和秘密访问密钥),请按一下步骤进行。

首先,登录到AWS控制台

从顶部栏选择“安全凭证”菜单(图中红色方框所示)。

Linux:Linux有问必答:如何创建新的亚马逊AWS访问密钥
Linux:Linux有问必答:如何创建新的亚马逊AWS访问密钥

在下一页中,选择“访问密钥(访问密钥ID和秘密访问密钥)”选项(图中红色方框所示)。

Linux:Linux有问必答:如何创建新的亚马逊AWS访问密钥
Linux:Linux有问必答:如何创建新的亚马逊AWS访问密钥

在下一页中,你将看到一个现存访问密钥ID列表(如果有的话)。注意,你不能恢复现存访问密钥ID的“秘密访问密钥”。出于安全的原因,秘密访问密钥只能在你创建新访问密钥时才可见。

Linux:Linux有问必答:如何创建新的亚马逊AWS访问密钥
Linux:Linux有问必答:如何创建新的亚马逊AWS访问密钥

点击“创建新访问密钥”(见图示),将会立即创建一个新的访问密钥ID和密码访问密钥对。

Linux:Linux有问必答:如何创建新的亚马逊AWS访问密钥
Linux:Linux有问必答:如何创建新的亚马逊AWS访问密钥

要么下载一个包含有新访问密钥的密钥文件,要么复制并粘贴新访问密钥信息。再次提请牢记,一旦你关闭该窗口,秘密访问密钥将不再可用,除非你下载一个密钥文件。

多用户AWS帐号

如果你是作为公司身份创建的帐号,多个雇员共享这一公司帐号,你可能想要使用身份和访问管理(IAM)来创建并管理他们的访问密钥。

IAM是一个web服务,它允许一个公司管理多个用户及其与一个AWS帐号关联的安全凭证。使用IAM,多个用户可以作为不同身份登入单一的AWS帐号,并管理他们的安全凭证而不会相互干预对方的密钥。

要管理IAM用户,点击“安全凭证”页面上的“用户”菜单(见图示)。

Linux:Linux有问必答:如何创建新的亚马逊AWS访问密钥
Linux:Linux有问必答:如何创建新的亚马逊AWS访问密钥

然后,你就可以创建一个新的IAM用户并管理他们的安全凭证,比如访问密钥之类的东西。

Linux:Linux有问必答:如何创建新的亚马逊AWS访问密钥
Linux:Linux有问必答:如何创建新的亚马逊AWS访问密钥

via: http://ask.xmodulo.com/create-amazon-aws-access-key.html

译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-3975-1.html

Linux:在RHEL/CentOS 5/6下停用按下Ctrl-Alt-Del 重启系统的功能

在Linux里,由于对安全的考虑,我们允许任何人按下Ctrl-Alt-Del重启系统。但是在生产环境中,应该停用按下Ctrl-Alt-Del 重启系统的功能。

Linux:在RHEL/CentOS 5/6下停用按下Ctrl-Alt-Del 重启系统的功能
Linux:在RHEL/CentOS 5/6下停用按下Ctrl-Alt-Del 重启系统的功能

在这篇文章里,我们将要介绍如何在RHEL和CentOS下停用该热键。

在RHEL 5.X和CentOS 5.X下 ###

保护init进程免于Ctrl-Alt-Del,像下面一样编辑’/etc/inittab‘里由’ca::ctrlaltdel:’开头的一行:

[root@localhost ~]# cat /etc/inittab
# Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

我们还可以改变’ca::ctrlaltdel:’这行来输出日志 ,如果任何人想用该热键重启服务器,就会有日志,

[root@localhost ~]# cat /etc/inittab
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/bin/logger -p authpriv.warning -t init "Console-invoked Ctrl-Alt-Del was ignored"

在RHEL6.X和CentOS 6.X下

在RHEL6.X和CentOS 6.X下, 该热键的行为由’/etc/init/control-alt-delete.conf‘控制.

第一步 在变化之前,先用下列命令备份配置

[root@localhost ~]# cp -v /etc/init/control-alt-delete.conf /etc/init/control-alt-delete.override

第二步编辑文件,把’exec /sbin/shutdown’这一行用下方配置代替,这个配置会在每次按下Ctrl-Alt-Del 时输出日志:

[root@localhost ~]# cat /etc/init/control-alt-delete.conf
exec /usr/bin/logger -p authpriv.notice -t init "Ctrl-Alt-Del was pressed and ignored"

via: http://www.linuxtechi.com/disable-reboot-using-ctrl-alt-del-keys/

作者:Pradeep Kumar 译者:2q1w2007 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-3976-1.html

Linux:Linux有问必答:如何为CentOS 7配置静态IP地址

问题:在CentOS 7上,我想要将我其中一个网络接口从DHCP改为静态IP地址配置,如何才能永久为CentOS或RHEL 7上的网络接口分配静态IP地址?

如果你想要为CentOS 7中的某个网络接口设置静态IP地址,有几种不同的方法,这取决于你是否想要使用网络管理器。

Linux:Linux有问必答:如何为CentOS 7配置静态IP地址
Linux:Linux有问必答:如何为CentOS 7配置静态IP地址

网络管理器(Network Manager)是一个动态网络的控制器与配置系统,它用于当网络设备可用时保持设备和连接开启并激活。默认情况下,CentOS/RHEL 7安装有网络管理器,并处于启用状态。

使用下面的命令来验证网络管理器服务的状态:

$ systemctl status NetworkManager.service

运行以下命令来检查受网络管理器管理的网络接口:

$ nmcli dev status
Linux:Linux有问必答:如何为CentOS 7配置静态IP地址
Linux:Linux有问必答:如何为CentOS 7配置静态IP地址

如果某个接口的nmcli的输出结果是“已连接”(如本例中的enp0s3),这就是说该接口受网络管理器管理。你可以轻易地为某个特定接口禁用网络管理器,以便你可以自己为它配置一个静态IP地址。

下面将介绍在CentOS 7上为网络接口配置静态IP地址的两种方式,在例子中我们将对名为enp0s3的网络接口进行配置。

不使用网络管理配置静态IP地址

进入/etc/sysconfig/network-scripts目录,找到该接口的配置文件(ifcfg-enp0s3)。如果没有,请创建一个。

Linux:Linux有问必答:如何为CentOS 7配置静态IP地址
Linux:Linux有问必答:如何为CentOS 7配置静态IP地址

打开配置文件并编辑以下变量:

Linux:Linux有问必答:如何为CentOS 7配置静态IP地址
Linux:Linux有问必答:如何为CentOS 7配置静态IP地址

在上图中,“NM_CONTROLLED=no”表示该接口将通过该配置文件进行设置,而不是通过网络管理器进行管理。“ONBOOT=yes”告诉我们,系统将在启动时开启该接口。

保存修改并使用以下命令来重启网络服务:

# systemctl restart network.service

现在验证接口是否配置正确:

# ip add
Linux:Linux有问必答:如何为CentOS 7配置静态IP地址
Linux:Linux有问必答:如何为CentOS 7配置静态IP地址

使用网络管理器配置静态IP地址

如果你想要使用网络管理器来管理该接口,你可以使用nmtui(网络管理器文本用户界面),它提供了在终端环境中配置配置网络管理器的方式。

在使用nmtui之前,首先要在/etc/sysconfig/network-scripts/ifcfg-enp0s3中设置“NM_CONTROLLED=yes”。

现在,请按以下方式安装nmtui。

# yum install NetworkManager-tui

然后继续去编辑enp0s3接口的网络管理器配置:

# nmtui edit enp0s3

在下面的屏幕中,我们可以手动输入与/etc/sysconfig/network-scripts/ifcfg-enp0s3中所包含的内容相同的信息。

使用箭头键在屏幕中导航,按回车选择值列表中的内容(或填入想要的内容),最后点击屏幕底部右侧的确定按钮。

Linux:Linux有问必答:如何为CentOS 7配置静态IP地址
Linux:Linux有问必答:如何为CentOS 7配置静态IP地址

最后,重启网络服务。

# systemctl restart network.service

好了,现在一切都搞定了。


via: http://ask.xmodulo.com/configure-static-ip-address-centos7.html

译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-3977-1.html

Linux:Linux有问必答:如何在命令行创建一个MySQL数据库

问题:在一个某处运行的MySQL服务器上,我该怎样通过命令行创建和安装一个MySQL数据库呢?

为了能通过命令行创建一个MySQL数据库,你可以使用mysql命令行客户端。下面是通过mysql命令行客户端创建和安装MySQL的步骤。

Linux:Linux有问必答:如何在命令行创建一个MySQL数据库
Linux:Linux有问必答:如何在命令行创建一个MySQL数据库

第一步:安装MySQL客户端

当然你得确保MySQL客户端已经安装完毕。如果没有的话,可以按照下面的方法。

在Debian,Ubuntu 或者 Linux Mint上:

$ sudo apt-get install mysql-client

在Fedora,CentOS 或者 RHEL上:

$ sudo yum install mysql

第二步:登陆到MySQL服务器

首先,你需要使用root用户登陆进你的MySQL数据库,如下:

$ mysql -u root -h  -p

请注意:为了能登进远程的MySQL服务器,你需要开启服务器上的远程访问,如果你想调用同一主机上的MySQL服务器,你可以省略 “-h ” 参数

$ mysql -u root -p

你将需要输入MySQL服务器的密码,如果认证成功,MySQL提示将会出现。

Linux:Linux有问必答:如何在命令行创建一个MySQL数据库
Linux:Linux有问必答:如何在命令行创建一个MySQL数据库

第三步:创建一个MySQL数据库

在MySQL提示中输入命令之前,请记住所有的命令都是以分号结束的(否则将不会执行)。另外,考虑输入命令的时候使用大些字母,输入数据库对象使用小写字母。但那不是必须的,只是方便你的阅读。

现在,让我们创建一个叫做xmodulo_DB的数据库:

mysql> CREATE DATABASE IF NOT EXISTS xmodulo_DB;

第四步:创建一个数据库表

为了达到演示的目的,我们将会创建一个叫做posts_tbl的表,表里会存储关于文章的如下信息:

  • 文章的标题
  • 作者的名字
  • 作者的姓
  • 文章可用或者不可用
  • 文章创建的日期

这个过程分两步执行:

首先,选择我们需要使用的数据库:

mysql> USE xmodulo_DB;

然后,在数据库中创建新表:

mysql> CREATE TABLE 'posts_tbl' (
'post_id' INT UNSIGNED NOT NULL AUTO_INCREMENT,
'content' TEXT,
'author_FirstName' VARCHAR(100) NOT NULL,
'author_LastName' VARCHAR(50) DEFAULT NULL ,
'isEnabled' TINYINT(1) NOT NULL DEFAULT 1,
'date' TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
PRIMARY KEY ( 'post_id' )
) TYPE = MYISAM;
Linux:Linux有问必答:如何在命令行创建一个MySQL数据库
Linux:Linux有问必答:如何在命令行创建一个MySQL数据库

第五步:创建一个用户,并授予权限

当涉及到访问我们新创的数据库和表的时候,创建一个新用户是一个很好的主意。这样做就可以让用户在没有整个MySQL服务器权限的情况下,去访问那个数据库(而且只能是那个数据库)

你可以创建新用户,授予权限,并且使改变生效:

mysql> GRANT ALL PRIVILEGES ON xmodulo_DB.* TO 'new_user'@'%' IDENTIFIED BY 'new_password';
mysql> FLUSH PRIVILEGES;

‘newuser’和’newpassword’分别指的是新的用户名和他的密码。这条信息将会被保存在mysql.user表中,而且密码会被加密。

第六步:测试

让我们插入一个虚拟的记录到posts_tbl表:

mysql> USE xmodulo_DB;
mysql> INSERT INTO posts_tbl (content, author_FirstName, author_Las tName)
VALUES ('Hi! This is some dummy text.', 'Gabriel', 'Canepa');

然后查看posts_tbl表中的所有记录:

mysql> SELECT * FROM posts_tbl;

注意:MySQL会在我们先前定义的地方自动插入适当的默认值(比如,’isEnabled’和’date’)。


via: http://ask.xmodulo.com/create-mysql-database-command-line.html

译者:su-kaiyao 校对:wxy

本文由 LCTT 原创翻译,Linu x中国 荣誉推出

来源:https://linux.cn/article-3988-1.html

Linux:如何在Crunchbang下恢复Openbox的默认配置

CrunchBang是一个很好地融合了速度、风格和内容的基于Debian GNU/Linux的发行版。使用了灵活的Openbox窗口管理器,高度定制化并且提供了一个现代、全功能的GNU/Linux系统而没有牺牲性能。

Crunchbang是高度自定义的,用户可以尽情地地把它调整成他们想要的样子。这一切都通过文本文件(配置)。我作为一个Crunchbang用户,我最近搞乱了我的menu.xml配置文件,它负责下面的菜单显示。

Linux:如何在Crunchbang下恢复Openbox的默认配置
Linux:如何在Crunchbang下恢复Openbox的默认配置

我的菜单配置文件中丢失了所有内容。由于我没有备份(最好备份配置文件)。我不得不搜索Crunchbang安装后的默认配置。这里就是我如何修复的过程,这里要感谢Crunchbang论坛。

了解所有为你预备份的默认配置是很有趣的,你可以在这里找到:

/etc/skel/.config/

因此对于任何默认配置,你只需复制他们并重启适当的程序。

我在这里使用Openbox的menu.xml作为示例:

cp -r /etc/skel/.config/openbox/menu.xml ~/.config/openbox/menu.xml

接着重启openbox。

openbox --restart

via: http://www.unixmen.com/recover-default-openbox-config-files-crunchbang/

作者:Enock Seth Nyamador 译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-3989-1.html

Linux:PHP-RSA加密跨域通讯实战

AUTH:PHILO EMAIL:lijianying12 at gmail.com

基于POST GET 的http通讯虽然非常成熟,但是很容易被人监听。 并且如果使用跨域jsonp的通讯很容易在历史记录中发现通讯网址以及参数。为了克服这些问题, 并且降低服务器成本,我们没有使用SSL而使用 RSA加密。文章中的php加密解密 JS的加密解密 互相加密解密 都能验证通过。

其中PHP依赖常见的OPENSSL LIB 。 JS依赖 jsencrypt。

我们使用jsonp get RSA加密通讯好处如下:

  1. 前后分离适合cdn加速。
  2. 安全跨域更适合松散结构的网站。
  3. 不用去买ssl证书了。
Linux:PHP-RSA加密跨域通讯实战
Linux:PHP-RSA加密跨域通讯实战

首先要生成密匙对

openssl genrsa 1024 > private.key
openssl rsa -in private.key -pubout > public.key

JS的RSA加密流程

下载最新版本请移步到github:jsencrypt 代码在目录BIN下面是否用压缩的根据情况决定。

生成KEY

var keySize = 1024; //加密强度
var crypt = new JSEncrypt({default_key_size: keySize});  //RSA 操作对象
//方法1 (async)
crypt.getKey(function () {
    crypt.getPrivateKey();
    crypt.getPublicKey();
});
//方法2:
crypt.getKey();
crypt.getPrivateKey();
crypt.getPublicKey();

客户端加密场景:

var crypt1 = new JSEncrypt(); //新建rsa对象
        var publickey = '
        -----BEGIN PUBLIC KEY-----
        MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3N8LJFqlsa6loCgFpgZVMr/Sx
        DMQY7pr0euNQfh2g+UVPbB0MGhoc7nWL0FQhCgDedbjQw/nGFStFx7W1+0o1oRTY
        u5ebNVivZSobraUv7LJvwT8O66Zs8cxbKLqQ/nE/WwJvXomSIckH6R8iOUO8/QT9
        kv6/L0Uma3qA07pmDQIDAQAB
        -----END PUBLIC KEY-----
                ';
crypt1.setPublicKey(publickey );//添加来自服务端的publickey
crypt1.encrypt('abc'); //返回值为加密后的结果

客户端解密场景:

        var privatekey = '-----BEGIN RSA PRIVATE KEY-----
        MIICXQIBAAKBgQC3N8LJFqlsa6loCgFpgZVMr/SxDMQY7pr0euNQfh2g+UVPbB0M
        Ghoc7nWL0FQhCgDedbjQw/nGFStFx7W1+0o1oRTYu5ebNVivZSobraUv7LJvwT8O
        66Zs8cxbKLqQ/nE/WwJvXomSIckH6R8iOUO8/QT9kv6/L0Uma3qA07pmDQIDAQAB
        AoGBAKba3UWModbfZXQeSJLxNCqWw9zJp3ydL/keQQ35DLqgyIJAD2QKEWXvtJUT
        sMo19fyicSGOmFXQyYvPCKkmpLkOMAj1XaNpSMtSrcMx+gC01PO6Ey9rsUxW1g3u
        fpqbEk9E3a5AtCS0I61nbUpRL6rqMtR5o2wcNR3TLtJt7pjxAkEA7hlFJKU1zWGp
        OvvkJDnHc2NOCEJoGjqCR9wwv96+/xAykl2laI6WvEbbhjoO0+8+d17oigjhneS5
        2UKFcfqw7wJBAMT+MCQ5TYLQlvjrBaDMqOdLsqtaDE6CpkrgwV820QMvHOo3R4Xd
        uSbrA2tOr9t2/x+FzF971lRGdPFIch9UYMMCQQCZtO6SDaWCBP3++gX57OL5dq41
        XsldxU+9nERMWTvr5UUAgDv8F7Dvsr6dFHXmE5i77yUnlzwvdi0UOIF1Z2U5AkBV
        wyRKYPgx34Ya0JcerntKV1Zt60I4XADx0G/feAn/DN/VyENHMISPQPm4GgXN0jy4
        CJQ1bcCd6B65fQTSRvXpAkA2Vv5yXzeKDls/AyxHEoros/VYftVc1HOFC++q13Rw
        NH2rnlRT8FMTFEqL9MYRqvvYAFf5VmH0M1Nx5t4LRN+l
        -----END RSA PRIVATE KEY-----
                ';
var crypt2 = new JSEncrypt();//新建加密对象
crypt2.setPrivateKey(privatekey);//给加密对象设置privatekey
crypt2.getPublicKey();//Tip 我们是不需要存储publickey的直接用private能得到publickey
crypt2.decrypt("MeUqWB5LwTh8crzPqbZtEtKuZxYvPWH9CTCChK1qoBzIgIXGPCdzNMbiH0cCYHl5qWSERIDOgDIgv4dXsIMjEJ5q0cp/qNQYHM5va0iw0UvKvQB1E8aWtY2nFEPy4F+ArQ0Mj/ijr/CntEP1jHKC3WU9nu2kYrBIBnbj14Bs+kI=");//调用解密方法

但是虽然写到了这里,加密方面还是不够用,因为1024长度的RSA加密最多只能加密长度为117的字符串。而URL长度最多为4k因此这里我们要让加密长度达到2691以达到能用的程度。

那么这种加密长度大概能容纳多少数据呢? 我们借助json-generator来帮忙生成JSON

    sdata =[
        {
            "_id": "542f9ac2359c7d881bc0298e",
            "index": 0,
            "guid": "db1dacc1-b870-4e3c-bc1a-80dfd9506610",
            "isActive": false,
            "balance": "$1,570.15",
            "picture": "http://placehold.it/32x32",
            "age": 36,
            "eyeColor": "blue",
            "name": "Effie Barr",
            "gender": "female",
            "company": "ZORK",
            "email": "effiebarr@zork.com",
            "phone": "+1 (802) 574-3379",
            "address": "951 Cortelyou Road, Wikieup, Colorado, 4694",
            "about": "Sunt reprehenderit do laboris velit qui elit duis velit qui. Nostrud sit eiusmod cillum exercitation veniam ad sint irure cupidatat sunt consectetur magna. Amet nisi velit laboris amet officia et velit nisi nostrud ipsum. Cupidatat et fugiat esse minim occaecat cillum enim exercitation laboris velit nisi est enim aute. Enim do pariaturrn",
            "registered": "2014-05-08T15:26:35 -08:00",
            "latitude": 48.576424,
            "longitude": 146.634137,
            "tags": [
                "esse",
                "proident",
                "quis",
                "consectetur",
                "magna",
                "tempor",
                "anim"
            ],
            "friends": [
                {
                    "id": 0,
                    "name": "Trisha Cannon"
                },
                {
                    "id": 1,
                    "name": "Todd Bullock"
                },
                {
                    "id": 2,
                    "name": "Eileen Drake"
                },
                {
                    "id": 3,
                    "name": "Ferrell Kelly"
                },
                {
                    "id": 4,
                    "name": "Fischer Blankenship"
                },
                {
                    "id": 5,
                    "name": "Morales Mann"
                },
                {
                    "id": 6,
                    "name": "Brandie Pittman"
                },
                {
                    "id": 7,
                    "name": "Virgie Kerr"
                }
            ],
            "greeting": "Hello, Effie Barr! You have 1 unread messages.",
            "favoriteFruit": "apple"
        },
        {
            "_id": "542f9ac21c260d03e763a4f2",
            "index": 1,
            "guid": "9e3a3d8a-26f8-46b7-aca0-336a194808b1",
            "isActive": true,
            "balance": "$3,617.89",
            "picture": "http://placehold.it/32x32",
            "age": 31,
            "eyeColor": "brown",
            "name": "Butler Best",
            "gender": "male",
            "company": "SPORTAN",
            "email": "butlerbest@sportan.com",
            "phone": "+1 (905) 428-3046",
            "address": "798 Joval Court, Wanship, Delaware, 8974",
            "about": "Nostrud occaecat id sunt pariatur ad nisi do veniam sit officia non consequat amet fugiat. Est eiusmod labore ut cillum qui eu elit ut eiusmod exercitation. Ut anim nostrud eiusmod voluptate tempor proident id do pariatur. In Lorem ullamco ea irure adipisicing. Quis est dolor ex commodo aliqua nisi elit sit elit anim fugiat sunt amet. Enim consequat ipsum occaecat ipsum tempor deserunt dolor veniam nostrud. Anim cillum ullamco cupidatat aute velit fugiat sit enim in amet anim mollit dolor eiusmod.rn",
            "registered": "2014-08-02T06:15:44 -08:00",
            "latitude": -20.529765,
            "longitude": 2.396578,
            "tags": [
                "consequat",
                "enim",
                "magna",
                "sunt",
                "Lorem",
                "quis",
                "commodo"
            ],
            "friends": [
                {
                    "id": 0,
                    "name": "Kenya Rice"
                },
                {
                    "id": 1,
                    "name": "Hale Knowles"
                },
                {
                    "id": 2,
                    "name": "Michael Stephens"
                },
                {
                    "id": 3,
                    "name": "Holder Bailey"
                },
                {
                    "id": 4,
                    "name": "Garner Luna"
                },
                {
                    "id": 5,
                    "name": "Alyce Sawyer"
                },
                {
                    "id": 6,
                    "name": "Rivas Owens"
                },
                {
                    "id": 7,
                    "name": "Jan Petersen"
                }
            ],
            "greeting": "Hello, Butler Best! You have 8 unread messages.",
            "favoriteFruit": "banana"
        }
    ]

 

表单json能达到这么长已经是很极端的情况了。因此这种方法绝对是够用的。

长表单内容加解密方法:

function encrypt_data(publickey,data)
{
    if(data.length> 2691){return;} // length limit
    var crypt = new JSEncrypt();
    crypt.setPublicKey(publickey);
    crypt_res = "";
    for(var index=0; index < (data.length - data.length%117)/117+1 ; index++)
    {
        var subdata = data.substr(index * 117,117);
        crypt_res += crypt.encrypt(subdata);
    }
    return crypt_res;
}
function decrypt_data(privatekey,data)
{
    var crypt = new JSEncrypt();
    crypt.setPrivateKey(privatekey);
    datas=data.split('=');
    var decrypt_res="";
    datas.forEach(function(item)
    {
        if(item!=""){de_res += crypt.decrypt(item);}
    });
    return decrypt_res;
}

 ##########NextPage[title=]##########

PHP的RSA加密

php加密解密类

首先要检查phpinfo里面有没有openssl支持

class mycrypt {
    public $pubkey;
    public $privkey;
    function __construct() {
                $this->pubkey = file_get_contents('./public.key');
                $this->privkey = file_get_contents('./private.key');
    }
    public function encrypt($data) {
        if (openssl_public_encrypt($data, $encrypted, $this->pubkey))
            $data = base64_encode($encrypted);
        else
            throw new Exception('Unable to encrypt data. Perhaps it is bigger than the key size?');
        return $data;
    }
    public function decrypt($data) {
        if (openssl_private_decrypt(base64_decode($data), $decrypted, $this->privkey))
            $data = $decrypted;
        else
            $data = '';
        return $data;
    }
}  

密匙文件位置问题,是放到访问接口的附近就可以了如果是CI的话就放到index.php旁边就行了。 但是要注意一点,一定要做访问设置,不然key会暴出来的,那时候信息一旦截获就惨了。

类的使用

$rsa = new mycrypt();
echo $rsa -> encrypt('abc');
echo $rsa -> decrypt('W+ducpssNJlyp2XYE08wwokHfT0bm87yBz9vviZbfjAGsy/U9Ns9FIed684lWjYyyofi/1YWrU0Mp8vLOYi8l6CfklBY=');  

长数据加密解密

function encrypt_data($publickey,$data)
{
    $rsa = new mycrypt();
    if($publickey != ""){
        $rsa -> pubkey = $publickey;
    }
    $crypt_res = "";
    for($i=0;$i<((strlen($data) - strlen($data)%117)/117+1); $i++)
    {
        $crypt_res = $crypt_res.($rsa -> encrypt(mb_strcut($data, $i*117, 117, 'utf-8')));
    }
    return $crypt_res;
}
function decrypt_data($privatekey,$data)
{
    $rsa = new mycrypt();
    if($privatekey != ""){  // if null use default
        $rsa ->privkey = $privatekey;
    }
    $decrypt_res = "";
    $datas = explode('=',$data);
    foreach ($datas as $value)
    {
        $decrypt_res = $decrypt_res.$rsa -> decrypt($value);
    }
    return $decrypt_res;
}

JSONP 跨域通讯

我们经过千辛万苦经过加密终于能做到通讯安全了。 当然我们的下一步是通过JSONP 的get通讯来实现跨域通讯啦。 经过测试:我们的JS中最长的Case url长度是3956 在加上跨域url callbac参数,经过测试正好差20到4095 (一般的URI长度限制为4K)

$.ajax({
    type:"get",
    async:false,  // 设置同步通讯或者异步通讯
    url:"http://22500e31b5a12457.sinaapp.com/ubtamat/getPubKey?c=hknHQKIy3dyeeajyAwZ+raUkV1ezFbgU8zk+54cNQtrcEGozUjXpYhbC6fxz2hCOgp9feIsM1xKJFm5pkAGQ2UcUOc5EJNCAz6L0mXkZbTBmh3PufWxOE7TaicqRCRtZGGNB2qpm2WruXjYg1lPcrPz/rhFZx4DSJvEHkCm7ZU0=......(加密后的结果太长,省略)",
    dataType:"jsonp",
    jsonp: "",
}); 

 

header("Content-type: application/javascript; charset=utf-8");
$response = "console.log('test response!')";
$callback = $this->input->GET('callback');
echo $callback.$response;

PHP代码是CI框架controler中的部分代码 并且经过了必要的裁剪。 更加细节的参数都放到GET里面就可以了。 处理之后按照上面的形式处理返回值就ok 如果你配置成功了,你将会在网页的控制台上看到自己动态的, 或者像我一样静态的控制台输出。 如果要是想获取数据到网页的话还是要借助回调函数来实现

JSONP跨域获取通讯结果

请看下面代码:

客户端代码

var global = null;
function jpc(result)
{
    global = result.msg;
}
$.ajax({
    type:"get",
    async:false,  // 设置同步通讯或者异步通讯
    url:"http://22500e31b5a12457.sinaapp.com/ubtamat/getPubKey",
    dataType:"jsonp",
    jsonp: "jpc",
}); 

服务器端代码

header("Content-type: application/javascript; charset=utf-8");
$response = "jpc({'msg':123456})";
$callback = $this->input->GET('callback');
echo $callback.$response;

此次通讯的结果会在jcp当中调用执行,并且返回的内容会记录到 global 变量当中。

来源:https://linux.cn/article-3991-1.html

Linux:在 Linux 下用 Krita 进行照片编辑

 

图 1:侏儒山羊 Annabelle

Krita 是一款很棒的绘图应用,同时也是很不错的照片编辑器。今天我们将学习如何给图片添加文字,以及如何有选择地锐化照片的某一部分。

Krita 简介

与其他绘图/制图应用类似,Krita 内置了数百种工具和选项,以及多种处理方法。因此它值得我们花点时间来了解一下。

Krita 默认使用了暗色主题。我不太喜欢暗色主题,但幸运的是 Krita 还有其他很赞的主题,你可以在任何时候通过菜单里的“设置 > 主题”进行更改。

Krita 使用了窗口停靠样式的工具条。如果左右两侧面板的 Dock 工具条没有显示,检查一下“设置 > 显示工具条”选项,你也可以在“设置 > 工具条”中对工具条按你的偏好进行调整。不过隐藏的工具条也许会让你感到一些小小的不快,它们只会在一个狭小的压扁区域展开,你看不见其中的任何东西。你可以拖动它们至顶端或者 Krita 窗口的一侧,放大或者缩小它们,甚至你可以把它们拖到 Krita 外,放在你显示屏的任意位置。如果你把其中一个工具条拖到了另一个工具条上,它们会自动合并成一个工具条。

当你配置好比较满意的工作区后,你可以在“选择工作区”内保存它。你可以在笔刷工具条(通过“设置 > 显示工具条”开启显示)的右侧找到“选择工作区”。其中有对工作区的不同配置,当然你也可以创建自己的配置(图 2)。

 

图 2:在“选择工作区”里保存用户定制的工作区。

Krita 中有多重缩放控制方法。Ctrl + “=” 放大,Ctrl + “-” 缩小,Ctrl + “0” 重置为 100% 缩放画面。你也可以通过“视图 > 缩放”,或者右下角的缩放条进行控制。在缩放条的左侧还有一个下拉式的缩放菜单。

工具菜单位于窗口左部,其中包含了锐化和选择工具。你必须移动光标到每个工具上,才能查看它的标签。工具选项条总是显示当前正在使用的工具的选项,默认情况下工具选项条位于窗口右部。

裁切工具

当然,在工具菜单条中有裁切工具,并且非常易于使用。把你想要选择的区域用矩形圈定,使用拖拽的方式来调整选区,调整完毕后点击返回按钮。在工具选项条中,你可以选择对所有图层应用裁切,还是只对当前图层应用裁切,通过输入具体数值,或者是百分比调整尺寸。

添加文本

当你想在照片上添加标签或者说明这类简单文本的时候,Krita 也许会让你眼花缭乱,因为它有太多的艺术字效果可供选择了。但 Krita 同时也支持添加简单的文字。点击文本工具条,你将会看到工具选项条如图 3 那样。 

 

图 3:文本选项。

点击展开按钮。这将显示简单文本工具;首先绘制矩形文本框,接着在文本框内输入文字。工具选项条中有所有常用的文本格式选项:文本选择、文本尺寸、文字与背景颜色、边距,以及一系列图形风格。但你处理完文本后点击外观处理工具,外观处理工具的按钮是一个白色的箭头,在文本工具按钮旁边,通过外观处理工具你可以调整文字整体的尺寸、外观还有位置。外观处理工具的工具选项包括多种不同的线条、颜色还有边距。图 4 是我为我那些蜗居在城市里的亲戚们发送的一幅带有愉快标题的照片。 

 

图 4:来这绿色农场吧。

如何处理你的照片上已经存在的文字?点击外观处理工具,在文本区域内双击。这将使文本进入编辑模式,从文本框内出现的光标可以看出这一点。现在,你就可以开始选择文字、添加文字、更改格式,等等。

锐化选区

外观编辑上,Krita 有许多很棒的工具。在图 5 中我想要锐化 Annabelle 的脸和眼睛。(Annabelle 住在隔壁,但她很喜欢我的狗,在我这里呆了很长一段时间。我的狗却因为害怕她而跑了,但她却一点也不气馁。)首先通过“外形选区”工具选择一个区域。接着打开“滤镜 > 增强 > 虚边蒙板”。你可以调节三个变量:半长值、总量以及阈值。大多数图像编辑软件都有半径、总量和阀值的设置。半径是直径的一半,因此从技术上来说“半长值”是正确的,但却可能造成不必要的混乱。

图 5:选取任意的区域进行编辑。

半长值决定了锐化线条的粗细。你需要足够大的数值来产生较好的结果,但很明显,不要过大。

阀值决定了锐化时两个像素点之间的效果差异。“0”是锐化的最大值,“99”则表示不进行锐化。

总量控制着锐化强度;其值越高锐化程度越高。

锐化基本上是你处理照片的最后一步,因为它和你对照片所做的一切处理都有关:裁切、改变尺寸、颜色、色差…如果你先进行锐化再进行其他操作,你的锐化效果将变得一团糟。

接着,你要问,“虚化蒙板”是什么意思?这个名字来源于锐化技术:虚化蒙板滤镜在原始图像上覆盖一层模糊的蒙板,接着在上面分层进行虚化蒙板。这将使图像比直接锐化产生更加锐利清晰的效果。

今天要说的就这么多。有关 Krita 的资料很多,但比较杂乱。你可以从 Krita Tutorials 开始学习,也可以在 YouTube 上找寻相关的学习视频。


via: http://www.linux.com/learn/tutorials/786040-photo-editing-on-linux-with-krita

作者:Carla Schroder 译者:SteveArcher 校对:Caroline

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:http://www.linux.com/learn/tutorials/786040-photo-editing-on-linux-with-krita

Linux:在 Debian 上使用 systemd 管理系统

人类已经无法阻止 systemd 占领全世界的 Linux 系统了,唯一阻止它的方法是在你自己的机器上手动卸载它。到目前为止,systemd 已经创建了比任何软件都多的技术问题、感情问题和社会问题。这一点从“Linux 初始化软件之战”上就能看出,这场争论在 Debian 开发者之间持续了好几个月。当 Debian 技术委员会最终决定将 systemd 放到 Debian 8(代号 Jessie)的发行版里面时,其反对者试图通过多种努力来取代这项决议,甚至有人扬言要威胁那些支持 systemd 的开发者的生命安全。

Linux:在 Debian 上使用 systemd 管理系统
Linux:在 Debian 上使用 systemd 管理系统

这也说明了 systemd 对 Unix 传承下来的系统处理方式有很大的干扰。“一个软件只做一件事情”的哲学思想已经被这个新来者彻底颠覆。除了取代了 sysvinit 成为新的系统初始化工具外,systemd 还是一个系统管理工具。目前为止,由于 systemd-sysv 这个软件包提供的兼容性,那些我们使用惯了的工具还能继续工作。但是当 Debian 将 systemd 升级到214版本后,这种兼容性就不复存在了。升级措施预计会在 Debian 8 “Jessie” 的稳定分支上进行。从此以后用户必须使用新的命令来管理系统、执行任务、变换运行级别、查询系统日志等等。不过这里有一个应对方案,那就是在 .bashrc 文件里面添加一些别名。

现在就让我们来看看 systemd 是怎么改变你管理系统的习惯的。在使用 systemd 之前,你得先把 sysvinit 保存起来,以便在 systemd 出错的时候还能用 sysvinit 启动系统。这种方法只有在没安装 systemd-sysv 的情况下才能生效,具体操作方法如下:

# cp -av /sbin/init /sbin/init.sysvinit

在紧急情况下,可以把下面的文本:

init=/sbin/init.sysvinit

添加到内核启动参数项那里。

systemctl 的基本用法

systemctl 的功能是替代“/etc/init.d/foo start/stop”这类命令,另外,其实它还能做其他的事情,这点你可以参考 man 文档。

一些基本用法:

  • systemctl – 列出所有单元(UNIT)以及它们的状态(这里的 UNIT 指的就是系统上的 job 和 service)
  • systemctl list-units – 列出所有 UNIT
  • systemctl start [NAME…] – 启动一项或多项 UNIT
  • systemctl stop [NAME…] – 停止一项或多项 UNIT
  • systemctl disable [NAME…] – 将 UNIT 设置为开机不启动
  • systemctl list-unit-files – 列出所有已安装的 UNIT,以及它们的状态
  • systemctl –failed – 列出开机启动失败的 UNIT
  • systemctl –type=mount – 列出某种类型的 UNIT,类型包含:service, mount, device, socket, target
  • systemctl enable debug-shell.service – 将一个 shell 脚本设置为开机启动,用于调试

为了更方便处理这些 UNIT,你可以使用 systemd-ui 软件包,你只要输入 systemadm 命令就可以使用这个软件。

你同样可以使用 systemctl 实现转换运行级别、重启系统和关闭系统的功能:

  • systemctl isolate graphical.target – 切换到运行级别5,就是有桌面的运行级别
  • systemctl isolate multi-user.target – 切换到运行级别3,没有桌面的运行级别
  • systemctl reboot – 重启系统
  • systemctl poweroff – 关机

所有命令,包括切换到其他运行级别的命令,都可以在普通用户的权限下执行。

journalctl 的基本用法

systemd 不仅提供了比 sysvinit 更快的启动速度,还让日志系统在更早的时候启动起来,可以记录内核初始化阶段、内存初始化阶段、前期启动步骤以及主要的系统执行过程的日志。所以,以前那种需要通过对显示屏拍照或者暂停系统来调试程序的日子已经一去不复返啦

systemd 的日志文件都被放在 /var/log 目录。如果你想使用它的日志功能,需要执行一些命令,因为 Debian 没有打开日志功能。命令如下:

# addgroup --system systemd-journal
# mkdir -p /var/log/journal
# chown root:systemd-journal /var/log/journal
# gpasswd -a $user systemd-journal

通过上面的设置,你就可以以普通用户权限使用 journal 软件查看日志。使用 journalctl 查询日志可以获得一些比 syslog 软件更方便的玩法:

  • journalctl –all – 显示系统上所有日志,以及它的用户
  • journalctl -f – 监视系统日志的变化(类似 tail -f /var/log/messages 的效果)
  • journalctl -b – 显示系统启动以后的日志
  • journalctl -k -b -1 – 显示上一次(-b -1)系统启动前产生的内核日志
  • journalctl -b -p err – 显示系统启动后产生的“ERROR”日志
  • journalctl –since=yesterday – 当系统不会经常重启的时候,这条命令能提供比 -b 更短的日志记录
  • journalctl -u cron.service –since=’2014-07-06 07:00′ –until=’2014-07-06 08:23′ – 显示 cron 服务在某个时间段内打印出来的日志
  • journalctl -p 2 –since=today – 显示优先级别为2以内的日志,包含 emerg、alert、crit三个级别。所有日志级别有: emerg (0), alert (1), crit (2), err (3), warning (4), notice (5), info (6), debug (7)
  • journalctl > yourlog.log – 将二进制日志文件复制成文本文件并保存到当前目录

Journal 和 syslog 可以很好的共存。而另一方面,一旦你习惯了操作 journal,你也可以卸载掉所有 syslog 的软件,比如 rsyslog 或 syslog-ng。

如果想要得到更详细的日志信息,你可以在内核启动参数上添加“systemd.log_level=debug”,然后运行下面的命令:

# journalctl -alb

你也可以编辑 /etc/systemd/system.conf 文件来修改日志级别。

利用 systemd 分析系统启动过程

systemd 可以让你能更有效地分析和优化你的系统启动过程:

  • systemd-analyze – 显示本次启动系统过程中用户态和内核态所花的时间
  • systemd-analyze blame – 显示每个启动项所花费的时间明细
  • systemd-analyze critical-chain – 按时间顺序打印 UNIT 树
  • systemd-analyze dot | dot -Tsvg > systemd.svg – 为开机启动过程生成向量图(需要安装 graphviz 软件包)
  • systemd-analyze plot > bootplot.svg – 产生开机启动过程的时间图表
Linux:在 Debian 上使用 systemd 管理系统
Linux:在 Debian 上使用 systemd 管理系统
Linux:在 Debian 上使用 systemd 管理系统
Linux:在 Debian 上使用 systemd 管理系统

systemd 虽然是个年轻的项目,但已有大量文档。首先要介绍给你的是Lennart Poettering 的 0pointer 系列。这个系列非常详细,非常有技术含量。另外一个是免费桌面信息文档,它包含了最详细的关于 systemd 的链接:发行版特性文件、bug 跟踪系统和说明文档。你可以使用下面的命令来查询 systemd 都提供了哪些文档:

# man systemd.index

不同发行版之间的 systemd 提供的命令基本一样,最大的不同之处就是打包方式。


via: http://xmodulo.com/2014/07/use-systemd-system-administration-debian.html

译者:bazz2 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-3994-1.html

Linux:小技巧:在Ubuntu 14.04中重置Unity和Compiz设置

如果你一直在试验你的Ubuntu系统,你可能最终以Unity和Compiz的一片混乱收场。在此贴士中,我们将看看怎样来重置Ubuntu 14.04中的Unity和Compiz。事实上,全部要做的事,仅仅是运行几个命令而已。

重置Ubuntu 14.04中的Unity和Compiz

打开终端(Ctrl+Alt+T),并使用以下命令来重置compiz:

dconf reset -f /org/compiz/

重置compiz后,重启Unity:

setsid unity

此外,如果你想将Unity图标也进行重置,试试以下的命令吧:

unity --reset-icons

可能的疑难解决方案:

如果你在重置compiz时遇到如下错误:

error: GDBus.Error:org.gtk.GDBus.UnmappedGError.Quark._g_2dfile2_derror_2dquark.Code17: Cannot open dconf database: invalid gvdb header

可能的原因是用户文件被搞乱了。备份dconf配置,并移除配置文件:

mv ~/.config/dconf/ ~/.config/dconf.bak

希望本贴士对你重置Ubuntu 14.04中Unity和compiz有所帮助,欢迎您随时提出问题和建议。


via: http://itsfoss.com/reset-unity-compiz-settings-ubuntu-1404/

作者:Abhishek 译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-3995-1.html

Linux:如何使用 systemd 中的定时器

我最近在写一些执行备份工作的脚本,我决定使用systemd timers而不是对我而已更熟悉的cron jobs来管理它们。

在我使用时,出现了很多问题需要我去各个地方找资料,这个过程非常麻烦。因此,我想要把我目前所做的记录下来,方便自己的记忆,也方便读者不必像我这样,满世界的找资料了。

Linux:如何使用 systemd 中的定时器
Linux:如何使用 systemd 中的定时器

在我下面提到的步骤中有其他的选择,但是这里是最简单的方法。在此之前,请查看systemd.service, systemd.timer,和systemd.target的帮助页面(man),学习你能用它们做些什么。

运行一个简单的脚本

假设你有一个脚本叫:/usr/local/bin/myscript ,你想要每隔一小时就运行一次。

Service 文件

第一步,创建一个service文件,根据你Linux的发行版本放到相应的系统目录(在Arch中,这个目录是/etc/systemd/system//usr/lib/systemd/system)

myscript.service

[Unit]
Description=MyScript
[Service]
Type=simple
ExecStart=/usr/local/bin/myscript

注意,务必将Type变量的值设置为”simple”而不是”oneshot”。使用”oneshot”使得脚本只在第一次运行,之后系统会认为你不想再次运行它,从而关掉我们接下去创建的定时器(Timer)。

Timer 文件

第二步,创建一个timer文件,把它放在第一步中service文件放置的目录。

myscript.timer

[Unit]
Description=Runs myscript every hour
[Timer]
# 首次运行要在启动后10分钟后
OnBootSec=10min
# 每次运行间隔时间
OnUnitActiveSec=1h
Unit=myscript.service
[Install]
WantedBy=multi-user.target

授权 / 运行

授权并运行的是timer文件,而不是service文件。

# 以 root 身份启动定时器
systemctl start myscript.timer
# 在系统引导起来后就启用该定时器
systemctl enable myscript.timer

在同一个Timer上运行多个脚本

现在我们假设你在相同时间想要运行多个脚本。这种情况,你需要在上面的文件中做适当的修改

Service 文件

像我之前说过的那样创建你的service文件来运行你的脚本,但是在每个service 文件最后都要包含下面的内容:

[Install]
WantedBy=mytimer.target

如果在你的service 文件中有一些依赖顺序,确保你使用Description字段中的值具体指定After=something.serviceBefore=whatever.service中的参数。

另外的一种选择是(或许更加简单),创建一个包装脚本来使用正确的顺序来运行命令,并在你的service文件中使用这个脚本。

Timer 文件

你只需要一个timer文件,创建mytimer.timer,像我在上面指出的

target 文件

你可以创建一个以上所有的脚本依赖的target文件。

mytimer.target

[Unit]
Description=Mytimer
# Lots more stuff could go here, but it's situational.
# Look at systemd.unit man page.

授权 / 启动

你需要将所有的service文件和timer文件授权。

systemctl enable script1.service
systemctl enable script2.service
...
systemctl enable mytimer.timer
systemctl start mytimer.service

Good luck.


via: http://jason.the-graham.com/2013/03/06/how-to-use-systemd-timers/

作者:Jason Graham 译者:johnhoow 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-3996-1.html

Linux:Linux有问必答:如何扩展XFS文件系统

问题:我的磁盘上有额外的空间,所以我想要扩展其上创建的现存的XFS文件系统,以完全使用额外空间。怎样才是扩展XFS文件系统的正确途径?

XFS是一个开源的(GPL)日志文件系统,最初由硅谷图形(SGI)开发,现在大多数的Linux发行版都支持。事实上,XFS已被最新的CentOS/RHEL 7采用,成为其默认的文件系统。在其众多的特性中,包含了“在线调整大小”这一特性,使得现存的XFS文件系统在已经挂载的情况下可以进行扩展。然而,对于XFS文件系统的缩减却还没有支持。

要扩展一个现存的XFS文件系统,你可以使用命令行工具xfs_growfs,这在大多数Linux发行版上都默认可用。由于XFS支持在线调整大小,目标文件系统可以挂在,也可以不挂载。

下面展示了xfs_growfs的基本用法:

Linux:Linux有问必答:如何扩展XFS文件系统
Linux:Linux有问必答:如何扩展XFS文件系统

作为目标XFS文件系统来扩展,你可以指定挂载点、磁盘分区或者逻辑卷(在使用LVM时),使用数据块数量来指定新的XFS文件系统的大小。你可以使用xfs_info命令行工具来检查数据块大小和数量:

要将XFS文件扩展到1986208:

$ sudo xfs_growfs /dev/centos/root -D 1986208

如果你不使用“-D”选项来指定大小,xfs_growfs将会自动扩展XFS文件系统到最大的可用大小。

$ sudo xfs_growfs /dev/centos/root

注意,当你扩展一个现存的XFS文件系统时,必须准备好事先添加用于XFS文件系统扩展的空间。这虽然是很显然的事,但是如果在所在的分区或磁盘卷上没有空闲空间可用的话,xfsgrowfs就没有办法了。同时,如果你尝试扩展XFS文件系统大小到超过磁盘分区或卷的大小,xfsgrowfs将会失败。


via: http://ask.xmodulo.com/expand-xfs-file-system.html

译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-3997-1.html

Linux:使用 GIT 备份 linux 上的网页文件

Linux:使用 GIT 备份 linux 上的网页文件
Linux:使用 GIT 备份 linux 上的网页文件

BUP 并不单纯是 Git, 而是一款基于 Git 的软件. 一般情况下, 我使用 rsync 来备份我的文件, 而且迄今为止一直工作的很好. 唯一的不足就是无法把文件恢复到某个特定的时间点. 因此, 我开始寻找替代品, 结果发现了 BUP, 一款基于 git 的软件, 它将数据存储在一个仓库中, 并且有将数据恢复到特定时间点的选项.

要使用 BUP, 你先要初始化一个空的仓库, 然后备份所有文件. 当 BUP 完成一次备份是, 它会创建一个还原点, 你可以过后还原到这里. 它还会创建所有文件的索引, 包括文件的属性和验校和. 当要进行下一个备份时, BUP 会对比文件的属性和验校和, 只保存发生变化的数据. 这样可以节省很多空间.

安装 BUP (在 Centos 6 & 7 上测试通过)

首先确保你已经安装了 RPMFORGE 和 EPEL 仓库

[techarena51@vps ~]$ sudo yum groupinstall "Development Tools"
[techarena51@vps ~]$ sudo yum install python python-devel
[techarena51@vps ~]$ sudo yum install fuse-python pyxattr pylibacl
[techarena51@vps ~]$ sudo yum install perl-Time-HiRes
[techarena51@vps ~]$ git clone git://github.com/bup/bup
[techarena51@vps ~]$ cd bup
[techarena51@vps ~]$ make
[techarena51@vps ~]$ make test
[techarena51@vps ~]$ sudo make install

对于 debian/ubuntu 用户, 你可以使用 “apt-get build-dep bup”. 要获得更多的信息, 可以查看 https://github.com/bup/bup

在 CentOS 7 上, 当你运行 “make test” 时可能会出错, 但你可以继续运行 “make install”.

第一步时初始化一个空的仓库, 就像 git 一样.

[techarena51@vps ~]$ bup init

默认情况下, bup 会把仓库存储在 “~/.bup” 中, 但你可以通过设置环境变量 “export BUP_DIR=/mnt/user/bup” 来改变设置.

然后, 创建所有文件的索引. 这个索引, 就像之前讲过的那样, 存储了一系列文件和它们的属性及 git 目标 id (sha1 哈希表). (属性包括了软链接, 权限和不可改变字节)

bup index /path/to/file
bup save -n nameofbackup /path/to/file
#Example
[techarena51@vps ~]$ bup index /var/www/html
Indexing: 7973, done (4398 paths/s).
bup: merging indexes (7980/7980), done.
[techarena51@vps ~]$ bup save -n techarena51 /var/www/html
Reading index: 28, done.
Saving: 100.00% (4/4k, 28/28 files), done.
bloom: adding 1 file (7 objects).
Receiving index from server: 1268/1268, done.
bloom: adding 1 file (7 objects).

“BUP save” 会把所有内容分块, 然后把它们作为对象储存. “-n” 选项指定备份名.

你可以查看备份列表和已备份文件.

[techarena51@vps ~]$ bup ls
local-etc    techarena51  test
#Check for a list of backups available for my site
[techarena51@vps ~]$ bup ls techarena51
2014-09-24-064416  2014-09-24-071814  latest
#Check for the files available in these backups
[techarena51@vps ~]$ bup ls techarena51/2014-09-24-064416/var/www/html
apc.php                      techarena51.com              wp-config-sample.php         wp-load.php

在同一个服务器上备份文件从来不是一个好的选择. BUP 允许你远程备份网页文件, 但你必须保证你的 SSH 密钥和 BUP 都已经安装在远程服务器上.

bup index path/to/dir
bup save-r remote-vps.com -n backupname path/to/dir

例子: 备份 “/var/www/html” 文件夹

[techarena51@vps ~]$bup index /var/www/html
[techarena51@vps ~]$ bup save -r user@remotelinuxvps.com: -n techarena51 /var/www/html
Reading index: 28, done.
Saving: 100.00% (4/4k, 28/28 files), done.
bloom: adding 1 file (7 objects).
Receiving index from server: 1268/1268, done.
bloom: adding 1 file (7 objects).

恢复备份

登入远程服务器并输入下面的命令

[techarena51@vps ~]$bup restore -C ./backup techarena51/latest
#Restore an older version of the entire working dir elsewhere
[techarena51@vps ~]$bup restore -C /tmp/bup-out /testrepo/2013-09-29-195827
#Restore one individual file from an old backup
[techarena51@vps ~]$bup restore -C /tmp/bup-out /testrepo/2013-09-29-201328/root/testbup/binfile1.bin

唯一的缺点是你不能把文件恢复到另一个服务器, 你必须通过 SCP 或者 rsync 手动复制文件.

通过集成的 web 服务器查看备份.

bup web
#specific port
bup web :8181

你可以使用 shell 脚本来运行 bup, 并建立一个每日运行的定时任务.

#!/bin/bash
bup index /var/www/html
bup save -r user@remote-vps.com: -n techarena51 /var/www/html

BUP 并不完美, 但它的确能够很好地完成任务. 我当然非常愿意看到这个项目的进一步开发, 希望以后能够增加远程恢复的功能.

你也许喜欢阅读这篇——使用inotify-tools实时文件同步.


via: http://techarena51.com/index.php/using-git-backup-website-files-on-linux/

作者:Leo G 译者:wangjiezhe 校对:Caroline

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-4002-1.html

Linux:Linux有问必答:如何修复“X11 forwarding request failed on channel 0”错误

问题: 当我尝试使用SSH的X11转发选项连接到远程主机时, 我在登录时遇到了一个 “X11 forwarding request failed on channel 0” (X11 转发请求在通道0上失败)的错误。 我为什么会遇到这个错误,并且该如何修复它?

首先,我们假设你已经正确启用了SSH的X11转发

Linux:Linux有问必答:如何修复“X11 forwarding request failed on channel 0”错误
Linux:Linux有问必答:如何修复“X11 forwarding request failed on channel 0”错误

如果你在登录时遇到”X11 forwarding request failed on channel 0″ (X11 转发请求在通道0上失败),这里可能有不同的原因,解决的方法也不同。

Linux:Linux有问必答:如何修复“X11 forwarding request failed on channel 0”错误
Linux:Linux有问必答:如何修复“X11 forwarding request failed on channel 0”错误

方案一

出于安全原因,OpenSSH服务默认将X11转发请求绑定到本地回环地址上,并且在DISPLAY环境变量中将主机名设置为“localhost”。在这样的设定下,一些 X11客户端不能正确处理X11转发,这会导致报告中的错误。要解决这个问题,在/etc/ssh/sshd配置文件中加入下面这几行,它可以将X11转发请求绑定到外网卡地址上。

$ sudo vi /etc/ssh/sshd_config

X11Forwarding yes
X11UseLocalhost no

重启SSH使设置生效:

$ sudo /etc/init.d/ssh restart (Debian 6, Ubuntu or Linux Mint)
$ sudo systemctl restart ssh.service (Debian 7, CentOS/RHEL 7, Fedora)
$ sudo service sshd restart (CentOS/RHEL 6)

方案二

如果远程主机的SSH服务禁止了IPv6,那么X11转发失败的错误也有可能发生。要解决这个情况下的错误。打开/etc/ssh/sshd配置文件,取消对”AddressFamily all” (如果有这条的话)的注释。接着加入下面这行。这会强制SSH服务只使用IPv4而不是IPv6。(LCTT 译注:此处恐有误,AddressFamily 没有 all 这个参数,而 any 代表同时支持 IPv6和 IPv4,以此处的场景而言,应该是关闭IPv6支持,只支持 IPv4,所以此处应该是“注释掉 AddressFamily any”才对。)

$ sudo vi /etc/ssh/sshd_config

AddressFamily inet

再说一次,重启SSH服务来完成设置


via: http://ask.xmodulo.com/fix-broken-x11-forwarding-ssh.html

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-4014-1.html

Linux:在命令行中管理 Wifi 连接

无论何时要安装一款新的 Linux 发行系统,一般的建议都是让您通过有线连接来接到互联网的。这主要的原因有两条:第一,您的无线网卡也许安装的驱动不正确而不能用;第二,如果您是从命令行中来安装系统的,管理 WiFi 就非常可怕。我总是试图避免在命令行中处理 WiFi 。但 Linux 的世界,应具有无所畏惧的精神。如果您不知道怎样操作,您需要继续往下来学习之,这就是写这篇文章的唯一原因。所以我迫使自己学习如何在命令行中管理 WiFi 连接。

Linux:在命令行中管理 Wifi 连接
Linux:在命令行中管理 Wifi 连接

通过命令行来设置连接到 WiFi 当然有很多种方法,但在这篇文章里,同时也是一个建议,我使用最基本的方法:那就是使用在任何发布版本中都有的包含在“默认包”里的程序和工具。或者说我偏向于使用这一种方法。使用此方法显而易见的好处是这个操作过程能在任意有 Linux 系统的机器上复用。不好的一点是它相对来说比较复杂。

首先,我假设您们都已经正确安装了无线网卡的驱动程序。没有这前提,后续的一切都如镜花水月。如果您你机器确实没有正确安装上,您应该看看关于您的发布版本的维基和文档。

然后您就可以用如下命令来检查是哪一个接口来支持无线连接的:

$ iwconfig

一般来说,无线接口都叫做 wlan0。当然也有例外的,但在这篇教程中我们将会一直用通用叫法。

以防万一,你得确认下以使此接口服务是启动着的:

$ sudo ip link set wlan0 up

一但确认了无线接口是工作着的,你就可以用如下命令来扫描附近的无线网络了:

$ sudo iw dev wlan0 scan | less
Linux:在命令行中管理 Wifi 连接
Linux:在命令行中管理 Wifi 连接

根据扫描出的结果,可以得到网络的名字(它的 SSID),它的信息强度,以及它使用的是哪个安全加密的(如:WEP、WPA/WPA2)。从此时起,将会分成两条路线:情况很好、很容易的以及情况稍微复杂的。

如果您想连接的网络是没有加密的,您可以用下面的命令直接连接:

$ sudo iw dev wlan0 connect [网络 SSID]

如果网络是用 WEP 加密的,也非常容易:

$ sudo iw dev wlan0 connect [网络 SSID] key 0:[WEP 密钥]

但网络使用的是 WPA 或 WPA2 协议的话,事情就不好办了。这种情况,您就得使用叫做 wpasupplicant 的工具,它默认是没有的。然后需要修改 /etc/wpasupplicant/wpa_supplicant.conf 文件,增加如下行:

network={
    ssid="[网络 ssid]"
    psk="[密码]"
    priority=1
}

我建议你​​在文件的末尾添加它,并确保其他配置都注释掉。要注意 SSID 和密码字串都是大小写敏感的。在技术上您也可以把接入点的名称当做是 SSID,使用 wpa_supplicant 工具的话会有合适的 SSID 来替代这个名字。

一旦配置文件修改完成后,在后台启动此命令:

$ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf

最后,无论是连到开放的网络还是加密的安全网络,您都得获取 IP 地址。简单地使用如下命令:

$ sudo dhcpcd wlan0

如果一切顺利的话,您应该已经通过 DHCP 获取到了一个全新的本地 IP,这个过程是在后台自动完成的。如果想确认下是否真正连接上的话,您可以再一次输入如下命令检查:

$ iwconfig
Linux:在命令行中管理 Wifi 连接
Linux:在命令行中管理 Wifi 连接

最后,我认为多次重复第一步的检查操作是很有必要的。您永远不会知道什么时候您的图形用户界面挂了,或者是什么时候不能访问无线连接了,所以现在就准备着用命令来检测吧。还有,前面提到过的,有很多种方式(如 NetworkManager、wicdnetcfgwifi 等等)来管理无线连接。我坚持使用最基本的方式,但在某些情况下,我使用的工具可能您还没有,所以您在之前就得先下载它们。另一方面,有很多高级的应用程序,他们确实是不包含在“默认包”里面的,使用它们会大大简化操作过程。但一般建议是开始的话最好从基本的来。

关于从命令行来管理连接 WiFi 您还有其他方式方法吗?请在评论中让我们知道。


via: http://xmodulo.com/2014/08/manage-wifi-connection-command-line.html

作者:Adrien Brochard 译者:runningwater 校对:校对者ID

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-4015-1.html

Linux:如何清理 Ubuntu 14.04 的最近打开文件历史列表

这个简明教程对Ubuntu 14.04历史文件清理进行了说明,它用于初学者。

要从dash搜索删除历史记录,请遵循以下程序。

转到系统设置(System Settings)并打开安全与隐私(Security & Privacy)。

Linux:如何清理 Ubuntu 14.04 的最近打开文件历史列表
Linux:如何清理 Ubuntu 14.04 的最近打开文件历史列表

在文件与应用(Files and Applications)标签下,点击清除用户数据(Clear Usage Data)。

Linux:如何清理 Ubuntu 14.04 的最近打开文件历史列表
Linux:如何清理 Ubuntu 14.04 的最近打开文件历史列表

你也可以关闭“记录文件与应用使用(Record file and Application usage)以阻止系统记录你当前使用的文件和应用。

Linux:如何清理 Ubuntu 14.04 的最近打开文件历史列表
Linux:如何清理 Ubuntu 14.04 的最近打开文件历史列表

via: http://www.ubuntugeek.com/how-to-delete-recently-opened-files-history-in-ubuntu-14-04.html

译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-4016-1.html

Linux:技巧:在CentOS 7上安装Vmware 10

在CentOS 7上安装Vmware 10.0.3,我来介绍下我的经验。通常,这个版本是不能在CentOS 7工作的,因为它只能运行在比较低的内核版本3.10上。

首先,以正常方式下载并安装(没有问题)。唯一的问题是在后来运行vmware程序的时候。

如何修复?

1 – 进入 /usr/lib/vmware/modules/source。

cd /usr/lib/vmware/modules/source

2 – 解压 vmnet.tar.

tar -xvf vmnet.tar

3 – 进入 vmnet-only 目录。

cd vmnet-only

4 – 编辑filter.c文件。

vi filter.c

在206和259行,替换以下字符串:

#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)

为:

#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 0, 0)

保存并退出。

5 – 回到先前文件夹。

cd ../

6 – 再次压缩文件夹。

tar -uvf vmnet.tar vmnet-only

7 – 移除旧目录。

rm -fr vmnet-only

8 – 启动vmware并体验。

Linux:技巧:在CentOS 7上安装Vmware 10
Linux:技巧:在CentOS 7上安装Vmware 10

via: http://www.unixmen.com/install-vmware-10-centos-7/

作者: M.el Khamlichi 译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-4017-1.html

Linux:学习VIM之2014

作为一名开发者,你不应该把时间花费在考虑如何去找你所要编辑的代码上。在我转移到完全使用 VIM 的过程中,感到最痛苦的就是它处理文件的方式。从之前主要使用 Eclipse 和 Sublime Text 过渡到 VIM,它没有捆绑一个常驻的文件系统查看器对我造成了不少阻碍,而其内建的打开和切换文件的方式总是让我泪流满面。

就这一点而言,我非常欣赏VIM文件管理功能的深度。在工作环境上我已经装配了这些工具,甚至比起那些视觉编辑器好很多。因为这个是纯键盘操作,可以让我更快地在代码里面穿梭。搭建环境需要花费一些时间,安装几个插件。首先第一步是我明白vim内建功能只是处理文件的一种选择。在这篇文章里我会带你去认识vim文件管理功能与使用更高级的插件。

Linux:学习VIM之2014
Linux:学习VIM之2014

基础篇:打开新文件

学习vim其中最大的一个障碍是缺少可视提示,不像现在的GUI图形编辑器,当你在终端打开一个新的vim是没有明显的提示去提醒你去走什么,所有事情都是靠键盘输入,同时也没有更多更好的界面交互,vim新手需要习惯如何靠自己去查找一些基本的操作指令。好吧,让我开始学习基础吧。

创建新文件的命令是:e 或:e 打开一个新缓冲区保存文件内容。如果文件不存在它会开辟一个缓冲区去保存与修改你指定文件。缓冲区是vim是术语,意为”保存文本块到内存”。文本是否能够与存在的文件关联,要看是否每个你打开的文件都对应一个缓冲区。

打开文件与修改文件之后,你可以使用:w命令来保存在缓冲区的文件内容到文件里面,如果缓冲区不能关联你的文件或者你想保存到另外一个地方,你需要使用:w 来保存指定地方。

这些是vim处理文件的基本知识,很多的开发者都掌握了这些命令,这些技巧你都需要掌握。vim提供了很多技巧让人去深挖。

缓冲区管理

基础掌握了,就让我来说更多关于缓冲区的东西,vim处理打开文件与其他编辑器有一点不同,打开的文件不会作为一个标签留在一个可见的地方,而是只允许你同时只有一个文件在缓冲区打开,vim允许你打开多个缓存区。一些会显示出来,另外一些就不会,你需要用:ls来查看已经打开的缓存,这个命令会显示每个打开的缓存区,同时会有它们的序号,你可以通过这些序号使用:b 来切换或者使用循序移动命令 :bnext:bprevious 也可以使用它们的缩写:bn:bp

这些命令是vim管理文件缓冲区的一个基础,我发现他们不会按照我的想法映射出来。我不想关心缓冲区的顺序,我只想按照我的想法去到那个文件或者想在当前这个文件.因此必需了解vim更深入的缓存模式,我不是推荐你必须用内部命令来作为主要的文件管理方案。但这些的确是很强大可行的选择。

Linux:学习VIM之2014
Linux:学习VIM之2014

分屏

分屏是vim其中一个最好用的管理文件功能,在vim中你可以将当前窗口同时分开为2个窗口,可以按照你喜欢的配置去重设大小和分配,个别时候,我可以在同时打开6文件每个文件,每个都拥有不同大小。

你可以通过命令:sp 来新建水平分割窗口或者 :vs 垂直分割窗口。你可以使用这些关键命令去调整你想要的窗口大小,老实说,我喜欢用鼠标处理vim任务,因为鼠标能够给我更加准确的两列的宽度而不需要猜大概的宽度。

创建新的分屏后,你需要使用ctrl-w [h|j|k|l]来向后向前切换。这个有一点笨拙,但这个却是很重要、很普遍、很容易、很高效的操作。如果你经常使用分屏,我建议你去.vimrc使用以下代码去设置别名为ctrl-h ctrl-j 等等。

nnoremap   "Ctrl-j to move down a split
nnoremap   "Ctrl-k to move up a split
nnoremap   "Ctrl-l to move    right a split
nnoremap   "Ctrl-h to move left a split

跳转表

分屏是解决多个关联文件同时查看问题,但我们仍然不能解决已打开文件与隐藏文件之间快速移动问题。这时跳转表是一个能够解决的工具。

跳转表是众多插件中看起来奇怪而且很少使用的一个。vim能够追踪每一步命令还有切换你正在修改的文件。每次从一个分屏窗口跳到另外一个,vim都会添加记录到跳转表里面。它记录你去过的地方,这样就不需要担心之前的文件在哪里,你可以使用快捷键去快速追溯你的踪迹。Ctrl-o允许你返回你上一次地方。重复操作几次就能够返回到你最先编写的代码段地方。你可以使用ctrl-i来向前返回。当你在调试多个文件或在两个文件之间切换时,它能够发挥极大的快速移动功能。

插件

如果你想vim像Sublime Text 或者Atom一样,我就让你认清一下,这里有很好的机会让你看清一些难懂,可怕和低效的事情。例如大家会发出”当Sublime有了模糊查找功能,为什么我一定要输入全路径才能够打开文件” “没有侧边栏显示目录树我怎样查看项目结构” 等等。但vim有了解决方案。这些方案不需要破坏vim的核心。我只需要经常修改vim配置与添加一些最新的插件,这里有3个有用的插件可以让你像Sublime管理文件

  • CtrlP 是一个跟Sublime的”Go to Anything”栏一样模糊查找文件.它快如闪电并且非常可配置性。我使用它主要用来打开文件。我只需知道部分的文件名字不需要记住整个项目结构就可以查找了。

  • The NERDTree 这个一个文件管理夹插件,它重复了很多编辑器都有的侧边文件管理夹功能。我实际上很少用它,对于我而言模糊查找会更加快。对于你接手一个项目,尝试学习项目结构与了解什么可以用是非常方便的,NERDTree是可以自己定制配置,安装它能够代替vim内置的目录工具。

  • Ack.vim 是一个专为vim的代码搜索插件,它允许你跨项目搜索文本。它封装了Ack 或 Ag 这两个极其好用的搜索工具,允许你在任何时候在你项目之间快速搜索跳转。

在vim核心与它的插件生态系统之间,vim 提供足够的工具允许你构建你想要得工作环境。文件管理是软件开发系统的最核心部分并且你值得拥有体验的权利。

开始时需要通过很长的时间去理解它们,然后在找到你感觉舒服的工作流程之后再开始在上面添加工具。但依然值得你去使用,你不用爆头就可以理解如何去使用,能够轻易编写你的代码。

更多插件资源

  • Seamlessly Navigate Vim & Tmux Splits 这个插件需要每一个想使用它的人都要懂得使用tmux,这个跟vim的splits 一样简单好用。

  • Using Tab Pages 它是一个vim的标签功能插件,虽然它的名字用起来有一点疑惑,但它不是文件管理器。对如何在有多个工作可视区使用”tab pages” 在vim wiki 网站上有更好的概述。

  • Vimcasts: The edit command 一般来说 Vimcasts 是大家学习vim的一个好资源。这个屏幕截图与一些内置工作流程很好地描述了之前说的文件操作方面的知识。


via: http://benmccormick.org/2014/07/07/learning-vim-in-2014-working-with-files/

作者:Ben McCormick 译者:haimingfg 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-4023-1.html

Linux:使用vmstat和iostat命令进行Linux性能监控

这是我们正在进行的Linux命令和性能监控系列的一部分。vmstatiostat两个命令都适用于所有主要的类unix系统(Linux/unix/FreeBSD/Solaris)。

如果vmstatiostat命令在你的系统中不可用,请安装sysstat软件包。vmstatsariostat命令都包含在sysstat(系统监控工具)软件包中。iostat命令生成CPU和所有设备的统计信息。你可以从这个连接中下载源代码包编译安装sysstat,但是我们建议通过YUM命令进行安装。

Linux:使用vmstat和iostat命令进行Linux性能监控
Linux:使用vmstat和iostat命令进行Linux性能监控

在Linux系统中安装sysstat

#yum -y install sysstat
  • vmstat – 内存,进程和分页等的简要信息。
  • iostat – CPU统计信息,设备和分区的输入/输出统计信息。

Linux下vmstat命令的6个范例

1. 列出活动和非活动的内存

如下范例中输出6列。vmstat的man页面中解析的每一列的意义。最重要的是内存中的free属性和交换分区中的siso属性。

[root@tecmint ~]# vmstat -a
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 810420  97380  70628    0    0   115     4   89   79  1  6 90  3  0
  • Free – 空闲的内存空间
  • si – 每秒从磁盘中交换进内存的数据量(以KB为单位)。
  • so – 每秒从内存中交换出磁盘的数据量(以KB为单位)。

注意:如果你不带参数的执行vmstat命令,它会输出自系统启动以来的总结报告。

2. 每X秒执行vmstat,共执行N次

下面命令将会每2秒中执行一次vmstat,执行6次后自动停止执行。

[root@tecmint ~]# vmstat 2 6
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 810420  22064 101368    0    0    56     3   50   57  0  3 95  2  0
 0  0      0 810412  22064 101368    0    0     0     0   16   35  0  0 100  0  0
 0  0      0 810412  22064 101368    0    0     0     0   14   35  0  0 100  0  0
 0  0      0 810412  22064 101368    0    0     0     0   17   38  0  0 100  0  0
 0  0      0 810412  22064 101368    0    0     0     0   17   35  0  0 100  0  0
 0  0      0 810412  22064 101368    0    0     0     0   18   36  0  1 100  0  0

3. 带时间戳的vmstat命令

-t参数执行vmstat命令,该命令将会在每一行输出后都带一个时间戳,如下所示。

[tecmint@tecmint ~]$ vmstat -t 1 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ ---timestamp---
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 632028  24992 192244    0    0    70     5   55   78  1  3 95  1  0        2012-09-02 14:57:18 IST
 1  0      0 632028  24992 192244    0    0     0     0  171  514  1  5 94  0  0        2012-09-02 14:57:19 IST
 1  0      0 631904  24992 192244    0    0     0     0  195  600  0  5 95  0  0        2012-09-02 14:57:20 IST
 0  0      0 631780  24992 192244    0    0     0     0  156  524  0  5 95  0  0        2012-09-02 14:57:21 IST
 1  0      0 631656  24992 192244    0    0     0     0  189  592  0  5 95  0  0        2012-09-02 14:57:22 IST

4. 统计各种计数器

vmstat命令的-s参数,将输出各种事件计数器和内存的统计信息。

[tecmint@tecmint ~]$ vmstat -s
      1030800  total memory
       524656  used memory
       277784  active memory
       185920  inactive memory
       506144  free memory
        26864  buffer memory
       310104  swap cache
      2064376  total swap
            0  used swap
      2064376  free swap
         4539 non-nice user cpu ticks
            0 nice user cpu ticks
        11569 system cpu ticks
       329608 idle cpu ticks
         5012 IO-wait cpu ticks
           79 IRQ cpu ticks
           74 softirq cpu ticks
            0 stolen cpu ticks
       336038 pages paged in
        67945 pages paged out
            0 pages swapped in
            0 pages swapped out
       258526 interrupts
       392439 CPU context switches
   1346574857 boot time
     2309 forks

5. 磁盘统计信息

vmstat-d参数将会输出所有磁盘的统计信息。

[tecmint@tecmint ~]$ vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
ram0       0      0       0       0      0      0       0       0      0      0
ram1       0      0       0       0      0      0       0       0      0      0
ram2       0      0       0       0      0      0       0       0      0      0
ram3       0      0       0       0      0      0       0       0      0      0
ram4       0      0       0       0      0      0       0       0      0      0
ram5       0      0       0       0      0      0       0       0      0      0
ram6       0      0       0       0      0      0       0       0      0      0
ram7       0      0       0       0      0      0       0       0      0      0
ram8       0      0       0       0      0      0       0       0      0      0
ram9       0      0       0       0      0      0       0       0      0      0
ram10      0      0       0       0      0      0       0       0      0      0
ram11      0      0       0       0      0      0       0       0      0      0
ram12      0      0       0       0      0      0       0       0      0      0
ram13      0      0       0       0      0      0       0       0      0      0
ram14      0      0       0       0      0      0       0       0      0      0
ram15      0      0       0       0      0      0       0       0      0      0
loop0      0      0       0       0      0      0       0       0      0      0
loop1      0      0       0       0      0      0       0       0      0      0
loop2      0      0       0       0      0      0       0       0      0      0
loop3      0      0       0       0      0      0       0       0      0      0
loop4      0      0       0       0      0      0       0       0      0      0
loop5      0      0       0       0      0      0       0       0      0      0
loop6      0      0       0       0      0      0       0       0      0      0
loop7      0      0       0       0      0      0       0       0      0      0
sr0        0      0       0       0      0      0       0       0      0      0
sda     7712   5145  668732  409619   3282  28884  257402  644566      0    126
dm-0   11578      0  659242 1113017  32163      0  257384 8460026      0    126
dm-1     324      0    2592    3845      0      0       0       0      0      2

6. 以MB为单位输出统计信息

vmstat-S-M参数(大写和MB)将会以MB为单位输出。vmstat默认以KB为单位输出统计信息。

[root@tecmint ~]# vmstat -S M 1 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0    346     53    476    0    0    95     8   42   55  0  2 96  2  0
 0  0      0    346     53    476    0    0     0     0   12   15  0  0 100  0  0
 0  0      0    346     53    476    0    0     0     0   32   62  0  0 100  0  0
 0  0      0    346     53    476    0    0     0     0   15   13  0  0 100  0  0
 0  0      0    346     53    476    0    0     0     0   34   61  0  1 99  0  0

来源:https://linux.cn/article-4024-1.html

Linux:全能冠军:Linux系统性能和使用活动监控工具 sysstat

Sysstat是一个非常方便的工具,它带有众多的系统资源监控工具,用于监控系统的性能和使用情况。我们在日常使用的工具中有相当一部分是来自sysstat工具包的。同时,它还提供了一种使用cron表达式来制定性能和活动数据的收集计划。

Linux:全能冠军:Linux系统性能和使用活动监控工具 sysstat
Linux:全能冠军:Linux系统性能和使用活动监控工具 sysstat

下表是包含在sysstat包中的工具

  • iostat: 输出CPU的统计信息和所有I/O设备的输入输出(I/O)统计信息。
  • mpstat: 关于CPU的详细信息(单独输出或者分组输出)。
  • pidstat: 关于运行中的进程/任务、CPU、内存等的统计信息。
  • sar: 保存并输出不同系统资源(CPU、内存、IO、网络、内核等。。。)的详细信息。
  • sadc: 系统活动数据收集器,用于收集sar工具的后端数据。
  • sa1: 系统收集并存储sadc数据文件的二进制数据,与sadc工具配合使用
  • sa2: 配合sar工具使用,产生每日的摘要报告。
  • sadf: 用于以不同的数据格式(CVS或者XML)来格式化sar工具的输出。
  • Sysstat: sysstat工具的man帮助页面。
  • nfsiostat: NFS(Network File System)的I/O统计信息。
  • cifsiostat: CIFS(Common Internet File System)的统计信息。

最近(在2014年6月17日),sysstat 11.0.0(稳定版)已经发布了,同时还新增了一些有趣的特性,如下:

pidstat命令新增了一些新的选项:首先是“-R”选项,该选项将会输出有关策略和任务调度的优先级信息。然后是“-G”选项,通过这个选项我们可以使用名称搜索进程,然后列出所有匹配的线程。

sar、sadc和sadf命令在数据文件方面同样带来了一些功能上的增强。与以往只能使用“saDD”来命名数据文件。现在使用-D选项可以用“saYYYYMMDD”来重命名数据文件,同样的,现在的数据文件不必放在“var/log/sa”目录中,我们可以使用“SA_DIR”变量来定义新的目录,该变量将应用与sa1和sa2命令。

在Linux系统中安装sysstat

在主要的linux发行版中,‘sysstat’工具包可以在默认的程序库中安装。然而,在默认程序库中的版本通常有点旧,因此,我们将会下载源代码包,编译安装最新版本(11.0.0版本)。

首先,使用下面的连接下载最新版本的sysstat包,或者你可以使用wget命令直接在终端中下载。

Linux:全能冠军:Linux系统性能和使用活动监控工具 sysstat
Linux:全能冠军:Linux系统性能和使用活动监控工具 sysstat

下载sysstat包

然后解压缩下载下来的包,进去该目录,开始编译安装

# tar -xvf sysstat-11.0.0.tar.gz
# cd sysstat-11.0.0/

这里,你有两种编译安装的方法:

a)

第一,你可以使用iconfig(这将会给予你很大的灵活性,你可以选择/输入每个参数的自定义值)

# ./iconfig
Linux:全能冠军:Linux系统性能和使用活动监控工具 sysstat
Linux:全能冠军:Linux系统性能和使用活动监控工具 sysstat

sysstat的iconfig命令

b)

第二,你可以使用标准的configure,在命令行中定义所有选项。你可以运行 ./configure –help 命令来列出该命令所支持的所有限选项。

# ./configure --help
Linux:全能冠军:Linux系统性能和使用活动监控工具 sysstat
Linux:全能冠军:Linux系统性能和使用活动监控工具 sysstat

stsstat的cofigure -help

在这里,我们使用标准的./configure命令来编译安装sysstat工具包。

# ./configure
# make
# make install
Linux:全能冠军:Linux系统性能和使用活动监控工具 sysstat
Linux:全能冠军:Linux系统性能和使用活动监控工具 sysstat

在Linux系统中配置sysstat

在编译完成后,我们将会看到一些类似于上图的输出。现在运行如下命令来查看sysstat的版本。

# mpstat -V
sysstat version 11.0.0
(C) Sebastien Godard (sysstat  orange.fr)

更新Linux 系统中的sysstat

默认的,sysstat使用“/usr/local”作为其目录前缀。因此,所有的二进制数据/工具都会安装在“/usr/local/bin”目录中。如果你的系统已经安装了sysstat 工具包,则上面提到的二进制数据/工具有可能在“/usr/bin”目录中。

因为“$PATH”变量不包含“/usr/local/bin”路径,你在更新时可能会失败。因此,确保“/usr/local/bin”路径包含在“$PATH”环境变量中,或者在更新前,在编译和卸载旧版本时将-prefix选项指定值为“/usr”。

# yum remove sysstat            [On RedHat based System]
# apt-get remove sysstat        [On Debian based System]

# ./configure --prefix=/usr
# make
# make install

现在,使用‘mpstat’命令的‘-V’选项查看更新后的版本。

# mpstat -V
sysstat version 11.0.0
(C) Sebastien Godard (sysstat  orange.fr)

参考: 更多详细的信息请到 Sysstat Documentation

在我的下一篇文章中,我将会展示一些sysstat命令使用的实际例子,敬请关注更新。别忘了在下面评论框中留下您宝贵的意见。


via: http://www.tecmint.com/install-sysstat-in-linux/

作者:Kuldeep Sharma 译者:cvsher 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-4025-1.html

Linux:Sysstat性能监控工具包中20个实用命令

在我们上一篇文章中,我们已经学习了如何去安装和更新sysstat,并且了解了包中的一些实用工具。

Linux:Sysstat性能监控工具包中20个实用命令
Linux:Sysstat性能监控工具包中20个实用命令

今天,我们将会通过一些有趣的实例来学习mpstat, pidstat, iostatsar等工具,这些工具可以帮组我们找出系统中的问题。这些工具都包含了不同的选项,这意味着你可以根据不同的工作使用不同的选项,或者根据你的需求来自定义脚本。我们都知道,系统管理员都会有点懒,他们经常去寻找一些更简单的方法来完成他们的工作。

mpstat – 处理器统计信息

1.不带任何参数的使用mpstat命令将会输出所有CPU的平均统计信息

tecmint@tecmint ~ $ mpstat
Linux 3.11.0-23-generic (tecmint.com)   Thursday 04 September 2014  _i686_  (2 CPU)
12:23:57  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
12:23:57  IST  all   37.35    0.01    4.72    2.96    0.00    0.07    0.00    0.00    0.00   54.88

2.使用‘-p’ (处理器编号)和‘ALL’参数将会从0开始独立的输出每个CPU的统计信息,0表示第一个cpu。

tecmint@tecmint ~ $ mpstat -P ALL
Linux 3.11.0-23-generic (tecmint.com)   Thursday 04 September 2014  _i686_  (2 CPU)
12:29:26  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
12:29:26  IST  all   37.33    0.01    4.57    2.58    0.00    0.07    0.00    0.00    0.00   55.44
12:29:26  IST    0   37.90    0.01    4.96    2.62    0.00    0.03    0.00    0.00    0.00   54.48
12:29:26  IST    1   36.75    0.01    4.19    2.54    0.00    0.11    0.00    0.00    0.00   56.40

3.要进行‘N’次,平均每次间隔n秒的输出CPU统计信息,如下所示。

tecmint@tecmint ~ $ mpstat -P ALL 2 5
Linux 3.11.0-23-generic (tecmint.com)   Thursday 04 September 2014  _i686_  (2 CPU)
12:36:21  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
12:36:23  IST  all   53.38    0.00    2.26    0.00    0.00    0.00    0.00    0.00    0.00   44.36
12:36:23  IST    0   46.23    0.00    1.51    0.00    0.00    0.00    0.00    0.00    0.00   52.26
12:36:23  IST    1   60.80    0.00    3.02    0.00    0.00    0.00    0.00    0.00    0.00   36.18
12:36:23  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
12:36:25  IST  all   34.18    0.00    2.30    0.00    0.00    0.00    0.00    0.00    0.00   63.52
12:36:25  IST    0   31.63    0.00    1.53    0.00    0.00    0.00    0.00    0.00    0.00   66.84
12:36:25  IST    1   36.73    0.00    2.55    0.00    0.00    0.00    0.00    0.00    0.00   60.71
12:36:25  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
12:36:27  IST  all   33.42    0.00    5.06    0.25    0.00    0.25    0.00    0.00    0.00   61.01
12:36:27  IST    0   34.34    0.00    4.04    0.00    0.00    0.00    0.00    0.00    0.00   61.62
12:36:27  IST    1   32.82    0.00    6.15    0.51    0.00    0.00    0.00    0.00    0.00   60.51

(LCTT译注: 上面命令中‘2’ 表示每2秒执行一次‘mpstat -P ALL’命令, ‘5’表示共执行5次)

4.使用‘I’参数将会输出每个处理器的中断统计信息

tecmint@tecmint ~ $ mpstat -I
Linux 3.11.0-23-generic (tecmint.com)   Thursday 04 September 2014  _i686_  (2 CPU)
12:39:56  IST  CPU    intr/s
12:39:56  IST  all    651.04
12:39:56  IST  CPU        0/s        1/s        6/s        8/s        9/s       12/s       16/s       17/s       20/s       21/s       22/s       23/s       45/s       46/s       47/s      NMI/s      LOC/s      SPU/s      PMI/s      IWI/s      RTR/s      RES/s      CAL/s      TLB/s      TRM/s      THR/s      MCE/s      MCP/s      ERR/s      MIS/s
12:39:56  IST    0      76.27       1.73       0.00       0.00       0.42       0.33       0.00       0.06      11.46       0.00       0.00       0.01       7.62       1.87       0.05       0.33     182.26       0.00       0.33       3.03       0.00      22.66       0.16       5.14       0.00       0.00       0.00       0.00       0.00       0.00
12:39:56  IST    1      70.88       1.44       0.00       0.00       0.41       0.33       0.00      27.91      10.33       0.00       0.00       0.01       7.27       1.79       0.05       0.32     184.11       0.00       0.32       5.17       0.00      22.09       0.13       4.73       0.00       0.00       0.00       0.00       0.00       0.00
12:39:56  IST  CPU       HI/s    TIMER/s   NET_TX/s   NET_RX/s    BLOCK/s BLOCK_IOPOLL/s  TASKLET/s    SCHED/s  HRTIMER/s      RCU/s
12:39:56  IST    0       0.00     116.49       0.05       0.27       7.33       0.00       1.22      10.44       0.13      37.47
12:39:56  IST    1       0.00     111.65       0.05       0.41       7.07       0.00      56.36       9.97       0.13      41.38

5.使用‘A’参数将会输出上面提到的所有信息,等同于‘-u -I All -p ALL’。

tecmint@tecmint ~ $ mpstat -A
Linux 3.11.0-23-generic (tecmint.com)   Thursday 04 September 2014  _i686_  (2 CPU)
12:41:39  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
12:41:39  IST  all   38.70    0.01    4.47    2.01    0.00    0.06    0.00    0.00    0.00   54.76
12:41:39  IST    0   39.15    0.01    4.82    2.05    0.00    0.02    0.00    0.00    0.00   53.95
12:41:39  IST    1   38.24    0.01    4.12    1.98    0.00    0.09    0.00    0.00    0.00   55.57
12:41:39  IST  CPU    intr/s
12:41:39  IST  all    651.73
12:41:39  IST    0    173.16
12:41:39  IST    1    225.89
12:41:39  IST  CPU        0/s        1/s        6/s        8/s        9/s       12/s       16/s       17/s       20/s       21/s       22/s       23/s       45/s       46/s       47/s      NMI/s      LOC/s      SPU/s      PMI/s      IWI/s      RTR/s      RES/s      CAL/s      TLB/s      TRM/s      THR/s      MCE/s      MCP/s      ERR/s      MIS/s
12:41:39  IST    0      76.04       1.77       0.00       0.00       0.41       0.36       0.00       0.06      11.60       0.00       0.00       0.01       7.42       1.83       0.05       0.34     182.89       0.00       0.34       2.97       0.00      22.69       0.16       5.22       0.00       0.00       0.00       0.00       0.00       0.00
12:41:39  IST    1      70.70       1.48       0.00       0.00       0.40       0.36       0.00      27.47      10.46       0.00       0.00       0.01       7.08       1.75       0.05       0.32     184.83       0.00       0.32       5.10       0.00      22.19       0.13       4.91       0.00       0.00       0.00       0.00       0.00       0.00
12:41:39  IST  CPU       HI/s    TIMER/s   NET_TX/s   NET_RX/s    BLOCK/s BLOCK_IOPOLL/s  TASKLET/s    SCHED/s  HRTIMER/s      RCU/s
12:41:39  IST    0       0.00     116.96       0.05       0.26       7.12       0.00       1.24      10.42       0.12      36.99
12:41:39  IST    1       0.00     112.25       0.05       0.40       6.88       0.00      55.05       9.93       0.13      41.20

来源:https://linux.cn/article-4028-1.html

Linux:Linux有问必答:如何在PDF中嵌入LaTex中的所有字体

提问: 我通过编译LaTex源文件生成了一份PDF文档。然而,我注意到,并不是所有字体都嵌入到了PDF文档中。我怎样才能确保所有的字体嵌入在由LaTex生成的PDF文档中?

当你创建一个PDF文件时,在PDF文件中嵌入字体是一个好主意。如果你不嵌入字体,PDF浏览器可以在计算机上没有字体的情况下使用其他东西代替。这将导致文件被在不同的PDF浏览器或操作系统平台上呈现不同的样式。当你打印出来的文档时,缺少的字体是一个问题。

Linux:Linux有问必答:如何在PDF中嵌入LaTex中的所有字体
Linux:Linux有问必答:如何在PDF中嵌入LaTex中的所有字体

当你从LaTex中生成PDF文档时(例如用pdflatex或dvipdfm),可能并不是所有的字体都嵌入在PDF文档中。例如,pdffonts下面的输出中提示PDF文档中有缺少的字体(如Helvetica)。

Linux:Linux有问必答:如何在PDF中嵌入LaTex中的所有字体
Linux:Linux有问必答:如何在PDF中嵌入LaTex中的所有字体

为了避免这样的问题,下面是如何在LaTex编译时嵌入所有的字体。

$ latex document.tex
$ dvips -Ppdf -G0 -t letter -o document.ps document.dvi
$ ps2pdf -dPDFSETTINGS=/prepress
-dCompatibilityLevel=1.4
-dAutoFilterColorImages=false
-dAutoFilterGrayImages=false
-dColorImageFilter=/FlateEncode
-dGrayImageFilter=/FlateEncode
-dMonoImageFilter=/FlateEncode
-dDownsampleColorImages=false
-dDownsampleGrayImages=false
document.ps document.pdf

现在你可以看到所有的字体都被嵌入到PDF中了。

Linux:Linux有问必答:如何在PDF中嵌入LaTex中的所有字体
Linux:Linux有问必答:如何在PDF中嵌入LaTex中的所有字体

via: http://ask.xmodulo.com/embed-all-fonts-pdf-document-latex.html

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

来源:https://linux.cn/article-4029-1.html

Linux:在Ubuntu Trusty 14.04 (LTS) (64-bit)安装Docker

Ubuntu Trusty带来的是3.13.0 Linux kernel ,需要准备所有ubuntu库的某些条件,docker安装包被称之为docker.io。(注:Ubuntu (和Debian)包含有一些比较旧的同样被称之为docker的KDE3/GNOME2安装包,因此此处的docker安装包被称之为docker.io。)

Linux:在Ubuntu Trusty 14.04 (LTS) (64-bit)安装Docker
Linux:在Ubuntu Trusty 14.04 (LTS) (64-bit)安装Docker

安装:

安装ubuntu下的安装包(可能不是最新的)

$ sudo apt-get update $ sudo apt-get install docker.io $ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker $ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io $ source /etc/bash_completion.d/docker.io

如果你想尝试一下最新版打docker

首先,你要检查一下APT系统能够被https解析,URLs:文件/usr/lib/apt/methods/https应该已经存在了,如果没有,你需要安装软件包apt-transport-https!

[ -e /usr/lib/apt/methods/https ] || { apt-get update apt-get install apt-transport-https }

之后,添加Docker repository key到本地keychain

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

添加docker软件仓库到软件源,升级软件源,安装lxc-docker包!

$ sudo sh -c "echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list" $ sudo apt-get update $ sudo apt-get install lxc-docker

注:有个简单脚本可以用于这个过程

$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh

验证所有的工作都如预期完成了

$ sudo docker run -i -t ubuntu /bin/bash

OK,完毕!

来源:http://imcn.me/html/y2014/22206.html

Linux:巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力!

一.什么是tmpfs和/dev/shm/? 

tmpfs是Linux/Unix系统上的一种基于内存的文件系统。tmpfs可以使用您的内存或swap分区来存储文件。由此可见,tmpfs主要存储暂存的文件。它有如下2个优势:

1)动态文件系统的大小。 

2)tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在内存 RAM 中,读写几乎可以是瞬间的。 

同时它也有一个缺点  tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载,绑定的操作。tmpfs不具备持久性,重启后数据不保留,请务必注意!!!  

Linux:巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力!
Linux:巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力!

/dev/shm/是一个设备文件,它使用就是tmpfs文件系统(注意:在Centos和Redhat下,/dev/shm目录是一个链接,指向/run/shm目录,在Ubuntu系统下tmpfs文件系统对应的是/run/shm目录,可以使用df命令查看),因为 /dev/shm/这个目录不在硬盘上,而是在内存里,它就所谓的tmpfs。在Redhat/CentOS等linux发行版中默认大小为物理内存的一半。 比如我的的Red Hat Enterprise Linux Server 5.4 64(单核,512内存)分配内存为512M,所以/dev/shm为250M左右,查看/dev/shm如下: 

[root@AY1212111202285f63122 ~]# df -h 
Filesystem            Size  Used Avail Use% Mounted on 
/dev/hda1              20G  7.6G   11G  42% / 
tmpfs                 250M     0  250M   0% /dev/shm 

tmpfs是基于内存的文件系统,创建时不需要使用mkfs等初始化。如我想把/dev/shm tmpfs大小改为512M,修改/etc/fstab的:

tmpfs       /dev/shm    tmpfs  defaults   0 0 

改为 

tmpfs       /dev/shm    tmpfs  defaults,size=512m    0 0 

然后执行mount -o remount /dev/shm 

[root@AY1212111202285f63122 ]# mount -o remount /dev/shm 
[root@AY1212111202285f63122 ]# df -h 
Filesystem            Size  Used Avail Use% Mounted on 
/dev/hda1              20G  7.6G   11G  42% / 
tmpfs                 512M     0  512M   0% /dev/shm 

怎么样,变成512M啦,使用很方便吧,重启也没有问题的,哈哈。当然在生产环境中你可以把内存加大些,反正现在内存很便宜啦,为了提高性能也需要将/dev/shm加大。  

二.tmpfs(/dev/shm)的使用及应用场景 

tmpfs是基于内存的,速度是不用说的,硬盘和它没法比。Oracle 中的Automatic Memory Management特性就使用了/dev/shm。另外如果在网站运维中好好利用tmpfs,将有意想不到的收获。我们先在/dev/shm建一个tmp目前,并与/tmp绑定。 

[root@AY1212111202285f63122 ~]# mkdir  /dev/shm/tmp 
[root@AY1212111202285f63122 ~]# chmod  1777  /dev/shm/tmp    //注意权限 
[root@AY1212111202285f63122 ~]# mount --bind  /dev/shm/tmp  /tmp 
[root@AY1212111202285f63122 ~]# ls -ld /tmp 
drwxrwxrwt 2 root root 40 May 29 21:46 /tmp 

以下/tmp使用tmpfs文件系统的一些应用示例,一般tmpfs内存文件系统在做web缓存,cache,临时文件存储时会对web访问有很好的加速作用,从而提高网站访问的速度。 

(1)将squid的缓存目录cache_dir放到/tmp下 

vi /etc/squid/squid.conf  

修改成  

cache_dir ufs /tmp 256 16 256  

这里的第一个256表示使用256M内存,重启一下squid服务,这样缓存目录都放在了tmpfs文件中了,速度不用说吧。  

(2)将php的session文件放在/tmp下 

对于一个访问量大的以apache php的网站,可能tmp下的临时文件都会很多,比如seesion或者一些缓存文件,那么你可以把它保存到tmpfs文件。保存seesion的方法很简单了:只要修改php.ini就行了,通过phpinfo测试文件查看你的php session存储位置,如果不在/tmp下,修改php.ini文件,修改如下: 

session.save_path = “/tmp” 

(3)将服务的socket文件放在/tmp下 

如nginx.socket和mysql.sock 。

至于tmpfs的其他应用,我想大家可能通过这篇文章会有所启发。再次强调下:tmpfs 数据在重新启动之后不会保留,重启tmpfs 数据会丢失,所以有必要做一些脚本做诸如加载,绑定的操作! 

来源:http://bbs.aliyun.com/read/139502.html