167 results found for find

linux 如何查找一个目录文件

在linux下如何查找一个名字为“main.img”的目录呢?某些人会想到locate命令,这个命令是linux下最简单的也是最快速的目录或文件查找方式。 但是locate命令有时候会查找不到我们想要的文件或目录的位置。那么我们还有其他的方法来查找吗?当然有,我们可以使用find 命令。 locate和find命令的区别: locate命令会从有updatedb预先生成的数据库中去查找, 而find命令这是通过递归方式去查询文件系统里的文件。 命令用法: 示例 显示当前目录的所有文件和子目录 在根目录下查找mysql目录 命令输出: 显示详细的文件或目录列表 使用-ls来列出查找到的文件或目录的详细信息 命令输出: 如何只列出目录文件: 命令输出: 如何不区分大小写去查找: 替换-name选项为-iname 或者 模式”mysql”将会匹配”mysql”,”MYSQL”,”Mysql”,”mySQL”等 最后回到我们之前的问题,如何找到名为”main.img”的目录呢? 通过下面的其中一个命令:

linux time 命令详细用法

time 命令常用于测量一个命令的运行时间,注意不是用来显示和修改系统时间的(这是date命令干的事情)。但是今天我通过查看time命令的手册页,发现它能 做的不仅仅是测量运行时间,还可以测量内存、I/O等的使用情况,手册页上的说法是time a simple command or give resource usage,其中time一词我认为它应该是测量或测定的意思,并不单指时间。一个程序在运行时使用的系统资源通常包括CPU、Memory和I/O等, 其中CPU资源的统计包括实际使用时间(real time)、用户态使用时间(the process spent in user mode)、内核态使用时间(the process spent in kernel mode)。但是简单的使用time命令并不能得到内存和I/O的统计数据,请看后文慢慢道来。 常用参数 time命令最常用的使用方式就是在其后面直接跟上命令和参数: time <command> [<arguments…>] 在命令执行完成之后就会打印出CPU的使用情况: real    0m5.064s      <== 实际使用时间(real time) user    0m0.020s    … read more »

Linux命令nohup和screen命令的区别

如果想在关闭ssh连接后刚才启动的程序继续运行怎么办,可以使用nohup。但是如果要求第二天来的时候,一开ssh,还能查看到昨天运行的程序的状态,然后继续工作,这时nohup是不行了,需要使用screen来达到这个目的。 nohup命令可以用来执行其他命令,并且忽略SIGHUP信号(run a command immune to hangups, with output to a non-tty。Run COMMAND, ignoring hangup signals.)当一个虚拟终端的网络连接断开时,操作系统向正在运行的程序发送SIGHUP信号(HUP = HangUP、挂断),默认情况下这个信号将使程序退出。 1.nohup命令 问题1为什么ssh一关闭,程序就不再运行了? 元凶:SIGHUP 信号 让我们来看看为什么关掉窗口/断开连接会使得正在运行的程序死掉。 在Linux/Unix中,有这样几个概念: 进程组(process group):一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的ID。 会话期(session):一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期ID为首进程的ID。 会话期可以有一个单独的控制终端(controlling terminal)。与控制终端连接的会话期首进程叫做控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组。 根据POSIX.1定义: 挂断信号(SIGHUP)默认的动作是终止程序。 当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)。 如果会话期首进程终止,则该信号发送到该会话期前台进程组。… read more »

Linux:Bash shell如何删除目录下除了特定类型文件外的所有文件

对于在linux环境下工作的人来说,需要经常对目录下的文件做操作,包括创建文件,删除文件,链接文件,或者拷贝文件等等。现在有一个需求是,如何通过bash shell 删除特定目录下的除了文件名包含.gz 或者.zip的所有文件?我们平时做的最多的关于删除文件的操作是删除特定模式的文件,通过使用rm命令,再加上linux下三个通配符:*,?, [..]. 其中:* – 是匹配任意字符 ?- 匹配任意一个单一字符 […] – 匹配任意一个方括号中的字符 通过使用shopt扩展模式匹配 如果之前使用过shopt命令的话,应该都知道shopt和set命令类似,用来定制shell的环境。下面我们通过下面的shopt命令来扩展shell的模式匹配功能,这样的话,上面的三个通配符的功能会被扩展,而且还会引入新的元字符。 [[email protected] work]# shopt -s extglob 之后我们就可以使用特有的元字符“!”来删除除特定文件之外的所有文件,下面是一个具体的例子: [[email protected] work]# ls aa aa.tar.gz bb cc [[email protected] work]# rm -rf !(aa.tar.gz) -bash: !:… read more »

linux下如何只显示所有的隐藏文件

对于linux管理员,有时候需要查找出并且只显示某个目录下所有的隐藏文件,那么我们如何来实现呢?下面请看本文的介绍如何使用find命令来递归查找目录下的所有的隐藏文件。 通过下面的命令来查找root目录下的所有的隐藏文件 [[email protected] ~]# find /root -name “.*” /root/.ssh /root/.bash_history /root/.bash_logout /root.bashrc /root/.cshrc /root/.viminfo /root/.bash_profile /root/.test1.swp /root/.mysql_history /root/.tcshrc 如果想把查到的文件全部删掉可以使用下面的命令 [[email protected] ~]# find /root -name “.*” | xargs rm -rf 更多的关于find的命令的使用,可以参考官方文档 

Linux/Unix:通过linux find命令删除查找到的文件

如何在linux操作系统或是类unix系统下使用linux find命令去查找文件并且将查找到的所有文件都删除呢?有时候我们不仅需要查找到文件还需要将其删除,但是传统的linux rm命令并不支持搜索功能,这个时候我们可以使用find命令去搜索特定目录下文件然后将文件删除。你可以将find命令和rm 命令结合起来去实现这个操作。 查找并删除文件 我们可以使用下面的命令来查找并删除文件: find [directory] [patern] [action] 其中, directory:指定要查找的目录 patern: 指定要查找的模式比如:*.jpg action:  指定对查找的文件执行什么操作 为了删除多个文件名包含*.jpg 文件,使用下面的命令 find . -name  “*.jpg” -exec rm -rf {} \; 或者 find . -type f -name “*.jpg” -exec… read more »

Linux/Unix:通过linux find 命令查找特定用户或用户组的文件

在linux或类unix操作系统里,如何来查找特定用户组或用户创建的文件呢?我们可以使用强大的 linux find 命令来查找文件。这个命令里有参数可以用来查找特定用户或用户组的文件。 通过用户组查找文件 使用下面的方法: find 目录 -group {用户组} -name {文件名} 其中, 目录:指定要查找的目录 用户组:根据指定的用户组来查找文件 文件名:查找该模式的文件名 示例: 1.查找所有在根目录下的属于”apache”用户组的文件: 命令输出: 2. 查找根目录下的所有属于“apache”用户组并且包含”*.css”的文件 命令输出: 如果想忽略大小来查找,可以使用下面的命令: 通过用户来查找文件 用法如下: find 目录 -user {用户名} -name {文件名} 其中, 目录:指定要通过find命令查找的目录 用户名:根据提供的用户来查找文件 文件名:… read more »

Linux/Unix:如何查找linux或unix服务器上的文件

对于linux新手来说,需要查找linux或unix服务器上的某个或某些特定模式的文件,那么如何来定位或查找这些文件呢? 你需要使用find 命令或者locate命令在linux服务器或者类unix服务器上查找文件。 linux find 命令用法 linux find 命令主要用来查找文件,该命令可以查找到你指定的特定目录下的符合特定模式的普通文件或目录文件,指定的查找条件可以是用户名,用户组,文件类型,文件权限,文件创建日期,时间等。而且更重要的一点是find命令可以递归查找整个指定目录下的文件。 使用方法如下: find {目录} -name {文件名} 动作 该命令默认的对查找到的文件执行的操作是在标准输出上打印查找到的文件,也就是下面的命令: find / -name “file pattern” -print Find 命令的示例 1.查找整个根目录下的名为“a.txt”的文件 2.查找/etc/目录下的所有”.conf”普通文件 3.查找/home/目录下的除了”*.css”的所有文件 为了查找到除了特定模式下的所有其它文件,可以使用-not 选项 或者“!” 或者 按文件类型查找文件 使用方法如下: 其中: 类型选项:… read more »

Linux下如何只显示目录名或者普通文件名

在linux下显示文件的时候或者查询文件的时候,如何只显示出目录文件的名字或者普通文件的名字呢? 当然,大家可能想到的第一个命令是“ls”来显示目录下的文件,但是“ls”命令显示的结果不能只显示目录文件,这个时候我们就需要考虑将ls命令和grep命令相结合来使用。 显示出当前目录下的所有的目录文件 输入下面的命令: 只显示当前目录下的普通文件 输入下面的命令: 上面用到egrep命令是grep命令的增强版本,它会通过后面的匹配模式(‘^’)来过滤由管道符传来的字符串。如果想显示非匹配到的普通文件,那么可以加”-v” 选项用来反转查找。 如果在平时工作的时候会经常需要上面的操作(只显示目录或只显示文件),那么可以创建别名,这样可以节省很多时间。 将上面的两行alias命令放入bash shell的启动文件.bash_profile里,这样每次启动新的shell程序的时候,都会自动执行。 示例: 1.通过输入下面的命令来只显示出普通文件名 2.只显示出当期目录的目录文件名 通过Find 命令来只显示普通文件名或目录文件名 1.输入下面的find命令来显示出/home目录下的所有的目录文件名 搞定! 更多参考: 1.grep 命令 2. grep显示匹配到的行数目 3.grep如何同时查找多个字符串匹配

Linux:如何更改目录下特定权限的文件为其它权限

对于一个系统管理员,有时候需要更改目录下所有特定权限的文件为其它的权限,比如我想把/home目录下所有的权限为644的文件更改为777权限,那么我们有什么好的办法来实现吗? 大家应该都知道如果想更改权限的话,可以是用chmod命令,如果要递归更改目录下所有子目录下的文件的权限,可以再chomd后面加上“-R”选项。下面我们通过使用find命令和chmod命令结合使用来实现我们上面的需求,更改特定权限的所有文件的权限为其它权限(有点绕,哈哈)。 首先我们使用find 命令查到根目录下所有权限为644的文件,输入下面的命令: 然后将上面查找到的文件的权限更改为777 如果要更改根目录下所有的目录或子目录的权限也为777,输入下面的命令: 示例: 更多参考: 1.Linux/Unix:通过linux find命令删除查找到的文件

linux/unix: 如何根据文件的访问时间或更改时间来查找文件

如果你不记的你要想找的文件到底放在什么目录下了,但是你只记得那些文件是在几个月前从网上下载下来的,这个时候我们如何才能找到这些文件呢? 首先你需要使用find命令来查找文件,如果有linux文件系统知识的人,大家应该知道每个文件都有三个属性,atime,ctime,mtime,这个三个属性会记录文件的最后一次的特定操作属性。 其中, atime-最后一次读文件的时间 ctime-最后一次更改文件属性的时间 mtime-最后一次更改文件内容的时间 那么有了这个三个文件属性,就可以使用find命令结合这个三个属性来查找到你的文件。 下面以mtime为例子做说明: -mtime +10 是指要查找到10天前最后一次更改的所有文件 -mtime -10 是指要查找到小于10天的最后一次更改的所有文件 -mtime 10  是要查找到正好10天的最后一次更改内容的所有文件 例子: 1.查找10天前更改的所有的.txt文件 2.显示10天前更改的所有的.txt文件的内容 更多参考: 1.其它关于Linux find 命令的用法   https://www.osetc.com/?s=find 2. linux find命令按用户和用户组来查找文件 3. find man帮助 

Linux/Centos:如何快速的检测CPU的温度

对于linux系统管理员,需要知道如何能更快速的来检测服务器中cpu的温度,那如何才能检测到cpu的温度信息呢?下面本文将会介绍一个工具叫lm_sensor来获取cpu的温度: 首先我们需要检测下lm_sensors这个软件包是否被安装。 接下来我们就通过yum来安装: 安装lm_sensors之后,我们需要使用sensors-detect命令来加载所有需要的内核模块,这样才能检测cpu的温度,输入下面的命令: 所有必需的内核模块加载完毕后,我们就可以使用sensor命令来检测当前主机的cpu的温度了:

新手Linux学习路线图终极版

对于刚入门linux学习或者准备学习linux的同学们来说,学习linux该从何学起?有什么好的linux学习入门书籍呢?本文将会给linux新手们展示学习linux的终极路线图, 该路线图分为初级,中级,高级阶段。 1. 初级阶段需要掌握的linux知识要点  1)学习linux的第一步首先是要下载linux系统iso镜像文件,然后在虚拟机或物理机上去安装。 2)Linux系统的安装,可以先从centos 或者ubuntu系统开始学习安装 3)掌握linux图形界面(Gnome或KDE)的使用,这个很容易,就和windows的差不多 4)linux目录结构的掌握,比如根目录,home 目录, var 目录,etc目录等各个目录主要用来放什么文件 5)linux常用命令的使用 6)Linux系统下常用软件的使用(比如音乐,电影播放,文件浏览,pdf,word等常用办公文档的查看,编辑,创建,压缩文件如何打开,如何安装中文输入法软件等。。)    Lnux常用的基本命令: linux系统操作命令:login、 shutdown、 halt、 reboot 、mount、umount 、chsh linux文件操作命令:file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cat、 ln linux系统管理相关命令: df、 top、 free、… read more »

Linux学习方法分享

随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起。作为一个 Linux系统管理员,我看了许多有关Linux的文档和书籍,并为学习Linux付出了许多艰苦的努力。当真正获得了一份正式的Linux系统管理工作后,我更加深刻地理解了Linux的灵魂:服务与多用户。Linux系统知识是非常广博的,但是只要掌握了重点知识,管理它并没有想象中的那么可怕。在下面我会将作为系统管理员的一些工作心得和总结出来的经验系统地介绍给大家。 一、 学习的目的 通过Linux的学习掌握UNIX的目的想必不用多说了,在这个网络人才身价倍增的年代,想靠技术吃饭又不想掌握网络和编程技术是不明智的。当一人第一次听说Linux并跃跃欲试的时候,总会提出几个?,它是什么(What)? 为什么要用它(Why)? 怎样学习它(How)?做为开放源码运动的主要组成部分,Linux的应用越来越广泛,从我们平时的娱乐、学习,到商业、政府办公,再到大规模计算的应用。为了满足人们的需求,各种各样的、基于Linux的应用软件层出不穷。只要具备了LinuX的基本功,并具有了自学的能力之后,都可以通过长期的学习将专项内容予以掌握。 二、 从命令开始从基础开始 常常有些朋友一接触Linux 就是希望构架网站,根本没有想到要先了解一下Linux 的基础。这是相当困难的。虽然Linux桌面应用发展很快,但是命令在Linux中依然有很强的生命力。Linux是一个命令行组成的操作系统,精髓在命令行,无论图形界面发展到什么水平这个原理是不会变的,Linux命令有许多强大的功能:从简单的磁盘操作、文件存取、到进行复杂的多媒体图象和流媒体文件的制作。这里笔者把它们中比较重要的和使用频率最多的命令,按照它们在系统中的作用分成几个部分介绍给大家,通过这些基础命令的学习我们可以进一步理解 Linux系统: ●安装和登录命令:login、 shutdown、 halt、 reboot 、mount、umount 、chsh ●文件处理命令:file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cat、 ln ●系统管理相关命令: df、 top、 free、 quota 、at、 lp、… read more »

Linux学习:工作中最常用的linux命令

在上个文章,说了下如何在vmware虚拟机上安装linux操作系统,本文主要说一下在装完系统后,如何使用和必须记住的linux常用基本命令。linux命令有两种类型,内置的shell命令和linux系统命令,linux下的命令有很多,大概有几千个,所以也不用记住所有的命令,只需要熟练使用那些常用的久可以。本文将会列出日常工作中最常用的命令。  系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 – (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpuinfo 显示CPU info的信息 cat /proc/interrupts 显示中断 cat /proc/meminfo 校验内存使用… read more »

CentOS/linux:如何查找目录下文件中是否包含指定字符串

在centos linux系统下查找文件中是否包含特定的行是经常会做的事情。那么如何来查看特定目录下的文件中是否包含特定的字符串呢?我们可以使用linux find命令来实现。 输入下面的命令: 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 1.正则表达式 (1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/、*、?等)组成。 (2)基本元字符集及其含义 ^ :只匹配行首。 如^a 匹配以a开头的行abc,a2e,a12,aaa,…… $ :只匹配行尾。 如^a 匹配以a结尾的行bca,12a,aaa,……. * :匹配0个或多个此单字符。 如(a)* 匹配 空,a,aa,aaa,…. [] :只匹配[]内字符。可以是一个单字符,也可以是字符序列,用”,”将里面要匹配的不同字符串分开。也可以使用-来表示[]内字符序列的范围,如[1-5]表示[12345] \ :只用来屏蔽一个元字符的特殊含义。 如\*,\’,\”,\|,\+,\^,\. 等 .:(点)只匹配任意单字符。 pattern\{n\}:只用来匹配前面pattern出现的次数.n为次数。如a\{2\}匹配aa. pattern\{n,\}:含义同上,但次数最少为n.如a\{2,\}匹配aa,aaa,aaaa,….. pattern\{n,m\}:含义同上,但次数在n和m之间。如a\{2,4\}匹配aa,aaa,aaaa三个 (3)举例说明: ^$ :匹配空行 ^.$… read more »

正则表达式:Python 模块 re 简介

正则表达式简介 正则表达式(RegExp)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(元字符)。 为了使文章更具可读性,本文将正则表达式冗长的 语法介绍 放在了文章的末尾。 运算符的优先级 正则表达式运算符的优先级顺序由高到低依次为: 转义符:\ 括号和中括号:(),(?:),(?=), [] 限定符:*,+,?,{n},{n,},{n,m} 定位点和序列:^,$,\元字符,字符 替换:| 字符具有高于替换运算符的优先级,使得 m|food 匹配 m 或 food。若要匹配 mood 或 food,请使用括号创建子表达式,即 (m|f)ood。 Raw String 正则表达式使用反斜杠 \ 来代表特殊形式或用作转义字符,这里跟 Python 的语法冲突,因此,Python 只好用 \\\\… read more »

Python: 另辟蹊径实现Android多渠道打包

要先说明的是本文说的“渠道”单指在 AndroidManifest.xml用 定义的一个标识字符串(如友盟统计)。在代码或者通过其他文件定义的方式殊途同归。 说起 Android 多渠道打包,真是八仙过海各显神通:有手动一个个耐心打包的,有用 Ant或 Maven重复跑编译任务的,有用 apktool解包后再修改重打包的,有在build.gradle定义一堆 flavor的,乃至有 通过apk里 META-INF/下的空文件来定义渠道的 。 上述方法各有优劣,在这里就不一一赘述了。 本文要介绍的是另一种方法: 直接修改APK中的 AndroidManifest.xml。 上述种种,说白了都是围绕着如何修改 AndroidManifest.xml,如何重打包或是重编译。介绍的这个方法也不外如是,只是无需重打包重编译而已。 首先得知道一点,APK中的 AndroidMainfest.xml,解压出来用文本编辑器可是不能直接打开的,它是 aapt生成的一个二进制的xml格式(被称为 AXML),得用其他工具(如apktool)先解析出来。所以问题来了,如何直接修改这个 AXML 文件? 如何修改AXML中渠道名 想要修改一个文件,你得先了解它的格式。AXML文件格式其实早已有人研究,如: 《发布C语言的Android binary XML(AXML)解析代码》, 《AndroidManifest Ambiguity方案原理及代码》。 这里就直接引用结论了: string在AXML中是存放在 StringChunk中的;… read more »

Linux:Inxi:获取Linux的系统和硬件信息

我们已经展示了一些不同的应用程序和方法来获取Linux的系统和硬件信息。在这一系列里,我们将看到如何使用inxi来获取这些详情信息。在论坛技术支持中,它可以作为调试工具,迅速确定用户的系统配置和硬件信息。 Inxi是一个可以获取完整的系统和硬件详情信息的命令行工具,内容包括: 硬件 CPU 磁盘驱动器 Xorg 桌面环境 内核 GCC版本 进程 内存占用 和其他有用的信息 安装方法 Inxi在多数现代GNU/Linux操作系统的默认软件仓库中。所以我们可以简单地运行下列命令安装。 在基于Debian的发行版: sudo apt-get install inxi 在Fedora: sudo yum install inxi 在基于RHEL的发行版: 安装EPEL软件仓库: sudo yum install epel-release 然后使用如下命令安装inxi: sudo yum install inxi… read more »

Python: Spark 学习笔记

Spark 学习笔记 Spark作为分布式系统框架的后起之秀(据说)各方面都要优于hadoop,有本地缓存,原生支持潮潮的scala, 对python的支持强大到直接可以用ipython notebook 作为交互界面。 还有几个正在开发中的分支框架分别用于机器学习和社交网络分析,简直华丽的飞起。 安装 根据阿帕奇基金会的尿性,应该是没有所谓的安装一说的,下载,解压就能使用了,当然不要忘了设置环境变量,具体不啰嗦. 使用 spark全面支持scala和java,部分支持python。好在scala也是脚本语言,所以相对比hadoop方便的多,先来看看两种交互模式。 pyspark 命令行使用 pyspark以后terminal中就会出现个大大SPARK图案和熟悉的python默认交互界面,这太丑了有啥更优秀的没? 利用 PYSPARK_DRIVER_PYTHON=ipython ./bin/pyspark呼出ipython交互界面,这个比原来的好多了。 利用 调用ipython notebook 随便进去个试试示例的程序,还是用WordCount好了 成功输出~ 对了,为了避免hadoop警告建议把native lib 屏蔽了 spark-shell 这个是最常用的工具了,开发语言是scala,scala的话可以用脚本也可以编译执行,我觉得还是脚本方便 使用写的脚本方法是 $spark-shell -i XXX.scala 这样就会一条一条的执行了 还是WordCount WordCount.scala放在$SPARKPATH/scala目录下 执行… read more »

Python: 深入Python流程控制

1. if 语句 不要在遍历序列的同时,改变序列的大小,如果你非要这么做,那就在for循环时遍历序列的一个副本 如果需要一个数值序列,内置函数 range() 会很方便, range(start,end,step) 会按步长为step,生成一个[start, end)范围内的等差数列。 在序列循环时,索引位置与对应值可以使用 enumerate() 函数同时得到: 在字典循环时,关键字与对应的值可以使用 items() 方法同时解读出来: 同时循环两个或更多的序列,可以使用 zip() 整体打包: 需要逆向循环的话,先正向定位序列,然后调用 reversed() 函数: 需要按排序后的顺序循环序列的话,使用 sorted() 函数,它不会改动原序列,而是生成了一个新的已排序的序列: 3. while 语句 a,b = 0,1 while b < 100:... read more »

Python: 【Python爬虫实战】爬取糗事百科段子

来自: 静觅丨崔庆才的个人博客 链接:http://cuiqingcai.com/990.html 声明:本文仅限技术交流讨论 这次为大家带来,Python爬取糗事百科的小段子的例子。 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来。 本篇目标 1.抓取糗事百科热门段子 2.过滤带有图片的段子 3.实现每按一次回车显示一个段子的发布时间,发布人,段子内容,点赞数。 糗事百科是不需要登录的,所以也没必要用到Cookie,另外糗事百科有的段子是附图的,我们把图抓下来图片不便于显示,那么我们就尝试过滤掉有图的段子吧。 好,现在我们尝试抓取一下糗事百科的热门段子吧,每按下一次回车我们显示一个段子。 1 . 确定URL并抓取页面代码 首先我们确定好页面的URL是 http://www.qiushibaike.com/hot/page/1,其中最后一个数字1代表页数,我们可以传入不同的值来获得某一页的段子内容。 我们初步构建如下的代码来打印页面代码内容试试看,先构造最基本的页面抓取方式,看看会不会成功 # -*- coding:utf-8 -*- import urllib import urllib2 page = 1 url = ‘http://www.qiushibaike.com/hot/page/’ + str(page) try:… read more »

Linux:如何部署 Docker Registry 服务

本文阐释了怎样部署私有的 Docker Registry 服务 —— 或为公司私用,或公开给其他用户使用。例如,你公司可能需要私人的 Registry 来支持持续集成(CI)。又或,你的公司可能有大量镜像方式的产品或服务,你想以公司品牌的方式来整体提供和呈现。 Docker 公共的 Registry 里维护有一个默认的 registry 镜像可以用以协助该部署过程。该 Registry 镜像对本地测试足矣,但不能用于生产环境。对于生产环境,应以 docker/distribution 为基础,自行配置并构建自定义 Registry 镜像。 注意:本文中的例子在 Ubuntu 14.04 下编写及测试。如果你在不同的操作系统中运行Docker,你或许需要“翻译”这些命令,以适合你运行环境的需要。 官方镜像下的简单示例 本节中,将创建一个 Container 来运行 Docker 的官方 Registry 镜像。你将推送(Push)一个镜像到这个 Registry 服务器,然后再从该 Registry 中拉取(Pull)同一个镜像。 这是个很好的练习,有助于理解客户端与本地 Registry 的基本交互。… read more »

Linux:重走LFS之路:(八) 基础系统编译-1

(题图来自: techradar.com)   从现在开始,我们进入真正意义上的LFS系统的基础系统编译。 这个阶段比较漫长,中间还有可能出现各种各样的问题,我会尽量翔实地记录遇到的各种状况和解决方案,以供后来参考。 Linux-3.19 API Headers cd /src/linux-3.19 执行编译清理 cd /src/linux-3.19 重新编译 make INSTALL_HDR_PATH=dest headers_install 删除非必要文件 find dest/include ( -name .install -o -name ..install.cmd ) -delete 手工安装 cp -rv dest/include/* /usr/include Man-pages-3.79 cd… read more »

Linux:重走LFS之路:(五) 工具链编译-2

(题图来自: techradar.com) 继续来编译工具,接下来编译Glibc if [ ! -r /usr/include/rpc/types.h ]; then su -c ‘mkdir -pv /usr/include/rpc’ su -c ‘cp -v sunrpc/rpc/*.h /usr/include/rpc’ fi tar -xf glibc-2.21.tar.xz cd glibc-2.21/ mkdir -v ../glibc-build cd ../glibc-build/ ../glibc-2.21/configure –prefix=/tools –host=$LFS_TGT… read more »

Linux:重走LFS之路:(四) 工具链编译-1

经过了充分的准备工作之后,我们要来着手工具链的编译。LFS不能直接使用宿主系统的编译器和库进行编译,而是用宿主系统的编译器和库再编译出来一份编译器和库,然后二次编译编译器和库,最后才能用最终的编译器来编译构建LFS系统。所以我们现在需要做的是来编译这些工具。 (题图来自: techradar.com) 这些工具的编译比较冗长,所以可能需要数篇的篇幅来记录这些过程。 首先需要创建一个目录来安置这些工具 mkdir -v $LFS/tools 然后为了方便,我们在根目录做了个软连接 /tools -> $LFS/tools sudo ln -sv $LFS/tools /tools 这时候有个坑,LFS 7.7官方文档上写的命令是ln -sv $LFS/tools /,但是事实上在Debian 7.7版本实测,酱紫可能会有问题,就像这样 接下来为了避免使用权限大的账号误操作造成宿主机损失,新建一个lfs账户,加入lfs组,并且将$LFS下的src和tools两个目录属主都改为lfs。 sudo groupadd lfs sudo useradd -s /bin/bash -g lfs -m -k… read more »

Linux:重走LFS之路:(三) 磁盘初始化与源码准备

当硬件部分都准备就绪,就可以开始动手来准备软件了。不过在开始编译之前需要先做一件事,就像Windows中说的要格式化分区。虽然我真心不喜欢用Linux和Windows比,因为那样着实像是在英语和汉语之间来回翻译,想想就知道印欧语系和汉藏语系两门语言跨语系表述是多别扭的事。 (题图来自: techradar.com) 在Linux中,我们把这个操作叫做建立文件系统。Linux使用的文件系统是ext系列和swap,其中swap只用作交换分区的格式,所谓交换分区可以理解为虚拟内存。 此时我们已经建立了三个分区/dev/sdb1 /dev/sdb2 /dev/sdb5,其中/dev/sdb1用作引导分区,我们将其文件系统建立为ext2,虽然实测ext4也没问题,但是可能是为了兼容一些老的东西吧,习惯上引导分区还是用ext2。作为swap分区的/dev/sdb2单独有分区格式,就叫做swap。剩下的/dev/sdb5使用ext4就好了。 sudo mkfs -v -t ext2 /dev/sdb1 sudo mkswap /dev/sdb2 sudo mkfs -v -t ext4 /dev/sdb5 建立文件系统后,就可以挂载,然后使用这块空间了。不过在此之前为了方便,我们来加个环境变量 export LFS=/mnt/lfs 从此以后,我们就以$LFS来作为lfs工程的存储根目录,只不过需要记得,每次宿主系统重启之后,都需要重新export和mount,如果嫌这样太麻烦,可以把环境变量定义和分区挂载写入用户配置文件~/.bashrc 建立$LFS,用到p和v两个选项,p是parents,如果父目录不存在就一路新建,v会创建成功后回显信息。 sudo mkdir -pv $LFS 此时回显了一条信息 mkdir: created directory… read more »

Linux:重走LFS之路:(一) 环境准备

自从大学二年级的寒假没日没夜地用了整整两个月的时间编译了LFS之后,就再也没做过。这两天在Linux中国的微信公众号上看到LFS都升级到7.7了,故而觉得是时候重新再编译一遍的时候了。 诚然LFS是Linux学习和深入理解的终南捷径,每个真心希望了解Linux的人都建议去做一遍LFS,因为每做一次就会获得新的知识,对Linux有更多更深入的理解。 (题图来自: techradar.com) 貌似LFS官网(http://www.linuxfromscratch.org)不再提供LiveCD了,好吧好吧,那我就从虚拟机装个宿主系统,依然是Debian。说句题外话,对于自己用得惯的OS,真心应该最小安装到虚拟机一份,再有需要的时候,直接复制一下改个名,省心又省力。 此时我把Debian更新到了最新,并且为了使用显卡驱动让它能够在我的显示器上全屏显示,就用tasksel装上了Debian desktop environment。 我在自己的Home目录中新建了一个目录lfs,用于整个工程的存储。这时候我在~/lfs/中新建了一个checkscript目录,用于存储事前的环境检查脚本。 我们来编写第一个检查脚本,这个脚本会检查各个需要的工具及内核版本号,看看是否符合lfs7.7的列表要求,如果没有,会报not found。 cd ~/lfs/checkscript vi check_env.sh   #/bin/sh export LC_ALL=C bash –version | head -n1 | cut -d” ” -f2-4 echo “/bin/sh -> `readlink -f /bin/sh`”… read more »

Linux:Linux基础:如何找出你的系统所支持的最大内存

大多数情况下你可以从BIOS、产品目录或者干脆手动找出你的系统所持的最大内存。这里,我们介绍一种简单有用的技巧——使用dmidecode来找出系统支持的最大内存,这样你就无需打开机箱或者参照BIOS和产品目录了。 什么是 dmidecode? 就像你可能知道的一样, dmidecode是一个将计算机DMI(又名SMBIOS)表的内容转换为可读格式的工具。这个表包含了系统硬件组件的介绍以及其他一些如序列号和IOS版本等有用的信息。使用dmidecode你能够获取此项信息,而无需去探测真实的硬件。 找出你的系统所支持的最大内存 请确定你已经在系统中安装了dmidecode,我觉得你的操作系统应该已经自动安装过了,不过并不非常确定。 在基于Deb的系统中安装 sudo apt-get install dmidecode 在基于RPM的系统中安装 sudo yum install dmidecode 在SUSE/openSUSE中安装 sudo zypper in dmidecode 好了,我们已经安装了dmidecode,接下来让我们找出支持的最大内存。输入以下命令: sudo dmidecode -t 16 输出样本 # dmidecode 2.12 SMBIOS 2.6 present. Handle… read more »

Linux:如何在CentOS 7.0 安装 Websvn

大家好,今天我们会在CentOS 7.0 上为 subversion(SVN)安装Web 界面 WebSVN。(subverion 是 apache 的顶级项目,也称为 Apache SVN 或 SVN) WebSVN 将 Svbverion 的操作你的仓库的各种功能通过 Web 界面提供出来。通过它,我们可以看到任何给定版本的任何文件或者目录的日志,并且可看到所有文件改动、添加、删除的列表。我们同样可以查看两个版本间的差异来知道特定版本改动了什么。 特性 WebSVN提供了下面这些特性: 易于使用的用户界面 可定制的模板系统 色彩化的文件列表 追溯视图 日志信息查询 RSS支持 更多 由于其使用PHP写成,WebSVN同样易于移植和安装。 现在我们将为Subverison安装WebSVN。请确保你的服务器上已经安装了 SVN。如果你还没有安装,你可以按本教程安装。 安装完SVN后,你需要以下几步。 1. 下载 WebSVN… read more »

Linux:如何在Linux上找出并删除重复的文件:FSlint

大家好,今天我们会学习如何在Linux PC或者服务器上找出和删除重复文件。这里有一款工具你可以工具自己的需要使用。 无论你是否正在使用Linux桌面或者服务器,有一些很好的工具能够帮你扫描系统中的重复文件并删除它们来释放空间。图形界面和命令行界面的都有。重复文件是磁盘空间不必要的浪费。毕竟,如果你的确需要在不同的位置享有同一个文件,你可以使用软链接或者硬链接,这样就可以在磁盘的一个地方存储数据了。 FSlint FSlint 在不同的Linux发行版二进制仓库中都有,包括Ubuntu、Debian、Fedora和Red Hat。只需你运行你的包管理器并安装“fslint”包就行。这个工具默认提供了一个简单的图形化界面,同样也有包含各种功能的命令行版本。 不要担心FSlint的图形化界面太复杂。默认情况下,它会自动选中Duplicate窗格,并以你的家目录作为搜索路径。 要安装fslint,若像我这样运行的是Ubuntu,这里是默认的命令: $ sudo apt-get install fslint 这里还有针对其他发行版的安装命令: Debian: svn checkout http://fslint.googlecode.com/svn/trunk/ fslint-2.45 cd fslint-2.45 dpkg-buildpackage -I.svn -rfakeroot -tc sudo dpkg -i ../fslint_2.45-1_all.deb Fedora: sudo yum install fslint… read more »

Linux:在Ubuntu/Fedora/CentOS中安装Gitblit

Git是一款注重速度、数据完整性、分布式支持和非线性工作流的分布式版本控制工具。Git最初由Linus Torvalds在2005年为Linux内核开发而设计,如今已经成为被广泛接受的版本控制系统。 和其他大多数分布式版本控制系统比起来,不像大多数客户端-服务端的系统,每个Git工作目录是一个完整的仓库,带有完整的历史记录和完整的版本跟踪能力,不需要依赖网络或者中心服务器。像Linux内核一样,Git也是在GPLv2许可证下分发的自由软件。 本篇教程我会演示如何安装 gitlit 服务器。gitlit的最新稳定版是1.6.2。Gitblit是一款开源、纯Java开发的用于管理、浏览和提供Git仓库服务的软件。它被设计成一款为希望托管中心仓库的小型工作组服务的工具。 mkdir -p /opt/gitblit; cd /opt/gitblit; wget http://dl.bintray.com/gitblit/releases/gitblit-1.6.2.tar.gz 列出解压后目录内容: [email protected] [/opt/gitblit]# ls ./ docs/ gitblit-stop.sh* LICENSE service-ubuntu.sh* ../ ext/ install-service-centos.sh* migrate-tickets.sh* add-indexed-branch.sh* gitblit-1.6.2.tar.gz install-service-fedora.sh* NOTICE authority.sh* gitblit.jar install-service-ubuntu.sh* reindex-tickets.sh* data/… read more »

Python: 纯Python综合图像处理小工具(3)10种滤镜算法

  滤镜处理是图像处理中一种非常常见的方法。比如photoshop中的滤镜效果,除了自带的滤镜,还扩展了很多第三方的滤镜效果插件,可以对图像做丰富多样的变换;很多手机app实现了实时滤镜功能,最有名的当属Instagram。 滤镜的原理,常见的是针对数字图像的像素矩阵,使用一个nxn的方形矩阵做滤波器(即kernel,常见的如3×3,5×5等),对该像素矩阵进行遍历,遍历后的图像就是输出图像,如果算法经过优化,遍历的速度足够快,那就是实时滤镜(live filter),可以实时预览图像过滤后的效果。 ImageFilter是Python PIL的滤镜模块,当前版本支持10种加强滤镜,通过这些预定义的滤镜,可以方便的对图片进行一些过滤操作,从而去掉图片中的噪音(部分的消除),这样可以降低图像处理算法的复杂度(如模式识别等),更方便的实现和预览一些算法的效果。 本文脚本包含以下全部滤镜, 实现了九种图像处理滤镜的效果预览和JPEG文件保存。 ImageFilter.BLUR 模糊滤镜 ImageFilter.CONTOUR ImageFilter.DETAIL 细节滤镜 ImageFilter.EDGE_ENHANCE 边界加强 ImageFilter.EDGE_ENHANCE_MORE 边界加强(阀值更 大) ImageFilter.EMBOSS 浮雕滤镜 ImageFilter.FIND_EDGES 边界滤镜 ImageFilter.SMOOTH 平滑滤镜 ImageFilter.SMOOTH_MORE 平滑滤镜(阀值更大) ImageFilter.SHARPEN 锐化滤镜 原图: 模糊滤镜: 锐度增强滤镜: 细节滤镜: 轮廓滤镜: 边界提取滤镜: 边界增强滤镜:… read more »

Linux:20个 Unix/Linux 命令技巧

让我们用这些Unix/Linux命令技巧开启新的一年,提高在终端下的生产力。我已经找了很久了,现在就与你们分享。 删除一个大文件 我在生产服务器上有一个很大的200GB的日志文件需要删除。我的rm和ls命令已经崩溃,我担心这是由于巨大的磁盘IO造成的,要删除这个大文件,输入: > /path/to/file.log # 或使用如下格式 : > /path/to/file.log # 然后删除它 rm /path/to/file.log 如何记录终端输出? 试试使用script命令行工具来为你的终端输出创建输出记录。 script my.terminal.sessio 输入命令: ls date sudo service foo stop 要退出(结束script会话),输入 exit 或者 logout 或者按下 control-D。 exit 要浏览输入: more my.terminal.session… read more »

Linux:如何使用 fail2ban 防御 SSH 服务器的暴力破解攻击

对于SSH服务的常见的攻击就是暴力破解攻击——远程攻击者通过不同的密码来无限次地进行登录尝试。当然SSH可以设置使用非密码验证验证方式来对抗这种攻击,例如公钥验证或者双重验证。将不同的验证方法的优劣处先放在一边,如果我们必须使用密码验证方式怎么办?你是如何保护你的 SSH 服务器免遭暴力破解攻击的呢? fail2ban 是 Linux 上的一个著名的入侵保护的开源框架,它会监控多个系统的日志文件(例如:/var/log/auth.log 或者 /var/log/secure)并根据检测到的任何可疑的行为自动触发不同的防御动作。事实上,fail2ban 在防御对SSH服务器的暴力密码破解上非常有用。 在这篇指导教程中,我会演示如何安装并配置 fail2ban 来保护 SSH 服务器以避免来自远程IP地址的暴力攻击。 在linux上安装Fail2ban 为了在CentOS 或 RHEL上安装fail2ban,首先设置EPEL仓库,然后运行以下命令。 $ sudo yum install fail2ban 在Fedora上安装fail2ban,简单地运行以下命令: $ sudo yum install fail2ban 在ubuntu,Debian 或 Linux Mint上安装fail2ban: $… read more »

Linux:dupeGuru—直接从硬盘中查找并移除重复文件

简介 对我们来说,磁盘被装满是棘手问题之一。无论我们如何小心谨慎,我们总可能将相同的文件复制到多个不同的地方,或者在不知情的情况下,重复下载了同一个文件。因此,迟早你会看到“磁盘已满”的错误提示,若此时我们确实需要一些磁盘空间来存储重要数据,以上情形无疑是最糟糕的。假如你确信自己的系统中有重复文件,那么 dupeGuru 可能会帮助到你。 dupeGuru 团队也开发了名为 dupeGuru 音乐版 的应用来移除重复的音乐文件,和名为 dupeGuru 图片版 的应用来移除重复的图片文件。 1. dupeGuru (标准版) 需要告诉那些不熟悉 dupeGuru 的人,它是一个免费、开源、跨平台的应用,其用途是在系统中查找和移除重复文件。它可以在 Linux, Windows, 和 Mac OS X 等平台下使用。通过使用一个快速的模糊匹配算法,它可以在几分钟内找到重复文件。同时,你还可以调整 dupeGuru 使它去精确查找特定文件类型的重复文件,以及从你想删除的文件中,清除某种文件。它支持英语、 法语、 德语、 中文 (简体)、 捷克语、 意大利语、亚美尼亚语、俄语、乌克兰语、巴西语和越南语。 在 Ubuntu 14.10/14.04/13.10/13.04/12.04 中安装 dupeGuru dupeGuru 开发者已经构建了一个 Ubuntu PPA (Personal… read more »

Python: python实现grep查找功能

写这个程序的原因是Windows下的搜索功能不好用,有尝试过下载一下小工具来补偿搜索功能,但都不尽如人意,所以就干脆自己写一个了. 功能:在任何装有python2.7(或2.7以上3.0以下版本)的机器上运行文件名搜索、文件内容搜索. 代码 grep.py: 用法: 首先确保你的电脑有安装 python27 将grep.py文件放入有被设为环境变量的文件夹,这样可以直接在命令行运行命令. 然后打开命令行,去到你想搜索的目录(或者-p ),运行: 这样就可以查找指定目录下的文件内容,如果你的命令行已经在该目录,则-p选项可选,如果不指定文件名过滤,-s选项可选.如果想直接搜索文件名则可省去-k选项 grep.py -p -s 另外,-s和-k选项支持正则表达式,所以要注意使用转义符号,各个选项都支持多参数. 原文:http://linxianyan.cn/python实现linux下grep查找功能/

Linux:十个提升生产力的 bash 技巧

我喜欢钻研bash环境。很多时候,在使用bash编程中,有些问题一遍又一遍的重复遇到。每次我都需要重新思考这些问题的解决方法。直到有一天我无法忍受,于是坐下来,编写一个通用的函数,放入我的.bashrc文件中,部署到电脑上。 希望我的这些追求最大化命令行效率的努力成果也能给其他喜欢使用bash的朋友们带来一些帮助。我更大的期望是我的这种行为能引起其他朋友的互动——给我提建议、提出更好的bash技巧。 别的不多说了,下面就是我的总结。 (题图来自:understandquran.com) 技巧一、用命令行往文件的顶部添加文字 每次我都会重新寻找这个命令的写法。下面就是如何使用sed往一个文件顶部添加一行的方法: sed -i ‘1s/^/line to insertn/’ path/to/file/you/want/to/change.txt 技巧二、用命令行往配置文件里插入多行文本 这种方法非常简单,很多人都知道,下面就是如何用命令行将(>>)多行文本插入一个文件中。这里使用的是“here document”语法,它能让你通过块文本符号来将段落插入文件中,通常用的符合是EOF(意思是 “End Of File”): cat >> path/to/file/to/append-to.txt ~/.sdirs1 mv ~/.sdirs1 ~/.sdirs echo “export DIR_$1=$PWD” >> ~/.sdirs } # jump to bookmark… read more »

Linux:如何在终端使用后台运行模式启动一个Linux应用程序

这是一个篇幅不长但是十分有用的教程,可以帮助你在终端启动一个Linux应用程序,并且使终端窗口不会丢失焦点。 我们有很多可以在Linux系统中打开一个终端窗口的方法,这取决于你的选择以及你的桌面环境。 如果是使用Ubuntu的话,你可以利用CTRL+ALT+T组合键打开终端。当然你也可以使用超级键(Windows键)打开Dash,搜索“TERM”,然后点击“Term”图标来打开终端窗口。 对于其他的桌面环境来说,例如XFCE、KDE、LXDE、Cinnamon以及MATE,你可以在菜单中找到终端。有些环境会在停靠栏或者面板上面包含终端图标。 通常情况下,你可以在终端里面直接输入应用程序名来启动一个应用程序。比如说,你可以通过输入“firefox”来启动Firefox。 在终端启动应用程序的好处是,你可以包含一些额外的参数。 例如,你可以通过下列命令来打开一个Firefox浏览窗口,然后利用默认的搜索引擎搜索相关信息: firefox -search “linux.cn” 你可能会注意到,如果你启动Firefox,程序打开以后,回到了终端窗口控制,这就意味着你可以继续在终端进行工作。 通常情况下,如果你在终端启动了应用程序,控制会切换到新启动的应用程序,只有程序被关闭以后才会重新切换到终端控制。这是因为你在前台启动了这个程序。 如果要在Linux终端打开应用程序并且返回终端控制,那么你需要将应用程序启动为后台进程。 和下面所列的命令一样,我们可以通过增加一个(&)符号,将应用程序在后台启动。 libreoffice & 译者注:如果需要加参数的话,记得把&符号放在最后。 译者注:一般情况下,关闭终端时,在这个终端启动的后台程序也会被终止,要使终端关闭以后,后台程序依然保持执行可以使用下列命令 nohup command [arg…] & 如果应用程序目录没有安装在PATH变量包含的目录里面的话,我们就没有办法直接通过应用程序名来启动程序,必须输入应用程序的整个路径来启动它。 /path/to/yourprogram & 如果你不确定程序输入哪个Linux目录结构的话,可以使用find或者location命令来定位它。 可以输入下列符号来找到一个文件: find /path/to/start/from -name programname 例如,你可以输入下列命令来找到Firefox: find / -name… read more »

Linux:使用iSCSI Target创建集中式安全存储(一)

iSCSI 是一种块级别的协议,用于通过TCP/IP网络共享原始存储设备,可以用已经存在的IP和以太网如网卡、交换机、路由器等通过iSCSI协议共享和访问存储。iSCSI target是一种由远程iSCSI服务器(target)提供的远程硬盘。 在Linux中安装iSCSI Target 我们不需要占用很大的资源就可以为客户端提供稳定的连接和性能。iSCSI服务器称为“Target(目标器)”,它提供服务器上的存储共享。iSCSI客户端称为“Initiator(发起程序)”,它访问目标器共享的存储。市场中有卖的用于大型存储服务如SAN的iSCSI适配器。 我们为什么要在大型存储领域中使用iSCSI适配器 以太网适配器(NIC)被设计用于在系统、服务器和存储设备如NAS间传输分组数据,它不适合在Internet中传输块级数据。 iSCSI Target的功能 可以在一台机器上运行几个iSCSI 目标器 一台机器可以提供多个iSCSI 目标器用于iSCSI SAN访问 一个目标器就是一块存储,并且可以通过网络被发起程序(客户端)访问 把这些存储汇聚在一起让它们在网络中可以访问的是iSCSI LUN(逻辑单元号) iSCSI支持在同一个会话中使用多个连接 iSCSI发起程序在网络中发现目标接着用LUN验证并登录,这样就可以本地访问远程存储。 我们可以在本地挂载的LUN上安装任何操作系统,就像我们安装我们本地的操作系统一样。 为什么需要iSCSI? 在虚拟化中,我们需要存储拥有高度的冗余性、稳定性,iSCSI以低成本的方式提供了这些特性。与使用光纤通道的SAN比起来,我们可以使用已经存在的设备比如NIC、以太网交换机等建造一个低成本的SAN。 现在我开始使用iSCSI 目标器安装并配置安全存储。本篇中,我们遵循下面的步骤: 我们需要隔离一个系统来设置iSCSI 目标器和发起程序(客户端)。 在大型存储环境中可以添加多个硬盘,但是这里我们除了基本的安装盘之外只使用了一个额外的驱动器。 这里我们只使用了2块硬盘,一个用于基本的服务器安装,另外一个用于存储(LUN),这个我们会在这个系列的第二篇描述。 主服务器设置 操作系统 – CentOS 6.5 (Final)… read more »

Linux:使用Golang快速构建WEB应用

我们从来都不开发代码,我们只是代码的搬运工。— 阿飞 希望大家都变卡卡西。 — 啊贱 大家copy愉快,文档只做参考。如果发现问题或者有好的建议请回复我我回及时更正。 1.Abstract 在学习web开发的过程中会遇到很多困难,因此写了一篇类似综述类的文章。作为路线图从web开发要素的index出发来介绍golang开发的学习流程以及Example代码。 在描述中多是使用代码来描述使用方法不会做过多的说明。最后可以方便的copy代码来实现自己的需求。 本文适应对象: 对web开发有一定经验的人 能够灵活使用ajax的人(至少懂得前后分离) golang web 开发有一定了解,至少略读过一些golang web开发的书籍 看完本文之后您会收获: golang web开发的一些技巧 golang web开发的一些实用API 本文在描述的时候为了解释尽量详细,已经把解释写到代码注释中。 2.golang web 开发check list 略过的部分:基本流程控制,OOP等基础语法知识。 3.路由器 路由器是整个网站对外的灵魂,如果路由做的不好URL会非常恶心。所以这部分设计成第一个要说的内容。 路由分两种一种是手动路由为了通过tul调度固定的功能,另外一点就是资源的获取,通过url的分析来模仿静态页的方式来获取资源(类似get) 自动路由,主要使用OOP的COMMAND模式来实现。所有功能使用post,统一入口,方便权限管理,安全管理,跨域管理。但是如此强大的功能还是交给框架来做吧。这里就不给新手做参考了。 3.1手动路由 package main import (… read more »

Linux:怎样在废旧的硬件上安装 Xen 虚拟机监视器

Xen 是一个直接运行在硬件上的虚拟机监视器,这意味着你必须准备一个裸机来安装和运行 Xen。而 KVM 则和 Xen 有一些不同 —— 你可以把它添加到任何已经正在运行 Linux 的机器上。本教程描述了如何在废旧的硬件上安装和配置 Xen 虚拟机监视器。 整个安装过程使用 Debian Jessie(Debian 的测试发行版)作为宿主机操作系统(也称作 Dom0)。Jessie 并不是唯一的选择 —— Xen 的支持是内建在 Linux 内核中的,许多 Linux 发行版 都包含支持 Xen 的内核。 找点废旧的硬件 首先,找一个可以格式化的合适的工作站,比如一台旧的笔记本或者台式机。旧的硬件可能不适合玩游戏,但是足够安装一个宿主机和一些客户机了。一个满足下面这些要求的 PC 机就可以了。 一个双核 CPU(64… read more »

Linux:golang 环境配置建议

开发环境的必要特征 项目管理 快速文件跳转 自动语法检查 自动补全 查找定义 启动速度快 如果自己有需求的话插件可以随便写 (project,lint,hint,autocomplete) 要实现上面几点我们来一步一步的配置。 我的大环境 OSX GO 1.4 HomeBrew go 环境安装 这一部分是最重要的,如果没有它,每次build的时候出现 too many errors 心里真的是非常难过的。 环境配置:(golint,gooracle,mercurial) 安装mercurial: brew install mercurial 这个东西是用来做版本管理的,也是下载代码的工具类似git,貌似google的项目用的挺多的。 安装golint: $ go get github.com/golang/lint $ go install github.com/golang/lint… read more »

Linux:20条Linux命令面试问答

问:1 如何查看当前的Linux服务器的运行级别? 答: ‘who -r’ 和 ‘runlevel’ 命令可以用来查看当前的Linux服务器的运行级别。 问:2 如何查看Linux的默认网关? 答: 用 “route -n” 和 “netstat -nr” 命令,我们可以查看默认网关。除了默认的网关信息,这两个命令还可以显示当前的路由表。 问:3 如何在Linux上重建初始化内存盘镜像文件? 答: 在CentOS 5.X / RHEL 5.X中,可以用mkinitrd命令来创建初始化内存盘文件,举例如下: # mkinitrd -f -v /boot/initrd-$(uname -r).img $(uname -r) 如果你想要给特定的内核版本创建初始化内存盘,你就用所需的内核名替换掉… read more »

Linux:如何在终端下以后台模式运行Linux程序

Linux终端窗口 这是一个简短但是非常有用的教程:它向你展示从终端运行Linux应用程序的同时,如何保证终端仍然可以操作。 在Linux中有许多方式可以打开一个终端,这主要取决于你的发行版的选择和桌面环境。 使用Ubuntu的话,你可以使用CTRL + ALT + T组合键打开一个终端。你也可以点击超级键(Windows键)打开一个终端窗口。在键盘上,打开Ubuntu Dash,然后搜索”TERM”。点击”Term”图标将会打开一个终端窗口。 其他诸如XFCE, KDE, LXDE, Cinnamon和MATE的桌面环境,你将会在菜单中发现“终端”这个应用。还有一些发行版会把终端图标放在菜单项,或者在面板上放置终端启动器。 你可以在终端里面输入一个程序的名字来启动一个应用。举例,你可以通过输入”firefox”启动火狐浏览器。 从终端运行程序的好处是可以使用额外的选项。 举个例子,如果你输入下面的命令,一个新的火狐浏览器将会打开,而且默认的搜索引擎将会搜索引号之间的词语: firefox -search “Linux.About.Com” 你会发现,如果你运行火狐浏览器,应用程序打开后,控制权将会回到终端(重新出现了命令提示符),这将意味着你可以继续在终端工作。 通常情况下,如果你通过终端运行一个程序,程序打开后,并且直到那个程序关闭结束,你都将不会获得终端的控制权。这是因为你是在前台打开程序的。 想要从终端运行一个程序,并且立即将终端的控制权返回给你,你需要以后台进程的方式打开程序。 为了以后台进程的方式打开一个程序,只需要添加符号(&)到命令中,如下面所示: libreoffice & 在终端中仅仅提供程序的名字,应用程序可能运行不了。如果程序不存在于一个设置在PATH 环境变量的文件夹中,你需要指定完整的路径名来运行程序。 /path/to/yourprogram & 如果你并不确定一个程序是否存在于Linux文件系统中,使用find或者locate命令来查找该应用程序。 找一个文件的语法如下: find /path/to/start/from -name programname… read more »

Linux:如何在Linux的命令行中使用Evernote

这周让我们继续学习如何使用Linux命令行管理和组织信息。在命令行中管理你的个人花费后,我建议你在命令行中管理你的笔记,特别是当你用Evernote记录笔记时。要是你从来没有听说过它,Evernote 专门有一个用户友好的在线服务可以在不同的设备间同步笔记。除了提供花哨的基于Web的API,Evernote还发布了在Windows、Mac、Android和iOS上的客户端。然而至今还没有官方的Linux客户端可用。老实说在众多的非官方Linux客户端中,有一个程序一出现就吸引了所有的命令行爱好者,它就是Geeknote。 Geeknote 的安装 Geeknote是使用Python开发的。因此,在开始之前请确保你已经安装了Python(最好是2.7的版本)和git。 在 Debian、 Ubuntu 和 Linux Mint 中 $ sudo apt-get install python2.7 git python-setuptools $ git clone git://github.com/VitaliyRodnenko/geeknote.git $ cd geeknote $ sudo python2.7 setup.py install 在 Fedora 或者 CentOS/RHEL… read more »

Linux:如何在Ubuntu上找出可用的网络适配器

想知道在Linux中你正在使用的网卡是什么吗? 在Linux中很容易就找出网卡的生产商。打开一个终端并输入下面的额命令: sudo lshw -C network 如果上面的命令不能在sudo下使用,那就别用 sudo 的特权模式。它的输出看上去有点奇怪但是很有用。 *-network description: Wireless interface product: BCM4360 802.11ac Wireless Network Adapter vendor: Broadcom Corporation physical id: 0 bus info: [email protected]:03:00.0 logical name: wlan0 version: 03 serial: 9c:f3:87:c1:5d:6a… read more »

shell: 深入理解 bash redirection 重定向

stdout redirection 参考文档 stderr to stdout 0 是 stdin 1 是 stdout 2 是 stderr ➜ ./find.sh 2>&1 > find1.log ➜ ./find.sh > find2.log 2>&1 这里分析的关键是:一步一步分析,分析一步,输出一步 第一种情况: 2>&1: 将stderr定向到stdout, 原本stdout就是要到屏幕的,所以stderr会输出到屏幕 >find1.log: 将stdout 再重定向到文件 第二种情况: >find2.log:… read more »

shell: 提高Linux工作效率的十大bash技巧

来自: 程序师 链接:http://www.techug.com/ten-tips-for-wonderful-bash-productivity 我喜欢钻研bash环境。很多时候,在使用bash编程中,有些问题一遍又一遍的重复遇到。每次我都需要重新思考这些问题的解决方法。直到有一天我无法忍受,于是坐下来,编写一个通用的函数,放入我的.bashrc文件中,部署到电脑上。 希望我的这些追求最大化命令行效率的努力成果也能给其他喜欢使用bash的朋友们带来一些帮助。我更大的期望是我的这种行为能引起其他朋友的互动——给我提建议、提出更好的bash技巧,请在文后留言讨论,或在 @程序师视野 给我留言。 别的不多说了,下面就是我的总结。 技巧一、用命令行往文件的顶部添加文字 每次我都会重新寻找这个命令的写法。下面就是如何使用sed往一个文件顶部添加一行的方法: sed -i ‘1s/^/line to insertn/’ path/to/file/you/want/to/change.txt 技巧二、用命令行往配置文件里插入多行文本 这种方法非常简单,很多人都知道,下面就是如何用命令行将(>>)多行文本插入一个文件中。这里使用的是“here document”语法,它能让你通过块文本符号来将段落插入文件中,通常用的符合是EOF(意思是 “End Of File”): cat >> path/to/file/to/append-to.txt

shell: CentOS6、7 LVM逻辑卷分区自动扩容Shell脚本编程思路与实例

应用场景和已知存在的问题: 适用于CentOS6或CentOS7(可能适用于CentOS4或5等早些版本) 根文件系统(被扩展的文件系统)采用LVM进行管理,例如mount命令输出“/dev/mapper/vg_$hostname-lv_root on / type ext4 (rw)”中含有“mapper”关键词 自动扩容根文件系统,如果想扩展其他文件系统,例如有的业务应用数据目录不在根分区中,则需要修改Shell脚本代码中的VG_PATH_TO_EXTEND变量(约78行)。 仅支持ext2、ext3、ext4、xfs等分区格式的文件系统 可能不支持某些过多自定义的CentOS系统,但核心步骤相似 脚本中仅添加了scsi磁盘支持,如需要管理其他磁盘,则需要自己扩充脚本 为了简化脚本,避免执行多次(本程序没有写执行锁),先前已经存在的磁盘名已经设定为sda,见Shell脚本代码中第45行的ONLINE_SCSI_DISK_PRESENT变量 考虑点: 由于CentOS6和CentOS7在默认根文件系统的文件系统格式存在差异,需要判断是否为xfs,如果是xfs则应该使用xfs_growfs而不是一味的使用resize2fs。 使用resize2fs扩展ext2、ext3、ext4格式的文件系统,使用xfs_growfs扩展xfs格式的文件系统 同一脚本在同一系统多次被执行可能引发的错误,可以考虑使用文件锁来解决这个问题 编程思路: (之前应该准备或检查Shell脚本运行环境)获取当前使用中的块设备文件名 获取新添加scsi磁盘的文件名 获取LVM卷组名(vg)、将被扩展的卷组名的文件路径 将新添加磁盘使用fdisk创建分区并格式化为LVM格式 创建物理卷,pvcreate 扩展卷组,vgextend 调节逻辑卷大小,lvresize 判断是否是xfs文件系统 同步文件系统,使得扩容生效 返回系统磁盘使用情况 Shell代码: 测试结果: (1)添加磁盘前: (2)添加磁盘并执行脚本后: 由此可见根分区已经由原先的36GB变为52GB,表示LVM扩容成功。 –END– 原文:http://dgd2010.blog.51cto.com/1539422/1619692

shell: Linux shell批量删除指定目录下的所有目录的编程思路

应用场景:某个目录中存放着许多软件的源码压缩包,在部署完这些软件后,一定会生成许多没用的临时目录,可以通过脚本的方式删除该目录下所有的目录。当这个目录中存在着一些特殊名字的目录时,例如这些目录中有Linux系统所不支持的特殊字符“/”(这些文件通常有可能是Windows系统所支持的)或有目录名中有空格,那批量删除这些目录就会变得困难。 问题分析与解决办法: 问题1.当前工作目录中有一些重要的目录可能不想被删除 解决办法:排除这些目录即可 问题2.需要考虑一些特殊的目录名称,诸如“test dir”,“2015/03/11-log”,“下载” 解决办法:利用inode消除用户命名空间所带来的特殊性 背景知识: inode是index node或information node的缩写,是一种特殊的结构用于存放文件的基本信息,这些信息包括文件的所有者、类型、访问权限和存放在磁盘中实际数据的位置。inode存放在每一个文件系统的inode表(inode table)中。 Index or Information Node. This is a structure containing the basic information about a file such as owner, type, access permissions and pointers… read more »

Linux:用Grub启动ISO镜像

如果你想要使用多个Linux发行版,你没有那么多的选择。你要么安装到你的物理机或虚拟机中,要么以live模式从ISO文件启动。第二个选择,对硬盘空间需求较小,只是有点麻烦,因为你需要将ISO文件写入到U盘或CD/DVD中来启动。不过,这里还有另外一个可选的折中方案:把ISO镜像放在硬盘中,然后以live模式来启动。该方案比完全安装更省空间,而且功能也完备,这对于缓慢的虚拟机而言是个不错的替代方案。下面我将介绍怎样使用流行的Grub启动加载器来实现该方案。 很明显,你将需要使用到Grub,这是几乎所有现代Linux发行版都使用的。你也需要你所想用的Linux版本的ISO文件,将它下载到本地磁盘。最后,你需要知道启动分区在哪里,并怎样在Grub中描述。对于此,请使用以下命令: # fdisk -l 带有‘*’的就是启动分区。对于我,就是/dev/sda1,用Grub语言描述就是(hd0,1)。 作为参考,sda2就是(hd0,2),sdb1就是(hd1,1),以此类推。(你明白了吧。) 我们需要编辑什么? 首先,打开/etc/default/grub并检查以下行: #GRUB_HIDDEN_TIMEOUT=0 需要在此行前添加‘#’进行注释。 保存,然后打开/etc/grub.d/40_custom。 在该文件中,你将添加启动到ISO的参数。结构如下: menuentry “[Entry’s title in the grub screen]” { set isofile=”[path to ISO file]” loopback loop [boot partition in Grub language]$isofile [some specific]… read more »

Linux:Windows和Ubuntu双系统,修复UEFI引导的两种办法

读者在读过我的安装Ubuntu和Windows 8双系统教程以后,碰到的主要的问题是电脑直接启动到Windows 8而没有出现启动Ubuntu的选项。 这里有两种修复EFI启动引导的方法,使Ubuntu可以正常启动 将GRUB2设置为启动引导 1. 启用GRUB引导 在安装时,有些地方可能会出问题。 理论上来说,如果你首先安装Ubuntu,那么你需要关闭快速启动。 希望你按照这个指南创建一个UEFI Ubuntu 启动优盘安装正确的UEFI引导程序。 如果你在安装时已经完成了这些事情,那么可能出错的地方就是将GRUB2设置为启动管理器。 可以按照以下几个步骤将GRUB2设置为默认的引导程序: 登录Windows 8 转到桌面 右击开始按钮,选择管理员命令行 输入 mountvol g: /s (这将你的EFI目录结构映射到G盘) 输入 cd g:EFI 当你输入 dir 列出文件夹内容时,你可以看到一个Ubuntu的文件夹 这里的参数可以是grubx64.efi或者shimx64.efi 运行下列命令将grub64.efi设置为启动引导程序: bcdedit /set {bootmgr} path… read more »

Linux:Linux 系统监控、诊断工具之 IO wait

1、问题: 最近在做日志的实时同步,上线之前是做过单份线上日志压力测试的,消息队列和客户端、本机都没问题,但是没想到上了第二份日志之后,问题来了: 集群中的某台机器 top 看到负载巨高,集群中的机器硬件配置一样,部署的软件都一样,却单单这一台负载有问题,初步猜测可能硬件有问题了。 同时,我们还需要把负载有异常的罪魁祸首揪出来,到时候从软件、硬件层面分别寻找解决方案。 2、排查: 从 top 中可以看到 load average 偏高,%wa 很高,%us 偏低: 从上图我们大致可以推断 IO 遇到了瓶颈,下面我们可以再用相关的 IO 诊断工具,具体的验证排查下。 PS:如果你对 top 的用法不了解,请参考我去年写的一篇博文:linux 系统监控、诊断工具之 top 详解 常用组合方式有如下几种: 用vmstat、sar、iostat检测是否是CPU瓶颈 用free、vmstat检测是否是内存瓶颈 用iostat、dmesg 检测是否是磁盘I/O瓶颈 用netstat检测是否是网络带宽瓶颈 2.1 vmstat vmstat命令的含义为显示虚拟内存状态(“Virtual Memor Statics”),但是它可以报告关于进程、内存、I/O等系统整体运行状态。… read more »

【已解决】error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory –

对于在安装包的时候遇到“error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory”错误的时候,如何来解决呢? 出现在个错误的原因主要是因为在有些系统管理默认的libstdc库只libstd++.so.5. 而系统默认安装的可能是libstd++.so.6..所以这个时候需要找到libstd++.so.6,然后重新做个软链接,输入下面的命令: 切换到libstdc++.so.6 所在的目录,输入命令: 重新做软连接: 这样问题就应该被解决了。 在说明下,我是在ubuntu 14.04 上遇到这个问题的。

Linux:Docker Machine介绍

Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。Docker官方是这样介绍Machine的初衷的: 之前,Docker的安装流程非常复杂,用户需要登录到相应的主机上,根据官方的安装和配置指南来安装Docker,并且不同的操作系统的安装步骤也是不一样的。而有了Machine后,不管是在笔记本、虚拟机还是公有云实例上,用户仅仅需要一个命令….当然那你需要先安装Machine。 Machine的命令也非常简单: % machine create -d [infrastructure provider] [provider options] [machine name] 看着有点懵,infrastructure provider是啥?machine name是啥?我使劲想了半天也没想到好的中文翻译,但是你看例子就明白它们的意思了。 $ machine create -d virtualbox dev [info] Downloading boot2docker… [info] Creating SSH key… [info] Creating VirtualBox VM… [info] Starting VirtualBox VM… [info] Waiting for VM to start… [info] “dev” has been created and is now the active host. Docker commands will now run against that host. $ machine ls NAME    ACTIVE   DRIVER         STATE   URL dev     *       virtualbox  Running   tcp://192.168.99.100:2375 $ export DOCKER_HOST=`machine url` DOCKER_AUTH=identity $ docker run busybox echo hello world Unable to find image ‘busybox’ locally Pulling repository busybox e72ac664f4f0: Download complete 511136ea3c5a: Download complete df7546f9f060: Download complete e433a6c5b276: Download complete hello world $ machine create -d digitalocean –digitalocean-access-token=… staging [info] Creating SSH key… [info] Creating Digital Ocean droplet… [info] Waiting for SSH… [info] “staging” has been created and is now the active host. Docker commands will now run against that host…. read more »

Linux:解决八种Linux硬盘问题的技巧

不能在Linux或者类UNIX系统的硬盘上写入数据?想解决服务器上磁盘损坏的问题吗?想知道你为什么总是在屏幕上看到“磁盘已满”的字眼吗?想学习处理这些问题的办法吗?试试一下这8个解决Linux及UNIX服务器硬盘问题的小贴士吧。 #1 – 错误: 设备上无剩余空间 当你的类UNIX系统磁盘写满了时你会在屏幕上看到这样的信息。本例中,我运行fallocate命令然后我的系统就会提示磁盘空间已经耗尽: $ fallocate -l 1G test4.img fallocate: test4.img: fallocate failed: No space left on device 第一步是运行df命令来查看一个有分区的文件系统的总磁盘空间和可用空间的信息: $ df 或者试试可读性比较强的输出格式: $ df -h 部分输出内容: Filesystem Size Used Avail Use% Mounted on… read more »

Linux:从JAVA开发者的视角解释JAVASCRIPT

我们无法在一篇博文里解释JavaScript的所有细节。如果你正或多或少地涉及了web应用程序开发,那么,我们的Java工具和技术范围报告揭示了,大多数(71%)Java开发者被归到了这一类,只是你对JavaScript遇到了阻碍。 毫无疑问,你已经知道了Java和JavaScript,不管它们有着多么类似的命名,彼此没有共享太多共通之处。Java的静态类型、符合直接规律的简单语法和冗长,与JavaScript的动态、缺乏一致性原则和怪异,有着巨大的不同。 然而,JavaScript是web的编程语言,最近由于Node.js和JVM自己的Nashorn JavaScript引擎的发展,在服务器端获得了相当的注意。 本文,我不想只是漫谈JavaScript的好与不好,或重复任何人都能免费找到的、不计其数的JavaScript教程。我想列出一些有助于理解JavaScript做为一种语言的技术点,并从接近horse的角度来理解。 我们将在本文包含下列语言级别的技术点: JavaScript的通用性 JavaScript的函数编程问题 不同于Java的继承 另外,你会找到一些工具方面的推荐,没有这些工具,你是不想着手JavaScript项目的,包含了构建系统的代码质量分析和测试框架方面的工具。 优点 编写一次,差不多处处运行! 毋庸置疑JavaScript是web编程语言,是很多其它语言的编译目标,也是用来证明有时候人们只是想拥有更多自由时间的终极方式。尽管如此,这不是一件坏事。每一台能够浏览现代网站的电脑都装备了具有性能和可用的JavaScript引擎。最重要的是,JavaScript代码可以在后端运行。 内置到我们喜爱的JVM的、轻量级高性能JavaScript运行时Nashorn,完全能够解释JavaScript脚本,还能够解释项目中带有Java代码的JavaScript脚本。 鉴于每台电脑运行时都可获得的自由,JavaScript成为Java体验的完美延续。 函数式编程:一等公民是函数,而不是递归 JavaScript中的函数是第一类公民,它们是值,可被存储在变量里、传递给其它函数、在适当的时候再执行。 这打开了函数式编程世界的大门,这是结构化JavaScript编程的完美方式。 注意,JavaScript里的对象是任何东西的映射,对象的每个特性(attribute)都在同一个映射里:函数、属性(property)、构造器;易变性带来了更大的隐患,而对于Java,你至少能够确保方法和字段结构在某种程度上是稳定的。 反过来,这使得函数式编程更加有利:涉及到小的、可理解函数和不变的数据结构是在JavaScript里运行的方式。 这不是没有依据的,下面是在JavaScript里定义一个reduce函数的例子,来自于《Eloquent JavaScript》一书。 function forEach(array, action) { for (var i = 0; i < array.length; i++)... read more »

vim: Emacsist文摘第三期: 最好的编辑器不是Emacs也不是Vim

点这里 查看更多Emacs 相关推荐文章 或最新 Emacs 圈的动态. 欢迎关注微信公众账号: Emacsist Hick叽喳: 最好的编辑器不是Emacs也不是Vim ,是Emacs和Vim: Spacemacs 子龙山人介绍Spacemacs的中文视频 http://emacsist.com/10259 子龙山人录制的三十多分钟的介绍 Spacemacs 的视频, 非常不错, 想不想了解的都建议看看这种 Emacs 圈里比较颠覆性的东西! Cross Platform System-wide Org-Capture http://emacsist.com/10255 个人 org 用得不多, 看微信群里时不时有人讨论起类似话题, org党们可能用的着. btw: irreal.org 的网站上看到的, 虽然有时候出的文章质量比较一般,… read more »

Python: 『Python』爬行搜索引擎结果获得指定主机所有二级域名

0x 00 前言 前天自己在玩的时候,自己通过百度搜索主机的二级域名感觉好麻烦,自已要一页页的去翻 而且人工识别是否是重复的二级域名也够蛋疼的,正好最近在学正则表达式,权当练手了 0x 00 代码 测试结果如下: 0x 02 总结 思路大概是这个样子: 先通过 urllib2.Request() 和 urllib2.urlopen() 访问url 再从返回结果中得到搜索结果页面数  为了提高效率 页面数 大于 5 会只爬行搜索结果的前5个页面 后面 又做了去重操作 然后就得到二级域名列表咯 : ) 中间蛋疼的 地方倒是 Py 的 转义符号问题  身边能有个可以问问的大牛多好~… read more »

Linux:如何在Linux里使用xargs命令

你是否遇到过这样的情况,需要一遍又一遍地对多个文件执行同样的操作?如果有过,那你肯定会深有感触这是多么的无聊和效率低下。还好有种简单的方式,可以在基于Unix的操作系统中使用xargs命令解决这个烦恼。通过这个命令你可以有效地处理多个文件,节省你的时间和精力。在这篇教程中,你可以学到如何一次性对多个文件执行命令或脚本操作,再也不用担心像单独处理无数个日志或数据文件那样吓人的任务了。 xargs命令有两个要点。第一,你必须列出目标文件。第二,你必须指定对每个文件需要执行的命令或脚本。 这篇教程会涉及三个应用场景,xargs命令被用来处理分布在不同目录下的文件: 计算所有文件的行数 打印指定文件的第一行 对每个文件执行一个自定义脚本 请看下面这个叫xargstest的目录(用tree命令以及-i和-f选项显示了目录树结构,这样可以避免缩进显示而且每个文件都会带有完整路径): $ tree -if xargstest/ 这六个文件的内容分别如下: 这个xargstest目录,以及它包含的子目录和文件将用在下面的例子中。 场景1:计算所有文件的行数 就像之前提到的,使用xargs命令的第一个要点是一个用来运行命令或脚本的文件列表。我们可以用find命令来确定和列出目标文件。选项-name ‘file??’指定了xargstest目录下那些名字以”file”开头并跟随两个任意字符的文件才是匹配的。这个搜索默认是递归的,意思是find命令会在xargstest和它的子目录下搜索匹配的文件。 $ find xargstest/ -name ‘file??’ xargstest/dir3/file3B xargstest/dir3/file3A xargstest/dir1/file1A xargstest/dir1/file1B xargstest/dir2/file2B xargstest/dir2/file2A 我们可以通过管道把结果发给sort命令让文件名按顺序排列: $ find xargstest/ -name ‘file??’ | sort… read more »

Linux:SUSE Linux – Zypper 命令示例

Zypper是SUSE Linux中用于安装,升级,卸载,管理仓库、进行各种包查询的命令行接口。本篇将会讨论zypper的几个不同命令的例子。 语法: # zypper [–global-opts] [–command-opts] [command-arguments] 中括号中的部分可以不需要。执行zypper最简单的方法是输入 zypper 及 。 例子1:列出可用的全局选项和命令 打开终端,输入zypper并按回车,它会显示所有可用的全局选项和命令。 linux-xa3t:~ # zypper 例子2:获得zypper的某个命令的帮助 语法: zypper help [command] linux-xa3t:~ # zypper help remove remove (rm) [options] … Remove packages with specified… read more »

Linux:20个令人惊叹的桌面Docker容器

大家好,今天我们会列出一些运行在Docker容器中的很棒的桌面软件,我们可以在自己的桌面系统中运行它们。Docker 是一个开源项目,提供了一个可以打包、装载和运行任何应用的轻量级容器的开放平台。它没有语言支持、框架和打包系统的限制,从小型的家用电脑到高端服务器,在何时何地都可以运行。它可以使部署和扩展web应用程序、数据库和后端服务像搭积木一样容易,而不依赖特定技术栈或提供商。它主要是由开发、运维工程师使用的,因为它简单、快速和方便,可以用来测试和辅助开发他们产品,但是我们也可以在桌面环境使用Docker,这样一些桌面程序可以开箱即用。 下边是20个非常棒的桌面软件docker镜像,我们可以使用Docker来运行。 1. Lynx Lynx是一个一直以来最受欢迎的文本界面网页浏览器,很多Linux用户都很熟悉它。它应该是现在还在日常和开发环境中被使用的最古老的网页浏览器了。可以使用如下命令运行Lync。 $ docker run -it –name lynx jess/lynx 2. Irssi Irssi是一个非常棒的文本界面IRC客户端。可以使用如下命令运行Irssi。 docker run -it –name my-irssi -e TERM -u $(id -u):$(id -g) -v $HOME/.irssi:/home/user/.irssi:ro -v /etc/localtime:/etc/localtime:ro irssi 3. Chrome Chrome是一个令人惊叹的图形界面网页浏览器,由Google开发,它基于开源的Chromium项目。Google… read more »

Linux:12个进程管理命令介绍

执行中的程序在称作进程。当程序以可执行文件存放在存储中,并且运行的时候,每个进程会被动态得分配系统资源、内存、安全属性和与之相关的状态。可以有多个进程关联到同一个程序,并同时执行不会互相干扰。操作系统会有效地管理和追踪所有运行着的进程。 为了管理这些进程,用户应该能够: 查看所有运行中的进程 查看进程消耗资源 定位个别进程并且对其执行指定操作 改变进程的优先级 杀死指定进程 限制进程可用的系统资源等 Linux提供了许多命令来让用户来高效掌控上述的操作。接下来,一个一个的来讲解下。 1. ps ‘ps’是Linux 中最基础的浏览系统中的进程的命令。能列出系统中运行的进程,包括进程号、命令、CPU使用量、内存使用量等。下述选项可以得到更多有用的消息。 ps -a – 列出所有运行中/激活进程 ps -ef |grep – 列出需要进程 ps -aux – 显示进程信息,包括无终端的(x)和针对用户(u)的进程:如USER, PID, %CPU, %MEM等 2. pstree linux中,每一个进程都是由其父进程创建的。此命令以可视化方式显示进程,通过显示进程的树状图来展示进程间关系。如果指定了pid了,那么树的根是该pid,不然将会是init(pid: 1)。 3. top… read more »

Python如何编写爬虫代码采集百度百科页面

本文主要介绍了python中通过对正则表达式的使用来编写爬虫,抓取百度百科页面的方法: 本文实例讲述了python采集百度百科的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的Python程序设计有所帮助。 python爬虫采集百度百科的方法就是这样,欢迎大家参考。。。。

Linux:Linux 命令行下嗅探 HTTP 流量的工具:httpry

假设由于某种原因,你需要嗅探HTTP站点的流量(如HTTP请求与响应)。举个例子,你可能在测试一个web服务器的实验性功能,或者你在为某个web应用或RESTful服务排错,又或者你正在为PAC(proxy auto config)排错或寻找某个站点下载的恶意软件。不论什么原因,在这些情况下,进行HTTP流量嗅探对于系统管理、开发者、甚至最终用户来说都是很有帮助的。 数据包嗅工具tcpdump被广泛用于实时数据包的导出,但是你需要设置过滤规则来捕获HTTP流量,甚至它的原始输出通常不能方便的停在HTTP协议层。实时web服务器日志解析器如ngxtop可以提供可读的实时web流量跟踪痕迹,但这仅适用于可完全访问live web服务器日志的情况。 要是有一个仅用于抓取HTTP流量的类似tcpdump的数据包嗅探工具就非常好了。事实上,httpry就是:HTTP包嗅探工具。httpry捕获HTTP数据包,并且将HTTP协议层的数据内容以可读形式列举出来。通过这篇指文章,让我们了解如何使用httpry工具嗅探HTTP流量。 在Linux上安装httpry 基于Debian系统(Ubuntu 或 LinuxMint),基础仓库中没有httpry安装包(译者注:本人ubuntu14.04,仓库中已有包,可直接安装)。所以我们需要通过源码安装: $ sudo apt-get install gcc make git libpcap0.8-dev $ git clone https://github.com/jbittel/httpry.git $ cd httpry $ make $ sudo make install 在Fedora,CentOS 或 RHEL系统,可以使用如下yum命令安装httpry。在CentOS/RHEL系统上,运行yum之前使其能够访问EPEL repo。… read more »

Linux:如何在ubuntu桌面配置一个网络打印机和扫描仪

在之前的文章中, 我们讨论过如何在Linux服务器安装各种各样的打印机(当然也包括网络扫描仪)。今天我们将来处理另一端:如何通过桌面客户端来访问网络打印机/扫描仪。 网络环境 在这个安装教程中,我们的服务器(Debian Wheezy 7.2版本)的IP地址是192.168.0.10,我们的客户端(Ubuntu 12.04版本)的IP地址是192.168.0.105.注意这两台机器是在同一个网段(192.168.0.0/24).如果我们想允许打印机访问其它网段,我们需要在服务器上修改cupsd.conf文件的以下部分: Order allow,deny Allow localhost Allow from XXX.YYY.ZZZ.* (在上述例子中,我们授予打印机从本地或者任何系统能够访问打印机,这些系统的IPv4地址以XXX.YYY.ZZZ开始。 为了验证哪些打印机可以在我们的服务器上适用,我们也可以在服务器上使用lpstat命令,或者浏览网页https://192.168.0.10:631/printers page. [email protected]:~# lpstat -a EPSON_Stylus_CX3900 accepting requests since Mon 18 Aug 2014 10:49:33 AM WARST PDF accepting requests since… read more »

python中比较两个列表范围的方法

本文主要介绍了python如何来比较两个不同的列表的范围,通过实际的例子来演示如何来实现比较列表范围的方法,并给出了详细的分析: 有一道题: 比较两个列表范围,如果包含的话,返回TRUE,否则FALSE。 详细题目如下: Create a function, this function receives two lists as parameters, each list indicates a scope of numbers, the function judges whether list2 is included in list1. Function signature: differ_scope(list1, list2) Parameters:… read more »

Linux:Linux有问必答:Ubuntu如何使用命令行移除PPA仓库

问题: 前段时间,我的Ubuntu增加了一个第三方的PPA仓库,如何才能移除这个PPA仓库呢? 个人软件包档案(PPA)是Ubuntu独有的解决方案,允许独立开发者和贡献者构建、贡献任何定制的软件包来作为通过启动面板的第三方APT仓库。如果你是Ubuntu用户,有可能你已经增加一些流行的第三方PPA仓库到你的Ubuntu系统。如果你需要删除掉已经预先配置好的PPA仓库,下面将教你怎么做。 假如你想增加一个叫“ppa:webapps/preview”第三方PPA仓库到你的系统中,如下: $ sudo add-apt-repository ppa:webapps/preview 如果你想要 单独地删除某个PPA仓库,运行下面的命令: $ sudo add-apt-repository –remove ppa:someppa/ppa 注意,上述命令不会同时删除任何已经安装或更新的软件包。 如果你想要 完整的删除一个PPA仓库并包括来自这个PPA安装或更新过的软件包,你需要ppa-purge命令。 首先要安装ppa-purge软件包: $ sudo apt-get install ppa-purge 然后使用如下命令删除PPA仓库和与之相关的软件包: $ sudo ppa-purge ppa:webapps/preview 特别滴,在发行版更新后,当你分辨和清除已损坏的PPA仓库时这个方法特别有用! via: http://ask.xmodulo.com/how-to-remove-ppa-repository-from-command-line-on-ubuntu.html 译者:Vic___ 校对:wxy 本文由… read more »

Linux:到底应该选择哪种Linux.NET的部署方式?

当前部署Linux.NET环境的方式可谓是五花八门,既有传统的源码编译的方式、又有各式各样的一键安装脚本、还有绿色包安装方式,而随着Mono官方的新站上线,更增加了采用RPM包的部署方式。那对于一名Linux.NET的初学者来说,我们又该如何选择?下面,本文将对这几种的安装方式进行优缺点的比较,从而协助各位读者选择出最佳的部署方式。 本文中,我们将对下列的部署方式展开讨论: 1、源码编译 2、一键安装脚本 3、RPM包 4、绿色包  一、源码编译 通过源代码编译安装部署Linux.NET可谓是最传统并且最原始可靠的方式,通过获取源代码,并在物理机(虚拟机)中进行编译,编译器能够有针对性的给机器编译出最适合改机器运行的二进制执行文件。同时,通过源代码编译的方式也是所有部署方式中最稳定靠谱的方式。同时,采用源码编译的方式部署也是最灵活的。要想深入学习的读者必须要掌握此方式部署。 想要通过源码编译的方式安装部署Linux.NET,我们需要事先Get到一份源代码,目前获得Mono源代码的方式主要分为两种,一种是通过GitHub将Mono的托管代码Pull下来执行autogen再执行make install的方式进行编译安装部署,另外一种则是通过Mono/Source所发行的源码包(tar.gz或者tar.bz2包)进行./Configuration再执行make install的方式编译。 事实上,如果读者们采用前者(也就是Git Pull的方式)来编译部署环境,所获取到的版本一般都会比从Mono/Source中发行的版本高(当然在能够编译的情况下),对希望能够尽快使用最高版本或者想尝鲜的读者,使用这种方式不失为一个好选择。但选择这个方式也有一定的缺点,那就是我们在编译之前需要先进行Git Clone或者Git Pull代码,这将使我们可能面临上G的Git代码仓库需要下载,同时由于Mono中的external目录下又包含了其他.NET项目的GIT仓库,执行autogen时,系统会检查包括external目录的代码是否完整,因此编译时系统也有可能再次的执行Git Pull拉去相关代码。另外还有一点,在我们进行Git Pull Master之后,我们也未必可以编译通过。所幸的是,文章发布之后,LexLi给予了一些提醒,通过他的思路,我们发现了其实GitHub/Mono的Readmd中是有一盏当前代码是否能够编译的“提示灯”,通过观察此“灯”所显示的颜色我们就可以知道当前的代码是否可以编译,另外在这里也有一个版本编译测试历史记录,我们也可以根据它的编译测试记录获知那一个提交版本的的源码是可以编译,然后只需把代码ReSet到此版本即可再次进行编译。 而采用Mono/Source所发行的源码包编译的读者,可靠性则大幅度提高,毕竟这个是Release版本。虽然当中有个别的发行包因为文件缺失无法编译,但是总得来说还是最可靠的,并且源码包发行版大小一般都在百兆以内,相比于Git仓库的上G代码可谓是小巧得多。 最后,各位读者无论是采用以上两种方式中的那种,都需要花费一段或漫长或短暂的编译等待时间,并且编译时可能会遇到一些Make Error的现象,这都需要各位读者自己进行克服处理。但无论怎么样,这还是对想深入学习Linux.NET的读者要求必须掌握的部署方式。(有需要的读者可以参详《Linux.NET学习手记》) 二、一键安装脚本 由于采用源码编译方式都是直接采用Shell命令来操作,因此有不少的人士将这些Shell命令提取出来重新组装成一个Shell脚本,只要执行该脚本即可完成环境的部署,其中更有爱好者别出心裁,在命令行的基础上加以改进,提供类似“界面”之流的方式,给予了较好的与用户的交互。采用脚本式部署环境是解放生产力的标志。 但即便如此,采用脚本安装的方式仍然存在着相当的不足,那便是采用脚本安装其实只是一个“礼盒”,“礼盒”里面的内容依然是源代码编译方式,因此,采用脚本安装所遇到的问题不会比采用源码安装的少。同时,采用脚本安装仍然存在这“兼容性”的问题,这里值得注意,所谓的“兼容性”并不是指脚本的命令行不通用,而是由源码编译所“继承”下来的“不兼容”,也就是环境的复杂性造成不同的Make Error所带来的“不兼容”。此外,由于每个人都有自己的安装风格,有的人可能喜欢将东西安装在“/usr”中(像宇内、善友的教程等),有人喜欢安装到“/usr/local/”中(我的风格,《Linux.NET学习手记》的教程路径),也有人喜欢安装到“/opt”中……总而言之,脚本中所编写的安装路径纯属由撰写者决定,安装目录可能并不是各位读者所希望的路径,这点也有一定的不足。 三、RPM包 伴随着Mono新版官网的上线,依赖于Yum的RPM安装方式也悄悄的出现在各位读者的视野,一段时间以来,不少朋友开始或是为了尝鲜(没办法,体验到Yum的甜头之后恐怕很难回头了)或是收到“官方”的指引纷纷采用了此种办法部署Linux.NET环境。 我没有尝试过这种方式(懒得自己添加镜像源),不过从不少朋友反(bao)馈(yuan)回(ma)来(niang)的信息来看,这种方式似乎是几种方法中最残(zi)念(sha)的了。由于RPM包隶属于二进制包的一种,安装路径已经在包中预配置,无法更改,我们也无法获知它到底安装到哪里(只能find了),从一些通过此方式安装的朋友所提供的资料来看,基本上会安装到“/opt”目录中(不过没有具体目录,有“/opt/”、“/opt/mono”甚至“/opt/201408xx/”目录)。此外,采用RPM包方式安装还有一项非常严重的问题,那就是采用此种方式安装竟然没有向环境变量注册Mono/bin路径,导致系统无法找到mono。 因此,我个人尤其不推荐此中安装方式。 四、绿色包(jws.mono) 以上三种方式都有一个共同的特点,那就是都需要在有网络条件的情况下进行。而绿色包与前者不同,绿色包是从使用源码编译好的机器中进行抽取重组并进行适当的修改变成新的解压即可运行的绿色版的Linux.NET运行环境。 使用绿色包具有以下的几项优点: (1)、快速部署,由于采用此方式部署仅仅需要执行一条解压命令(有需要的可自行注册环境变量),没有编译过程,大大节省了因为环境部署所需要消耗的宝贵时间。 (2)、针对性强:由于每一款的绿色包都是针对其标注的Linux发行版进行编译,因此绿色包具有比较强的发行版针对性。 (3)、精致而不失功能:使用过绿色包的读者可能会发现,它的打包文件大小甚至会比Mono/Source所发行的源码包还会小,但功能却又没有减少。这个秘密就在于Mono与MS.NET不同,Mono的库是向下兼容的,因此,在每款的绿色包中,我们都会对“重复”的库进行剔除,让包变得足够精致。… read more »

python中DES和3DES加密算法实例

python中的des和3des加密算法是如何实现的呢?下面的内容将会通过具体的实例来演示python中DES和3DES加密算法的实现: 本文实例讲述了python实现的DES加密算法和3DES加密算法。分享给大家供大家参考。具体实现方法如下: ############################################################################# # Documentation # ############################################################################# # Author: Todd Whiteman # Date: 16th March, 2009 # Verion: 2.0.0 # License: Public Domain – free to do as you wish # Homepage: http://twhiteman.netfirms.com/des.html # #… read more »

Python中的描述符介绍

Python中的描述符是如何来使用的呢?下面的内容将会通过具体的实例来演示Python中的描述符的使用方法及相关技巧: Python中包含了许多内建的语言特性,它们使得代码简洁且易于理解。这些特性包括列表/集合/字典推导式,属性(property)、以及装饰器(decorator)。对于大部分特性来说,这些“中级”的语言特性有着完善的文档,并且易于学习。 但是这里有个例外,那就是描述符。至少对于我来说,描述符是Python语言核心中困扰我时间最长的一个特性。这里有几点原因如下: 1.有关描述符的官方文档相当难懂,而且没有包含优秀的示例告诉你为什么需要编写描述符(我得为Raymond Hettinger辩护一下,他写的其他主题的Python文章和视频对我的帮助还是非常大的) 2.编写描述符的语法显得有些怪异 3.自定义描述符可能是Python中用的最少的特性,因此你很难在开源项目中找到优秀的示例 但是一旦你理解了之后,描述符的确还是有它的应用价值的。这篇文章告诉你描述符可以用来做什么,以及为什么应该引起你的注意。 一句话概括:描述符就是可重用的属性 在这里我要告诉你:从根本上讲,描述符就是可以重复使用的属性。也就是说,描述符可以让你编写这样的代码: 而在解释器执行上述代码时,当发现你试图访问属性(b = f.bar)、对属性赋值(f.bar = c)或者删除一个实例变量的属性(del f.bar)时,就会去调用自定义的方法。 让我们先来解释一下为什么把对函数的调用伪装成对属性的访问是大有好处的。 property——把函数调用伪装成对属性的访问 想象一下你正在编写管理电影信息的代码。你最后写好的Movie类可能看上去是这样的: 你开始在项目的其他地方使用这个类,但是之后你意识到:如果不小心给电影打了负分怎么办?你觉得这是错误的行为,希望Movie类可以阻止这个错误。 你首先想到的办法是将Movie类修改为这样: 可以看到,访问类层次上的描述符y可以自动调用__get__。但是访问实例层次上的描述符x只会返回描述符本身,真是魔法一般的存在啊。 确保实例的数据只属于实例本身 你可能会像这样编写NonNegative描述符: 这就是为什么我们要在NonNegative中使用数据字典的原因。__get__和__set__的第一个参数告诉我们需要关心哪一个实例。NonNegative使用这个参数作为字典的key,为每一个Foo实例单独保存一份数据。 这就是描述符最令人感到别扭的地方(坦白的说,我不理解为什么Python不让你在实例的层次上定义描述符,并且总是需要将实际的处理分发给get和set。这么做行不通一定是有原因的) 注意不可哈希的描述符所有者 NonNegative类使用了一个字典来单独保存专属于实例的数据。这个一般来说是没问题的,除非你用到了不可哈希(unhashable)的对象: 因为MoProblems的实例(list的子类)是不可哈希的,因此它们不能为MoProblems.x用做数据字典的key。有一些方法可以规避这个问题,但是都不完美。最好的方法可能就是给你的描述符加标签了。 这种方法依赖于Python的方法解析顺序(即,MRO)。我们给Foo中的每个描述符加上一个标签名,名称和我们赋值给描述符的变量名相同,比如x = Descriptor(‘x’)。之后,描述符将特定于实例的数据保存在f.__dict__[‘x’]中。这个字典条目通常是当我们请求f.x时Python给出的返回值。然而,由于Foo.x 是一个描述符,Python不能正常的使用f.__dict__[‘x’],但是描述符可以安全的在这里存储数据。只是要记住,不要在别的地方也给这个描述符添加标签。 我不喜欢这种方式,因为这样的代码很脆弱也有很多微妙之处。但这个方法的确很普遍,可以用在不可哈希的所有者类上。David Beazley在他的书中用到了这个方法。… read more »

Linux:Linux有问必答——如何查找并移除Ubuntu上陈旧的PPA仓库

问题:我试着通过运行apt-get update命令来再次同步包索引文件,但是却出现了“404 无法找到”的错误,看起来似乎是我不能从先前添加的第三方PPA仓库中获取最新的索引。我怎样才能清除这些破损而且陈旧的PPA仓库呢? Err http://ppa.launchpad.net trusty/main amd64 Packages 404 Not Found Err http://ppa.launchpad.net trusty/main i386 Packages 404 Not Found W: Failed to fetch http://ppa.launchpad.net/finalterm/daily/ubuntu/dists/trusty/main/binary-amd64/Packages 404 Not Found W: Failed to fetch http://ppa.launchpad.net/finalterm/daily/ubuntu/dists/trusty/main/binary-i386/Packages 404 Not Found… read more »

Python判断Abundant Number的方法

Python判断Abundant Number的方法是如何来实现的呢?下面的内容将会通过具体的实例来演示Python判断Abundant Number的方法的实现方法及相关技巧: 本文实例讲述了Python判断Abundant Number的方法。分享给大家供大家参考。具体如下: Abundant Number,中文译成:盈数(又称 丰数, 过剩数abundant number)是一种特殊的 自然数,除去它本身以外的一切正约数的和大于它本身。 介绍见百度百科: http://baike.baidu.com/view/1596350.htm Python判断Abundant Number的方法就是这样,欢迎大家参考。。。。

python实现基于SSL的IRC bot实例介绍

python基于SSL的IRC bot实例是如何来实现的呢?下面的内容将会通过具体的实例来演示python基于SSL的IRC bot实例的实现方法及相关技巧: 本文实例讲述了python简单实现基于SSL的 IRC bot。分享给大家供大家参考。具体如下: python基于SSL的IRC bot实例就是这样,欢迎大家参考。。。。

python批量抓取新浪博客页面内容的方法

python批量抓取新浪博客页面内容的方法是如何来实现的呢?下面的内容将会通过具体的实例来演示python批量抓取新浪博客页面内容的方法的实现方法及相关技巧: 本文实例讲述了python实现批量下载新浪博客的方法。分享给大家供大家参考。具体实现方法如下: python批量抓取新浪博客页面内容的方法就是这样,欢迎大家参考。。。。

Linux:Keepalived 配置和使用

keepalived主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。keepalived主要目的在于,其自身启动一个服务,能够实现工作在双节点或多个节点上,并且可以在内核生效的ipvs规则其中当前持有资源的节点被称为活跃节点,另外的节点被称为备节点被称为 Master/Backup。   VRRP(如果有学习过TCPIP,这一块很好理解): 虚拟路由器冗余协议(VRRP)是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器,它负责转发数据包到这些虚拟 IP 地址。一旦主路由器不可用,这种选择过程就提供了动态的故障转移机制,这就允许虚拟路由器的 IP 地址可以作为终端主机的默认第一跳路由器。使用 VRRP 的好处是有更高的默认路径的可用性而无需在每个终端主机上配置动态路由或路由发现协议。 VRRP 包封装在 IP 包中发送。  VRRP优先级别: VRRP每个节点是有自己的优先级的,一般优先级是从0-255,数字越大优先级越高因此可以这么定义:假如要有一初始化的状态,其中一节点优先级100另一节点优先级99,那么毫无疑问,谁的优先级高谁就是主节点所有的节点刚启动后上线都是backup状态,需通过选举的方式选择master,如果其他节点没有响应则将自己提升为master 通告机制:如果节点之间master出现故障,其会自动转移当前角色,这时我们的管理员应该知道其已切换角色keepalived支持邮件发送机制,如果其状态发生改变的话可以通过邮件方式发送给管理员,使管理员第一时间可以查看其活动状态,方便之后的运维工作  keepalived核心组成部分 vrrp的实现 virtual_server:基于vrrp作为所谓通告机制之上的 vrrp_script:以外部脚本方式进行检测   keepalived  KeepAlived的安装: [[email protected] ~]# tar zxf… read more »

Linux:ncdu – 基于ncurses库的磁盘使用分析器

Ncdu (NCurses Disk Usage) 是一个基于Ncurses库的du命令的界面。它通过大家熟知的du命令,为用户提供一个快速且容易被使用的界面。它可以显示磁盘使用的百分比,且允许你使用ncurses库的方式在目录之间导航。 安装 ncdu已经被移植到大多数linux发行版本,可从官方资源库中安装. Arch / Manajaro 及其衍生版: sudo pacman -S ncdu Ubuntu / Debian / Linux Minut 及其衍生版: sudo apt-get install ncdu Fedora 及其衍生版: sudo yum install ncdu 在这里可以找到其他的发行版。 使用 ncdu… read more »

Linux:Linux基础:如何在命令行中查看目录的大小

这是写给Liunx新用户的一系列文章中的第一篇,在这系列文章我将会写一些对新用户来说非常好用的Linux基础命令。 注意:本文的目标读者是仅有小量甚至是没有任何Linux命令行使用经验的读者。 作为一个Linux的新用户,我怎样可以在命令行终端中查看某个目录的属性? 要求 唯一的要求是du命令行工具。du基本上是所有Linux发行版本默认提供的工具。用以下的命令来检查你的系统中是否可以使用du命令: man du du 命令用于输出文件的空间使用情况。 使用du 不带任何参数的运行du命令会显示当前工作目录以及其子目录的文件名和所占用的空间大小(以字节为单位)。 du 使用-h参数以对用户友好的方式输出文件大小,即分别以K, M和G来表示Kb,Mb和Gb du -h 若想查看某个特定目录的文件大小,则在du命令中指定要查看的目录名,如下: du -h Mapmaker 使用 -c 参数来查看目录所占用磁盘空间的总大小 du -ch 使用 -s 参数只输出指定目录占用空间的大小 du -sh Mapmaker Sandbox 使用 man du… read more »

Linux:怎样把坏的MySQL查询找到并杀死?

有时,关系型相关数据库系统的复杂性会把你搞晕,不过幸运的是,使用MySQL工具来管理查询就就可以避免这些复杂性。 在本教程中,我将向你们展示 怎样去查找并杀掉任何非法的MySQL查询。 为了浏览当前正在运行的查询,登陆到MySQL终端,然后运行‘show processlist’命令: mysql> show processlist; +——–+——–+—————–+———+———+——-+——-+——————+———–+—————+———–+ | Id | User | Host | db | Command | Time | State | Info | Rows_sent | Rows_examined | Rows_read | +——–+——–+—————–+———+———+——-+——-+——————+———–+—————+———–+ | 78233… read more »

Linux:Betty:和你的Linux说说话

Betty 是一个将类英语短语翻译成Linux命令的开源工具。这个项目的主要目的是让大家可以通过输入自然语言来使用强大的Linux系统。让我们来看一下它是怎么工作的。 安装 Betty的安装非常简单直接。首先确认你已经安装了下面这些依赖包[LCTT译注,需要安装至少Ruby1.9以上版本]。 对于基于Debian的系统: sudo apt-get install git curl ruby 对于基于RPM的系统: yum install git curl ruby 现在用git工具把Betty库clone到你自定义的任何路径。这里我克隆到我的home目录,例如 /home/sk/. git clone https://github.com/pickhardt/betty 添加betty的别名到你的bashrc配置文件。 sudo nano ~/.bashrc 将下列行添加到文件的末尾: alias betty=”/home/sk/betty/main.rb” 确保你已经正确地设置好了betty的路径。 好了,现在是时候和betty好好地玩耍了。 用法 你应该在英语短语之前加上单词“betty” [LCTT译注,你自然可以用你的小甜心的名字来替换这个不是知道是谁的Betty :>]。你也许已经知道,如果我们想知道在系统中我们的用户名,应该运行下面的命令:… read more »

Linux:C编程vim初步配置

我的 .vimrc文件 “******************************************************** ” 一般性配置 * “******************************************************** “关闭vim一致性原则 set nocompatible “显示行号 set number “设置在编辑过程中右下角显示光标的行列信息 set ruler “在状态栏显示正在输入的命令 set showcmd “设置历史记录条数 set history=1000 “设置取消备份 禁止临时文件的生成 set nobackup set noswapfile “设置匹配模式 set showmatch “设置C/C++方式自动对齐 set autoindent set… read more »

Linux:[小白技巧]如何在Linux中知道你的系统是否有USB 3.0 端口

近来的大多数的新计算机都有了USB 3.0接口了。但是你怎么知道你的计算机有没有USB 3.0接口?这篇短文中,我们会告诉如何在Linux下知道你的系统上有USB 3还是USB3接口。 在Linux终端中检测是否有USB 3.0 端口 打开一个终端,并使用下面的命令: lsusb 这个命令会显示你系统下USB的总线信息。检查一下结果,如果你看到像“3.0 root hub”字样,这意味着你系统有USB 3.0。比如,在我的电脑上,它这样显示: 这个技巧在所有的Linux系统上,像Ubuntu,Linux Mint,Fedora等等都有效。现在当你知道你有USB 3.0 端口之后,**如何辨别哪个口是USB 3.0,哪个是USB 2.0。 辨别哪个口是USB 3.0 通常USB 3.0 口被标记为SS(“Super Speed”的缩写)。如果你的系统制造商没有标记SS或者USB 3,那么你可以检查端口的内部通常是蓝色的。 我希望这个快捷提示能够帮助你知道你系统是否有USB 3.0 并可以分辨出USB 3.0 口 via: http://itsfoss.com/find-usb-3-port-linux/ 译者:geekpi 校对:wxy… read more »

Linux:实用的Linux SHELL面试问题及答案

随着之前有关面试的系列文章,读者的反应比较强烈,所以我决定出一篇有关Linux Shell相关的面试文章,如果对本文有什么意见或意见的话,欢迎反馈到我的邮箱里。 如果想要阅读已发表在Tecmint.com的文章,可以点击链接,链接到访谈系列,在这里我们已经介绍很多题目即文章。,FTP,MySQL和Apache的,脚本,Linux命令等。 实用的shell脚本面试问题 这边提到的5个面试问题,延续之前的有关Linux面试问题和答案。如果你是Tecmint.com的读者,你的支持我非常感谢。 1. 写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录。 答案 : 输出用户名,当前日期和时间,以及当前工作目录的命令就是logname,date,who i am和pwd。 现在,创建一个名为userstats.sh文件,将下面的代码添加到它。 #!/bin/bash echo “Hello, $LOGNAME” echo “Current date is `date`” echo “User is `who i am`” echo “Current directory `pwd`” 给它添加执行权限,并且执行他。 # chmod… read more »

Linux:Linux:使用bash删除目录中的特定文件

我是一名Linux新用户。现在我需要清理一个下载目录中的文件,其实我就是想从~/Download/文件夹删去除了以下格式的文件外所以其它文件: *.iso – 所有的iso格式的文件。 *.zip – 所有zip格式的文件。 我如何在一个基于Linux,OS X 或者 Unix-like 系统上的bash shell中删除特定的文件呢? Bash shell 支持丰富的文件模式匹配符例如: * - 匹配所有的文件。 ? - 匹配文件名中的单个字母。 […] - 匹配封闭括号中的任何一个字母。 策略 #1: 见识一下扩展的模式匹配符 这里你需要用系统内置的shopt命令来开启shell中的extglob选项,然后你就可以使用扩展的模式符了,这些模式匹配符如下: ?(模式列表) - 匹配零次或一次给定的模式。 *(模式列表) - 匹配零次或多次给定的模式。… read more »

Linux:Bash Getopts – 让你的脚本支持命令行参数

以前我总想知道如何为我的Bash脚本创建命令行参数。经过搜索,我发现了2个函数可以处理这个问题,getopt 函数和 getopts 函数。我无意争论哪一个函数更好的。getopts 是一个shell内建命令,而且似乎比 getopt 更容易实现这个功能,所以在这篇文章里我准备讲讲getopts。 bash getopts 开始的时候,我只试着处理传递给脚本的命令行参数。最后,我添加了另外一些有用的功能函数,使得这个脚本可以成为其他任何交互式脚本处理命令行的开始模板。我还添加了一个纯文本格式的帮助函数,让脚本更加容易阅读。 与其来一长段文字解释 getopts 在bash中是如何工作的,我认为不如直接来一个能工作的脚本更让人觉得轻松一些。 #!/bin/bash ###################################################################### #This is an example of using getopts in Bash. It also contains some #other bits of code I find useful…. read more »

Linux:findmnt 命令的八个应用实例

已挂载的文件系统和设备 linux 中常用的检查已挂载的文件系统的是 mount 命令,不仅用于列出已挂载的设备,而且可以在需要的时候挂载和卸载。另外还有一个叫做 findmnt 的超赞命令,它可以用于快速查看挂载位置和选项。 安装findmnt findmnt 命令来自 util-linux 软件包,默认安装在大多数发行版中,如 Ubuntu,Fedora,Debian $ aptitude search util-linux i util-linux – Miscellaneous system utilities $ yum info util-linux 使用findmnt 1. 列出文件系统 无任何选项运行 findmnt,只会以树形结构图的方式列出所有已挂载的文件系统。 $ findmnt 2…. read more »

Linux:findmnt-寻找挂载的文件系统

命令findmnt用来查找在Linux下已经被挂载的文件系统。该命令会从/etc/fstab、/etc/mtab或者/proc/self/mountinfo中寻找指定的文件系统。 如何安装findmnt findmnt命令来自于util-linux-ng软件包,这个包现在改名为util-linux。该软件包中还包括其他一些工具,比如hwclock等。从kernel.org ftp页面下载util-linux以安装findmnt。 如何在Fedora下安装findmnt Fedora用户可以通过下面的命令安装该软件包: $ sudo yum install util-linux-ng Findmnt默认选项 如果没有提供特定的挂载点或者设备,该命令默认会以优美的树形结构列出所有已经被挂载的文件系统。 $ findmnt Findmnt轮询模式 findmnt可以被用来监控/proc/self/mountinfo文件的变化。轮询模式可以通过下面的命令进行调用: $ findmnt -p 或者 $ findmnt –poll /proc/self/mountinfo文件的任何变化会自动的在终端中进行更新。一开始你不会发现终端中的输出有任何变化,如果此时你拔掉U盘再插入,变化就会出现在终端中。 轮询停止的时间可以通过–timeout或者–first-only选项进行限制。 超时选项 该选项可以与–pool一起使用来限制轮询模式的时间。超时单位是毫秒。超过此时间后,findmnt不会再监控/proc/self/mountinfo文件的变化。 $ findmnt –poll –timeout 6000 First-only选项 first-only选项只会监控/proc/self/mountinfo文件的第一次变化,之后该命令退出轮询模式。第一次变化会出现在终端中,并且返回到提示符。使用此选项在终端中输入:… read more »

Linux:让 Ubuntu 上的 Unity 在线搜索功能见鬼去吧!

无论何时,你开始在 Unity Dash 搜索计算机中的应用程序或文件时,你的检索词将被自动发送给第三方,如亚马逊,并且第三方将依据您的搜索词显示相关结果(主要是广告)。如果你不喜欢这个功能,感觉真的打扰到你,你可以禁用它。 例如,当我在 Unity Dash 中输入 “Terminal” 时,将显示 “Terminal” 应用和 web 上其他第三方的东东(我要发狂了!我不想要这些!)。 正如上面的截图所见,Unity显示内置的 Terminal 应用、引用链接、天气链接和其他第三方的推荐,如电影等。这是非常恼人的并且在 Unity Dash 上看起来很糟。同时,它显示了太多的搜索结果,并使我迷惑。 如果你像我一样不需要这个功能,在你的终端输入以下命令: wget -q -O – https://fixubuntu.com/fixubuntu.sh | bash 上述脚本的内容如下: #!/bin/bash GS=”/usr/bin/gsettings” CCUL=”com.canonical.Unity.lenses” # Figure out… read more »

Linux:树莓派进阶学习的五个建议

从SSH到端口转发,这些先进的技术将让你的树莓派开发更简单。 当你可以在命令行输入命令时,你就不再是一个新手在做一些新手的设置了。虽然进度不快,但是你的确正在通过你的方式去学习使用这物超所值的、只有信用卡大小的计算机去满足一些DIY想法,这就是树莓派。 然而,从基础跨越到中级还是存在较大距离。当你从“设置你的派”的教程转而学习“创建一个媒体服务器”时,项目开始前的需求就会有一点点挑战。许多中级的Pi教程,包括ReadWrite的一些文章,都会假设你已经对树莓派设置好了一些东西。 并非每一个项目都需要找个教程里的所有建议,但是知道这些步骤可以使项目更顺利地贴合需求。 当你准备脱离小白行列时,做一些树莓派教程的预先准备工作对你非常有用。 1) 使用SSH登录 SSH意思是Secure Shell,它是一种加密网络协议,用于安全地在计算机与树莓派之间传输你的数据。项目中也许需要你通过你的计算机的命令行控制树莓派,而不是通过给树莓派连接显示器和键盘来控制。 现在SSH已经预先安装在树莓派系统 Raspbian 中了,所以如果你安装的是最新版本或较新版本的树莓派都是支持SSH使用的。 要使用SSH,第一,你需要知道你的树莓派的IP地址,在你的树莓派中输入以下命令: sudo ifconfig 会显示出三个段落。你的IP地址将会在第一段或者第三段显示,这主要看你的树莓派是通过线缆还是通过WIFI适配器连接网络的。如果是通过线缆连接,那请查看第一段,在“eth0”那行开始显示。如果是通过wifi链接,将在第三段“wlan0”开头的地方显示。 无论通过哪种方式,你将会看到以“inet addr”开头后面跟着像192.168.2.2这样类型的IP地址,这是我们在这篇文章中经常引用到的一种默认IP地址格式。 现在你有一个可以连接树莓派与你的电脑的IP地址了,如果你使用的是Mac,你已经有了内置的SSH,启动你的终端应用并输入: ssh [email protected] 连接之后将会要求输入密码,默认情况下,密码一般是“respberry”.如果你修改了默认密码,请输入你的新密码。这样,您将登入了树莓派系统。 如果你在一台PC,还需要附加的一个步骤。 下载并运行PuTTY或者其它支持Windows系统的SSH客户端。输入你的IP地址在如上截图中的输入框中。保持默认端口为22不变。然后安心回车,PuTTY将会提示你输入用户名和密码。输入之后,就可以开始在你的树莓派里远程工作了。 2) 使用远程桌面连接到你的树莓派 使用SSH去从命令行远程控制你的Pi是极好的,但是如果你想通过图形界面去管理你的Pi怎么办呢?幸运的是MAC和PC都已经内建了这种方式。 在你的树莓派中的命令行(是的,你可以通过SSH来操作),输入: sudo apt-get install xrdp xdrp是一种在可以在后台运行的计算机守护进程,并支持Mac和PC上的微软远程桌面客户端。当树莓派中安装好xrdp之后,你的MAC或者PC就可以通过客户端登录到树莓派中了。 找到你的电脑中一个叫远程桌面的客户端。它本身并不是隐藏起来的,但没有放到应用程序的文件夹中。 出现上述提示时输入你的IP地址。接下来会弹出xrdp窗口,提示你输入用户名和密码。… read more »

Python中如何使用ElementTree解析XML

Python中使用ElementTree解析XML是如何来实现的呢?下面的内容将会通过具体的实例来演示Python中使用ElementTree解析XML的实现方法及相关技巧: 【XML基本概念介绍】 XML 指可扩展标记语言(eXtensible Markup Language)。 XML 被设计用来传输和存储数据。 概念一: 概念二: 概念三: 概念四: 概念五: 概念六: 【XML几种解析方法】 常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,使用场合自然也就不同。 Python有三种方法解析XML: SAX,DOM,以及ElementTree: 1.SAX (Simple API for XML ) Pyhton标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。SAX是一种基于事件驱动的API。利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器。 解析器负责读取XML文档,并向事件处理器发送事件,如元素开始及结束事件;而事件处理器则负责对事件作出处理。 优点:SAX流式读取XML文件,比较快,占用内存少。 缺点:需要用户实现回调函数(handler)。 2.DOM(Document Object Model) 将XML数据在内存中解析成一个树,通过对树的操作来操作XML。一个DOM的解析器在解析一个XML文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。 优点:使用DOM的好处是你不需要对状态进行追踪,因为每一个节点都知道谁是它的父节点,谁是子节点. 缺点:DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,使用起来也比较麻烦! 3.ElementTree(元素树)… read more »

Python中使用pip安装非PyPI官网第三方库的方法

Python中使用pip安装非PyPI官网第三方库的方法是如何来实现的呢?下面的内容将会通过具体的实例来演示Python中使用pip安装非PyPI官网第三方库的方法的实现方法及相关技巧: 在python中安装非自带python模块,有三种方式: 1.easy_install 2.pip 3.下载压缩包(.zip, .tar, .tar.gz)后解压, 进入解压缩的目录后执行python setup.py install命令 本文主要针对pip安装时可能会碰到的一种情况,及解决办法: 假如我要安装pylint模块,该模块非python自带模块,用import肯定不能导入,需要额外安装 【现象】 执行pip install 命令,报错如下: 【分析】 在Perl中安装新模块,一般可以用PPM图形化工具,也可以用CPAN来安装,比如说: cpan>install Test::Class, 非常方便,不会碰到这种情况,这种情况主要是因为pip版本问题: pip最新的版本(1.5以上的版本), 出于安全的考 虑,pip不允许安装非PyPI的URL,因为该安装文件实际上来自pylint.org,因而导致上面的错误! NOTE: 1. 可以在官方changelog里面查看更改的信息 2. 可以用pip –version来查看pip的版本信息 【办法】 针对上面的情况,既然这个问题是因为pip版本的原因,可以改用pip低一点的版本 方法一: 用pip 1.4版本,再执行pip… read more »

Python实现文件同步服务器的方法

Python实现文件同步服务器是如何来实现的呢?下面的内容将会通过具体的实例来演示Python实现文件同步服务器的实现方法及相关技巧: 本文实例讲述了python实现的文件同步服务器。分享给大家供大家参考。具体实现方法如下: 服务端使用asyncore, 收到文件后保存到本地。 客户端使用pyinotify监视目录的变化 ,把变动的文件发送到服务端。 重点: 1. 使用structs打包发送文件的信息,服务端收到后,根据文件信息来接收客户端传送过来的文件。 2. 客户端使用多线程,pyinotify监视到文件变化,放到队列中,由另外一个线程发送。 上代码: 服务端: 客户端: python监视线程池 使用方法: 解析: 1. 接受字典参数,value为一个元组,第一个元素是线程池,后面的都是参数。 2. 每0.5秒监视线程池中的线程数量,如果线程死掉了,记录死掉线程的数目,再启动同样数量的线程。 3. 如果没有线程死去,则什么也不做。 从外部调用Django模块 前提就是,要新建一个django的project,这里我们新建了一个cloud_manage. 这样不仅可以调用django自身的模块,还能调用project本身的东西。 Python实现文件同步服务器就是这样,欢迎大家参考。。。。

Linux:如何在Linux中发现IP地址冲突

你们都知道什么是IP地址,是吧?它们被分配给网络上的设备来代表它们。它们通过DHCP服务器分配并且会经常改变。现在有两种IP地址。动态的一种会经常改变(几天一次),而静态的就如它的名字那样是静态的,意味着它们不会改变。 有时这会引发一些冲突。当一个动态IP被分配了并且有另外一台网络设备已经拥有了相同的IP。或者在相同网络子网上有多台分配IP的DHCP服务器。如果你有连通问题并且假设它是由于IP冲突造成的,那么你可以使用一个工具称作arp-scan来扫描它们。 这个工具会在本地网络发送ARP(Address Resolution Protocol)(地址解析协议)包来收集地址。如果有多个MAC地址声称拥有相同的IP地址,那么这里就存在冲突。 要在Ubuntu或者Debian上安装arp-scan则输入: $ sudo apt-get install arp-scan 对于Fedora,CentOS或者RedHat: $ sudo yum install arp-scan 要检测IP冲突,运行下面的命令: $ sudo arp-scan –I eth0 -l 输出示例: 192.168.1.10 00:1b:a9:63:a2:4c BROTHER INDUSTRIES, LTD. 192.168.1.30 00:1e:8f:58:ec:49 CANON INC. 192.168.1.33… read more »

Python将绝对URL替换成相对URL的实现方法

Python将绝对URL替换成相对URL是如何来实现的呢?下面的内容将会通过具体的实例来演示Python将绝对URL替换成相对URL的实现方法及相关技巧: 本文实例讲述了Python实现将绝对URL替换成相对URL的方法。分享给大家供大家参考。具体分析如下: 一、问题: 公司一个项目需要上传图片,一开始同事将图片上传后结合当前主机拼成了一个绝对的URL(http://192.168.1.1:888/m/getimg?filename=xxx.jpg)由于同时给手机终端提供接口,在手机终端会引起一些bug,改完代码后要求将以前的uri替换成相对的URL(/m/getimg?filename=xxx.jpg),由于图片是用img标签嵌入到内容同时用a标签括起显示大图的,所以需要读取数据库并对内容进行替换 二、解决方法: Python将绝对URL替换成相对URL就是这样,欢迎大家参考。。。。

python自动登录人人网并采集信息的实现方法

python自动登录人人网并采集信息是如何来实现的呢?下面的内容将会通过具体的实例来演示python自动登录人人网并采集信息的实现方法及相关技巧: 本文实例讲述了python实现自动登录人人网并采集信息的方法。分享给大家供大家参考。具体实现方法如下: python自动登录人人网并采集信息就是这样,欢迎大家参考。。。。

Python如何实现hangman游戏实例介绍

Python中hangman游戏是如何来实现的呢?下面的内容将会通过具体的实例来演示Python中hangman游戏的实现方法及相关技巧: 本文实例讲述了Python实现的简单hangman游戏。分享给大家供大家参考。具体如下: Python中hangman游戏就是这样,欢迎大家参考。。。。

Linux:10个在随机出现在面试中的Linux问题及答案

为了给你们带来一些小惊喜,这次我们准备了一些在面试中随机出现的问题而不是专门关于某个领域的问题。这些问题肯定会在不深入学习新知识的前提下使你在面试中脱颖而出。 1.假设你在为你工作的公司维护一份日常的备份。这份备份是以压缩后的格式而被维护着。现在你需要检查一份两个月之前的日志,你应该提出什么样的建议从而可以在不解压这份备份的前提下完成检查日志的任务? 答案: 在不解压文件的前提下检查文件内容,我们需要用到’zcat’。zcat这个工具可以轻松完成这个任务。 # zcat ­f phpshell­2.4.tar.gz 2.你需要追踪你系统中发生的事件,你应该怎么做? 答案: 为了追踪系统中发生的事件,我们需要用到叫做syslogd的这个后台程序。syslogd这个后台程序可以追踪系统信息并将其保存到指定的日志文件中。 启用’syslogd’这个后台进程会在路径’/var/log/syslog’中生成一个日志文件。syslogd应用对解决Linux系统中的问题十分有用。标准生成的日志文件和下面这个例子很像。 3.如何禁止特定IP访问FTP服务器? 答案: 我们可以通过运用tcpwrapper来禁止可疑的IP访问。首先在路径’/etc/vsftpd.conf’的配置文件中,将tcpwrapper这个参数设置为”tcp_wrapper=YES”,然后在’/etc/host.deny’文件中加入可疑的IP地址。 禁止访问的IP地址 打开’/etc/hosts.deny’文件。 # vi /etc/hosts.deny 在文件底端加入拒绝访问的IP地址 # # hosts.deny This file contains access rules which are used to # deny… read more »

Linux:如何在 Ubuntu server 中设置 RainLoop Webmail

Webmail无疑是任何邮件服务器必不可少的一部分。虽然本地邮件客户端通常比Webmail的功能更多,但通过电子邮件客户端从外部可信的网络访问IMAP或SMTP有时会很棘手。再者,当你需要在一个特定的工作站、笔记本电脑或者移动设备去使用一个电子邮件客户端时,你可以在任何地方使用Webmail服务,只要你接入互联网。 本教程的重点是在一个运行 Apache 的 Ubuntu 服务器上安装配置RainLoop Webmail。RainLoop 是基于 PHP 的Webmail,并且有以下功能。 支持apache,nginx和其它网页服务器。 标准接口补充了一个主题库可供选择。 个人和非盈利项目可免费使用。 在写这篇文章时,RainLoop 还不支持邮件过滤和不在公司时的自动回复。 在 Ubuntu 服务器上安装 RainLoop 首先,在服务器上设置必备的软件包。 # apt-get install wget unzip apache2 php5 php5-mysql libmysqlclient15-dev mysql-server poppassd 接下来,下载和安装 RainLoop。 # mkdir… read more »

Linux:跨越终端中多个vim实例访问剪切板内容

Vim (Vi IMproved)是一款在程序员之间非常受欢迎的文本编辑器。它在执行不同的快捷命令操作上有它自己的特长。 比如,要拷贝高亮的文本,我们使用‘y’命令,并用‘x’来剪切。但是,vim(不是gVim)剪切板的内容默认情况下是不能被其他的vim实例访问的。 Vim版本信息中使用‘+’表示启用了系统剪切板。你可以运行‘vim ­­–version’,如果你看不到像“+xterm_clipboard”而是显示“­xterm_clipboard“,那么会使用内部剪切板,其将不能被其它的vim实例访问。 安装gvim和parcellite 为了访问vim剪切板的内容,你需要安装gvim包。gVim是vim编辑器的GUI模式,它的剪切板选项默认启用。 # yum install -y gvim 然后,使用RPMForge 仓库安装parcellite 包。Parcellite是一款轻量级,小巧而免费的Linux剪切板管理工具。 # yum install -y parcellite 一旦安装后,运行下面的命令。这里的参数‘&’是使parcellite以后台进程运行。 # parcellite & 检查选项已经在gvim中启用。 # gvim –version 确保“+xterm_clipboard”选项显示在下面的输出中。 VIM – Vi IMproved 7.2… read more »

Python比较两段文本不同之处的方法介绍

Python比较两段文本不同之处是如何来实现的呢?下面的内容将会通过具体的实例来演示Python比较两段文本不同之处的实现方法及相关技巧: 本文实例讲述了python实现比较两段文本不同之处的方法。分享给大家供大家参考。具体实现方法如下: Python比较两段文本不同之处就是这样,欢迎大家参考。。。。

Linux:新手教程——在Linux Mint 16中找到保存的WiFi密码

当你使用 WEP,WPA 或 WPA2-PSK 连接到无线网络时,选择“自动连接”后密码将保存在Linux Mint(或任何其他的操作系统)中。试想一个情况,例如你需要提供密码给来访者,这时你需要知道WiFi密码,然而你有没有把它记下来。你可以轻松地找到之前连接的WiFi密码。 在这篇新手教程中,我们将会指导你如何在 Linux Mint 16 中找到保存的 WiFi 密码。 在 Linux Mint 中找到保存的 WiFi 密码: 找到保存的 WiFi 密码,其实过程非常简单。点击 Menu 输入network。在其中选择Network Connections。 在 Network Connections 中,你可以看到所有你最近链接过的 WiFi 网络。选择你想要知道密码的一个,点击Edit。 在 Wi-Fi Security 选项卡下,选中… read more »

Linux:十个鲜为人知的Linux命令 – Part 5

在前四篇 “鲜为人知的Linux命令” 系列文章受到高度赞赏之后,我们将为广大读者呈上此系列的最后一篇文章,虽然是最后一篇,但是其重要性毫不逊于前几篇。 前几篇文章的地址如下: 十一个鲜为人知的 Linux 命令 – Part 1 十个鲜为人知的 Linux 命令 – Part 2 十个鲜为人知的 Linux 命令 – Part 3 十个鲜为人知的 Linux 命令 – Part 4 42. lsb_release ‘lsb_release’ 命令会打印特殊发行版的信息。如果 lsb_release 还没安装,你可以在基于 Debain… read more »

Linux:Linux中显示系统中USB信息的lsusb命令

通用串行总线(USB)被设计成为连接计算机外设的标准,如键盘、鼠标、打印机、数码相机、便携式媒体播放器、磁盘和网络适配器等等 – 来源:Wikipedia 它已经成为了一个工业标准,现在很难看到一个没有USB口的计算机了。USB闪存的使用使得它更加流行。在Linux上,我们可以使用lsusb来列出USB设备和它的属性。 什么是lsusb 在它的手册上,lsusb定义成: 显示系统中以及连接到系统的USB总线信息的工具。 如何运行lsusb? 要运行lsusb,你可以直接在控制台输入lsusb。 $ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003… read more »

Linux:Linux shell中的那些小把戏

我日常使用Linux shell(Bash),但是我经常忘记一些有用的命令或者shell技巧。是的,我能记住一些命令,但是肯定不会只在特定的任务上使用一次,所以我就开始在我的Dropbox账号里用文本文件写下这些Linux shell的小技巧,现在我决定共享它给你。这个表我以后还会更新。记住,这里的一些贴士需要在你的Linux发行版上安装额外的软件。 在bash中检查远程端口是否打开: echo >/dev/tcp/8.8.8.8/53 && echo “open” 将进程挂起: Ctrl + z 将进程移到前台: fg (译注,挂起的进程是不执行的,如果希望在后台执行,可以使用bg命令,并且指定通过jobs命令获得的任务号。) 生成随机16进制数字,n是字符的数量: openssl rand -hex n 在当前shell中执行一个文件中的命令(译注:这个文件不是一个bash脚本,比如.bashrc、bash_profile等): source /home/user/file.name 提取字符串的前5个字符: ${variable:0:5} 打开SSH调试模式(译注:当你遇到SSH连接问题时很有用): ssh -vvv [email protected]_address 使用pem key的进行SSH连接: ssh [email protected]_address -i… read more »

python中选择排序算法介绍

下面的内容主要介绍了python选择排序算法,,欢迎大家参考: 本文实例总结了python选择排序算法。分享给大家供大家参考。具体如下: 代码1: python选择排序算法就是这样,欢迎大家参考。。。。

Python基于smtplib实现异步发送邮件服务介绍

Python基于smtplib实现异步发送邮件服务是如何来实现的呢?下面的内容将会通过具体的实例来演示Python基于smtplib实现异步发送邮件服务的实现方法及相关技巧: 基于smtplib包制作而成,但在实践中发现一个不知道算不算是smtplib留的一个坑,在网络断开的情况下发送邮件时会抛出一个socket.gaierror的异常,但是smtplib中并没有捕获这个异常,导致程序会因这个异常终止,因此代码中针对这部分的异常进行处理,确保不会异常终止。 Python基于smtplib实现异步发送邮件服务就是这样,欢迎大家参考。。。。

Python批量下载懒人图库网站中所有JavaScript特效

Python批量下载懒人图库网站中所有JavaScript特效是如何来实现的呢?下面的内容将会通过具体的实例来演示Python批量下载懒人图库网站中所有JavaScript特效的实现方法及相关技巧: 这是一个简单的Python脚本,主要从懒人图库下载JavaScript特效模板,在脚本中使用了gevent这个第三方库,使用的时候需要先安装。 Python批量下载懒人图库网站中所有JavaScript特效就是这样,欢迎大家参考。。。。

Linux:为什么GNU grep如此之快?

编注:这是GNU grep的原作者Mike Haertel 在FreeBSD邮件列表中对 “GNU grep为什么比BSD grep要快” 所做的回答,下面是邮件正文内容: Gabor 您好, 我是GNU grep的原作者,同时也是一名FreeBSD用户,不过我一直使用的是-stable版本(也就是更老的版本),而没怎么关注-current版本。 但是,当我无意间翻阅-current版的邮件列表时,偶然发现了一些关于BSD grep与GNU grep性能的讨论,你可能也注意到了那些讨论。 不管怎么说,仅供参考吧,下面是一些简单的总结,关于为什么GNU grep如此之快。或许你能借鉴其中的一些思想运用到BSD grep中去。 #技巧1:GNU grep之所以快是因为它并不会去检查输入中的每一个字节。 #技巧2:GNU grep之所以快是因为它对那些的确需要检查的每个字节都执行非常少的指令(操作)。 GNU grep使用了非常著名的Boyer-Moore算法(译者注:BM算法,是一种非常高效的字符串搜索算法,一般情况下,比KMP算法快3-5倍,具体可查看这篇讲解非常详细的文章:grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)),该算法首先从目标字符串的最后一个字符开始查找,并且使用一个查找表,它可以在发现一个不匹配字符之后,计算出可以跳过多少个输入字符并继续查找。 GNU grep还展开了Boyer-Moore算法的内部循环,并建立了一个Boyer-Moore的delta表,这样它就不需要在每一个展开的步骤进行循环退出判断了。这样的结果就是,在极限情况下(in the limit),GNU grep在需要检查的每一个输入字节上所执行的x86指令不会超过3条(并且还跳过了许多字节)。 你可以看看由Andrew Hume和Daniel Sunday 1991年11月在“Software Practice &… read more »

Linux:编程面试的10大算法概念汇总

以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念。由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍。 本文将从Java的角度看问题,包含下面的这些概念: 1. 字符串2. 链表3. 树4. 图5. 排序6. 递归 vs. 迭代7. 动态规划8. 位操作9. 概率问题10. 排列组合   1. 字符串 如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法。 toCharArray()// 获得字符串对应的char数组 Arrays.sort() // 数组排序 Arrays.toString(char[] a)// 数组转成字符串 charAt(intx)// 获得某个索引处的字符 length()// 字符串长度 length// 数组大小 2. 链表… read more »

Linux:Linux中grep命令的12个实践例子

你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧。 grep是每个Linux发行版都预装的一个强有力的文件模式搜索工具。无论何种原因,如果你的系统没有预装它的话,你可以很容易的通过系统的包管理器来安装它(Debian/Ubuntu系中的apt-get和RHEl/CentOS/Fedora系中的yum)。 $ sudo apt-get install grep #Debian/Ubuntu $ sudo yum install grep #RHEL/CentOS/Fedora 我发现使用现实世界中的真实例子让你投身其中是让你接触grep命令的最容易方式。 1.搜索和寻找文件 假设你已经在你的电脑上安装了一个全新的Ubuntu,然后你打算卸载Python。你浏览网页寻找教程,但是你发现存在两个不同版本的Python在使用,而你不知道你的Ubuntu安装器到底在你的系统中安装了哪个版本的Python,也不知道它安装了哪些模块。解决这个烦恼只需简单的运行以下命令: $ sudo dpkg -l | grep -i python 输出例子 ii python2.7 2.7.3-0ubuntu3.4 Interactive high-level object-oriented language (version 2.7)… read more »

Linux:三个快速便捷的命令行小贴士

最近几周里,我总是收到人们询问一些快速零散的问题。有时候一个人是在寻找一个有帮助的建议,或者一个具体的命令,或者一个命令行捷径,以完成一个特定的任务。本篇将介绍最近人们向我提出的三个问题,以及完成这些任务的简单方法。 第一个场景 我们要找到那些在过去的一个月中被改动过的文件,并将他们从当前的位置复制到另一个目录中去。 在这种情况下,能否精确的解决取决于你复制文件的时候是否保持了原来的文件树结构,还是你仅仅只是把所有文件全部复制到了一个指定的地方。如果我们只是想把所有的文件保存到一个文件夹中,或许这样做是为了将这些文件归档,那么我们可以使用find这条命令。通过使用find命令,我们能够根据文件被修改的时间查找到他们的位置,然后复制他们到指定的地方。这条命令看起来是这样: find Documents -mtime -30 -exec cp “{}” Backup ; 上面这条命令会在Documents文件夹中查找在过去30天内被修改过的文件。这些文件之后将会被复制到另一个叫Backup的目录中去。find命令将会通过调用cp命令来执行复制这一操作。通过修改mtime这条参数,我们可以查找到最近某个时间内被修改过的文件,在上面这个例子中它被设定为在过去的30天内。 更多的时候,我们会想要在把文件复制到目标文件夹后,仍然能够保留源文件夹的目录结构。很多时候,人们都希望两个文件夹的内容同步,然后他们会运行一个脚本来使他们保持一致。这种情况下,我们可能会用到rsync这条命令了。这个工具会把新文件、修改过的文件从一个复制到另一个目录中去,同时保持源目录的展示结构: rsync -a Documents/ Backup 上面的例子,它会先找到哪些文件在Documents中和Backup中都存在,以便不再复制这些不必要的文件。 第二个场景 有一个我们都会做的很普遍的工作,就是在一个文本文件中找到一个单词,然后用另一个单词把这个词在文本中的所有实例都替换掉。 比如,假设我有一个文档中提到一个人名叫“Becky”,但是我后来决定还是用稍微正式点的称呼“Rebecca”为好。对文件中的这个简单的改动,下面这条命令会起到作用: perl -pi -e ‘s/Becky/Rebecca/’ mydocument.txt 这条微型的Perl脚本会查询文档中所有“Becky”的实例,并且将之改为“Rebecca”。程序首先读取名为mydocument.txt这个要改动的文档,待修改完毕后再保存回去。 第三个场景 一个普遍关注的问题是,在一个硬盘要给别人或者被扔掉之前,需要对其中存储的敏感数据做些什么。 有些人会在电脑里保存一些银行的业务数据或者税务信息,那么这些数据最好在你的硬盘被转手到别人之前被彻底清理掉。现在有一些方法和工具可以让你使用。我最喜欢的一个是shred这条命令,它不仅能对单一文件进行处理,同样也能对整个设备进行处理。要重写一个文件里面的内容,我们可以这样运行shred: shred mytaxes.odt 上面这个例子中,它会移除文件里存的内容,但并不会把文件本身从硬盘中删除掉。如果要清除文件的内容同时删除掉这个文件,我们可以这样运行:… read more »

Linux:我希望早几年知道的 5 个 Unix 命令

使用*nix系统已经有一段时间了。但还是有一些命令是被我一直忽略的,真希望我能早几年发现这些命令。 1. man ascii 这个命令会打印出八进制、十六进制和十进制的ASCII码表。难以置信我是一个月之前才知道这个命令的。我总是使用google来查询ASCII码表。这个命令其实更方便。 ASCII(7)           BSD Miscellaneous Information Manual           ASCII(7)   NAME     ascii — octal, hexadecimal and decimal ASCII character sets   DESCRIPTION     The octal set:       000 nul  001 soh  002 stx  003… read more »

Linux:如何修复被挂木马的php网站

有个朋友的网站长期没有人管理,而网站PR=4,于是网站被人攻陷,首页加上了上百条黑链,找我帮忙修复 看到首页密密麻麻的黑链,第一反应就是头大。最简单的办法:格式化后重装系统。但是这个服务器web/数据库都部署在同一台上,数据规模有200多G,当初安装的时候也没有分区,在线迁移数据太麻烦了,只能硬着头皮去修复问题, 修复步骤 停掉web服务,免得旧仇未报,又添新恨 找到被挂马的漏洞。一定要找到,不然问题根本解决不了。服务器被挂马主要是两种原因:sql注入或者某种系统性漏洞 sql注入,和代码有关系,不好查。但是只要你的Nginx/PHP不是以root身份运行的,最多被拖库,被挂马的可能性不大 系统性漏洞,这个破坏性很大,但是都会比较著名,马上有人提供解决方案,搜索一下就能找到 所以,找到被挂马的原因是: nginx文件类型错误解析漏洞,这个漏洞很严重,php网站只要支持图片上传都会中招 修补漏洞,nginx文件类型错误解析漏洞 这个漏洞比较好修复,在nginx configure文件里面配置一下即可 搜查木马文件,到代码安装目录执行下面命令 find ./ -iname “*.php” | xargs grep -H -n “eval(base64_decode” 搜出来接近100条结果,这个结果列表很重要,木马都在里面,要一个一个文件打开验证是否是木马,如果是,马上删除掉 最后找到10个木马文件,存放在各种目录,都是php webshell,功能很齐全,用base64编码 清理现场, 去掉首页上的黑链,重启web服务 安全经验 普通服务器被挂马,不用紧张,按上述步骤进行修复 关键服务器(比如部署了用户资金/转账/交易 等服务),被挂马之后,必须要格式化重装,因为webshell的功能实在是非常齐全,攻击者很可能替换掉系统关键程序,比如sshd,nginx等,从此大门打开,随便进出 服务器安装系统要分区,至少应该分 系统区和数据区 两部分,这样重装系统的时候可以不用迁移数据 凡是提供外部端口的服务程序(web server,gate… read more »

Linux:我从其他人的Shell脚本中学到的

我是一个Shell脚本迷,也很喜欢从其他人的Shell脚本里学习一些有趣的东西。最近我偶然接触到用于方便ssh服务器双重认证的 authy-ssh 脚本。 浏览脚本后我学到了一些很酷的东西,在此也想分享给大家。 1. 让你的echo丰富多彩 很多时候,你会想让echo能以多种颜色区分不同输出。比如,绿色表示成功,红色告知失败,黄色提示警告。 NORMAL=$(tput sgr0) GREEN=$(tput setaf 2; tput bold) YELLOW=$(tput setaf 3) RED=$(tput setaf 1) function red() { echo -e “$RED$*$NORMAL” } function green() { echo -e “$GREEN$*$NORMAL” } function… read more »

Linux:对中级 Linux 用户有用的 20 个命令

也许你已经发现第一篇文章非常的有用,这篇文章是继对初级Linux用户非常有用的20个命令 的一个延伸。  第一篇文章的目的是为新手准备的而这篇文章则是为了Linux的中高级用户。在这里你将学会如何进行自定义搜索,知道正在进行的进程和停掉进程,如何使用Linux的强势功能和如何在系统内编译C,C++和JAVA程序。 21. 命令: Find 搜索指定目录下的文件,从开始于父目录,然后搜索子目录。 注意: `-name‘选项是搜索大小写敏感。可以使用`-iname‘选项,这样在搜索中可以忽略大小写。(*是通配符,可以搜索所有的文件;‘.sh‘你可以使用文件名或者文件名的一部分来制定输出结果) 注意:以上命令查找根目录下和所有文件夹以及加载的设备的子目录下的所有包含‘tar.gz’的文件。 ’find’命令的更详细信息请参考35 Find Command Examples in Linux 22. 命令: grep ‘grep‘命令搜索指定文件中包含给定字符串或者单词的行。举例搜索‘/etc/passwd‘文件中的‘tecmint’   使用’-i’选项将忽略大小写。 使用’-r’选项递归搜索所有自目录下包含字符串 “127.0.0.1“.的行。 上一篇:Linux 性能监测:IO下一篇:Indicator Weather 13.06 发布 增加 Kelvin 支持

Linux:linux中强大且常用命令:find、grep

在linux下面工作,有些命令能够大大提高效率。本文就向大家介绍find、grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们。本文结构如下: find命令 find命令的一般形式 find命令的常用选项及实例 find与xargs grep命令 grep命令的一般形式 grep正则表达式元字符集(基本集) grep命令的常用选项及实例 1、find命令 find命令是一个无处不在命令,是linux中最有用的命令之一。find命令用于:在一个目录(及子目录)中搜索文件,你可以指定一些匹配条件,如按文件名、文件类型、用户甚至是时间戳查找文件。下面就通过实例来体验下find命令的强大。 1.1、find命令的一般形式 man文档中给出的find命令的一般形式为: find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression] 其实[-H] [-L] [-P] [-D debugopts] [-Olevel]这几个选项并不常用(至少在我的日常工作中,没有用到过),上面的find命令的常用形式可以简化为: find [path…] [expression] path:find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录 expression:expression可以分为——“-options [-print -exec… read more »

Linux:为 Vim 添加 Sublime Text 的多重选取特性

相信用过 Sublime Text 编辑器的朋友一定对它的“多重选取”功能印象深刻吧。 这项功能能够达到“一处编辑,多处更改”的神奇效果。如果你是一个 Vim 控, 那么不必羡慕 Sublime Text 用户,因为现在有了Multiple Cursors 这款 Vim 插件。 在装好 Multiple Cursors 之后,通过按 Ctrl + n 来多重选取。一旦 选取完成,便可配合 Vim 既有的命令对其进行编辑处理。最后,按 Esc 可以 退出多重选取状态。 此外,你也可以使用 MultipleCursorsFind 命令通过正则表达式来进行 多重选取和编辑。 via http://linuxtoy.org/archives/vim-multiple-cursors.html 

Linux:在CentOS/RHEL/Scientific Linux 6下安装 LAMP

LAMP 是服务器系统中开源软件的一个完美组合。它是 Linux 、Apache HTTP 服务器、MySQL 数据库、PHP(或者 Perl、Python)的第一个字母的缩写代码。对于很多系统管理员来说安装 LAMP 除了是必备的技能外,都已经具有驾轻就熟的操作他们的能力了。不过新手们通常希望有没完没了的这方面的教程来告诉自己怎么做,下面我就和大家说说我的方法步骤。 LAMP 是服务器系统中开源软件的一个完美组合。它是 Linux 、Apache HTTP 服务器、MySQL 数据库、PHP(或者 Perl、Python)的第一个字母的缩写代码。对于很多系统管理员来说安装 LAMP 除了是必备的技能外,都已经具有驾轻就熟的操作他们的能力了。不过新手们通常希望有没完没了的这方面的教程来告诉自己怎么做,下面我就和大家说说我的方法步骤。 现在,很多时候我们需要用 MariaDB 来代替 MySQL 了。在这里我会告诉大家 MariaDB 的安装过程。 我的测试主机名为:server.linux.cn,测试 IP 地址为:192.168.1.200/24 安装 ApacheApache 是​​一个开源的跨平台的 Web 服务器。它提供了一个全方位的… read more »

Linux:Linux中dd命令详解

一、dd命令 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2 参数注释: if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file > of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file > ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。bs=bytes:同时设置读入/输出的块大小为bytes个字节。 cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。 skip=blocks:从输入文件开头跳过blocks个块后再开始复制。 seek=blocks:从输出文件开头跳过blocks个块后再开始复制。注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。 count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。 conv=conversion:用指定的参数转换文件。 ascii:转换ebcdic为ascii ebcdic:转换ascii为ebcdic ibm:转换ascii为alternate ebcdic block:把每一行转换为长度为cbs,不足部分用空格填充 unblock:使每一行的长度都为cbs,不足部分用空格填充 lcase:把大写字符转换为小写字符 ucase:把小写字符转换为大写字符 swab:交换输入的每对字节 noerror:出错时不停止 notrunc:不截短输出文件 sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。 二、dd应用实例 1.将本地的/dev/hdb整盘备份到/dev/hdd [email protected]: dd if=/dev/hdb… read more »

Linux:使用 Zsh 的九个理由

像大部分 *nix 用户,我之前用 bash 很多年,期间也有过小的不爽,但一直都忍过来,或者是说没想过这些不爽的地方能解决,比如 cd 到一个深目录时得哐哐猛敲 。这么多年里我也尝试过其他 shell。比如 ksh/tcsh 以及今天要说的 zsh,但最终都没坚持下去,因为心中始终还是认为 bash 是最正统的 shell,不愿意去主动深入学习其他 shell。直到前几天逛 GitHub,发现 排名第 6 的开源项目 oh-my-zsh,下来试用了一把,顿时觉得 bash 各种操作不爽到无法忍受。 放弃 bash 的各种内牛满面的理由 这里有个 youtube 上的视频,短短 4 分钟就已经抛出了几十个让 bash 用户切换到 zsh 中的理由。视频链接   理由 0:zsh 兼容 bash… read more »

Linux:MongoDB的真正性能-实战百万用户一:一亿的道具

上一篇为求振聋发聩的效果,有些口号主义,现在开始实战,归于实用主义。 使用情景 开始之前,我们先设定这样一个情景: 1.一百万注册用户的页游或者手游,这是不温不火的一个状态,刚好是数据量不上不下的一个情况。也刚好是传统MySql数据库性能开始吃紧的时候。 2.数据库就用一台很普通的服务器,只有一台。读写分离、水平扩展、内存缓存都不谈。一百万注册用户如果贡献度和活跃度都不高,恐怕公司的日子还不是那么宽裕,能够在数据库上的投资也有限。 以此情景为例,设每个用户都拥有100个道具,用户随时会获得或失去道具。 我们就来看看这一亿的道具怎么搞。 道具一般要使用原型、实例的设计方法,这个不属于数据库的范畴。 道具类型001 是屠龙刀,屠龙刀价格1500,基础攻击150,这些,我们把它们称为道具原型,保存在原型数据文件中。 这个原型数据文件,无论是存在何种数据库或者本地文件中,对服务器来说都不是问题,也不干扰数据库设计,所以我们不去讨论他。 关系数据库设计方法 典型的关系数据库设计方法: 用户表:字段 xxx userid xxx   ,记录数量100万 xxx是其他字段,userid标示用户 用户道具表:字段 xxx userid itemtype xxx ,记录数量一亿 xxx是其他字段,userid 标示 一个亿的记录数是不是看起来有点头疼,mysql这个时候就要想各种办法了。 MongoDB设计方法 但我们用mongoDB来实现这个需求,直接就没有问题 首先第一个集合:users集合,用UserName 作为_id ,记录数100万 然后道具的组织,我们有两种选择 1.在users集合的值中建立Items对象,用Bson数组保存道具(Mongo官方称为Bson,和Json一模一样的存储方法)… read more »

Linux:MongoDB的真正性能

最近开始研究MySQL和MongoDB,发现这方面资料不多。尤其是真正的说到点子上的文章,太少了。 有一些对比测试的文章基本上都是瞎测,测试方法都测到了马腿上,得出的结论基本上都是NoSQL毫无价值 容我借用Russell Smith 的那句话:不是MongoDB不行,是你不懂。 让我来分析一下MongoDB的真正性能吧。 有说MongoDB慢   反对:不设其他唯一索引的情况下,只用_id 在普通办公电脑上每秒插入几万,在普通x86服务器上每秒插入十几万,你好意思说这个性能低?比mysql强出一个数量级。       赞同:检索是真的慢,和sql数据库不同,越复杂的条件搜索MangoDB越吃亏,CPU和IO的双重压力。面对那些直接把SQL查询改写成MangoDB的用法,别转了,你不会收获任何性能提升。       你不行:说你不行还是真的不行,MongoDB领导了NoSQL运动,NoSQL请注意,我们最主要反对的就是SQL的方法论,按SQL方法使用MangoDB你只能收获失望。再想想MongoDB的设计思想:文档化。_id 就是文件名,MongoDB是个文件系统。全文检索?别闹了,用文件名找文件,一个文件名对应一个文件,你绝对不会失望。 那么MongoDB究竟应该怎么用呢? 首先,忘记SQL 你应该忘记你学过的那些优雅无敌的SQL,不是说为了提升检索性能,扔索引就有好处。 有一个简单的事实如下:只有一个默认的_id 索引,此时插入性能为1,你再加一个索引,插入性能约1/2,再加一个约1/3 ,以此类推…… 如果这个事实对你是很震撼的,那说明你还没有忘记SQL,接着忘。 MongoDB的索引对插入性能有着不可忽略的拖后腿效应,所以,我们应该使用且仅使用 _id 作为插入key,作为查询key,作为所有的那个key。 其次,直接忘记搜索这件事。 把MongoDB当做你的硬盘,给他文件名去操作文件.这就是Key-Value数据库的做法,你稍加设计就能这么用。 那么其实你所有的操作可以简化为两个指令,逻辑上 就是一个字典 你给他_id,往字典里插一个数据,或者拿一个数据。 Save({_id:xxx,…..}) FindOne({_id:xxx}) 要想高性能,善用那个_id,把你原来准备当主键的那个玩意,hash成_id. 把你原来准备的查询条件,什么?查询,拿_id来,别的全砍掉。 第三、这不是数据表 记住,这不是数据表,一个_id对应的东西不是一行数据,而是一个文件。… read more »

Linux:为何编码规范每行代码不超过80个字符是合理的

也许在Python编码风格指导(PEP8)中最有争议的一部分要数每行代码不超过80个字符的限制。没错,实际上是79个字符,但我使用80个字符,这个大概数,它是给程序员的一个参考值。   也许在Python编码风格指导(PEP8)中最有争议的一部分要数每行代码不超过80个字符的限制。没错,实际上是79个字符,但我使用80个字符,这个大概数,它是给程序员的一个参考值。 古老的VT100终端 现在很多软件公司采用的编码规范基本是PEP8,但每行80个字符的限制除外。GitHub上的项目,大多数都遵循PEP8规范(这一点似乎达到了高度的统一),但遵守80个字符限制的很少。在一些有明确规定的规范标准中,这个限制可能会增加(100或120),甚至完全删除。这样做常长见的理由是:我们已经不是使用VT100终端编程的年代了,我们有了更大,更高分辨率的屏幕。这是事实,但我发现,在Python编码中采用这个80个字符的规范,配合空格的使用,这会让我们的代码更急凑,更可读。 有一点你可以看出,在自然情况下,Python语句的长度一般会占大概35-60个字符(不包括缩进)。更长的语句很少见。如果突然有一个句子比其它的要长很多,会显得很突兀,不好看。同样,使用强制性的空格来增加行宽能够从视觉上帮助你优化减少嵌套循环的层数,一般的建议是重构代码不要让缩进多于4层。 例如,把下面这个: def search(directory, file_pattern, path_match, follow_symlinks=True, output=True, colored=True): ”’ Search the files matching the pattern. The files will be returned, and can be optionally printed ”’ pattern = re.compile(file_pattern)… read more »

Linux:Linux应用总结:自动删除n天前日志

  Linux 是一个很能自动产生文件的系统,日志、邮件、备份等。虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种 爽快的事情。不用你去每天惦记着是否需要清理日志,不用每天收到硬盘空间不足的报警短信,想好好休息的话,让我们把这个事情交给机器定时去执行吧。 1.删除文件命令: find 对应目录 -mtime +天数 -name “文件名” -exec rm -rf {} \;   实例命令: find /opt/soft/log/ -mtime +30 -name “*.log” -exec rm -rf {} \;   说明:将/opt/soft/log/目录下所有30天前带”.log”的文件删除。   具体参数说明如下: find:linux的查找命令,用户查找指定条件的文件; /opt/soft/log/:想要进行清理的任意目录; -mtime:标准语句写法; +30:查找30天前的文件,这里用数字代表天数; “*.log”:希望查找的数据类型,”*.jpg”表示查找扩展名为jpg的所有文件,”*”表示查找所有文件,这个可以灵活运用,举一反三; -exec:固定写法; rm -rf:强制删除文件,包括目录; {} \; :固定写法,一对大括号+空格+\+; 2.计划任务:   若嫌每次手动执行语句太麻烦,可以将这小语句写到一个可执行shell脚本文件中,再设置cron调度执行,那就可以让系统自动去清理相关文件。 2.1创建shell: touch /opt/soft/bin/auto-del-30-days-ago-log.sh chmod +x auto-del-30-days-ago-log.sh   新建一个可执行文件auto-del-30-days-ago-log.sh,并分配可运行权限 2.2编辑shell脚本: vi auto-del-30-days-ago-log.sh   编辑auto-del-30-days-ago-log.sh文件如下: #!/bin/sh find /opt/soft/log/ -mtime +30 -name “*.log” -exec rm -rf {} \;   ok,保存退出(:wq)。 2.3计划任务: #crontab -e   将auto-del-30-days-ago-log.sh执行脚本加入到系统计划任务,到点自动执行   输入: 10 0 * * * /opt/soft/log/auto-del-7-days-ago-log.sh >/dev/null 2>&1   这里的设置是每天凌晨0点10分执行auto-del-7-days-ago-log.sh文件进行数据清理任务了。… read more »

Linux:10个工具让你的 shell 脚本更强大

很多人误以为shell脚本只能在命令行下使用。其实shell也可以调用一些GUI组件,例如菜单,警告框,进度条等等。你可以控制最终的输出,光标位置还有各种输出效果。下面我将介绍一些工具,帮助你创建强大的,互动的,用户友好的 Unix/Linux shell脚本。我在FreeBSD和Linux下测试过这些工具,不过其他UNIX系列的操作系统应该都支持的。  1. notify-send 命令 这个命令可以让你通过通知进程发送一个桌面通知给用户。这可以用来向用户发送提示,或者显示一些信息而不用打断用户工作。你需要安装如下软件包:  $ sudo apt-get install libnotify-bin 下面这个例子展示了如何从命令行向桌面发送一个简单的消息:  notify-send “rsnapshot done :)” 输出:  下面是一个复杂一点的例子:  …. alert=18000 live=$(lynx –dump http://money.rediff.com/ | grep ‘BSE LIVE’ | awk ‘{ print $5}’ | sed ‘s/,//g;s/\.[0-9]*//g’)… read more »

Linux:命令行是你的至交好友

  命令行既可以成为你的至交好友,又可能成为你最大的敌人。它关键取决于你怎样用它,以及用它来做什么。如果你还是像大部分人一样畏惧使用命令行界面,那么这篇文章定会让你受益匪浅。 命令行界面?   是的,它是在黑色屏幕上的白色(或者绿色)的显 示区域,是神秘的文字流和奇怪的命令执行的地方。我知道很多大师级的程序员从来不使用命令行界面;然而,我也知道一些初级用户用命令行来做所有的事而不是 用图形界面。他们控制应用程序去浏览网页和文件系统,查收邮件,查看图片和编辑文字。他们甚至看youtyube视频和查看PDF文件都不使用图形界面!   最好的工作流程是取决于个人的。有些人倾向于图形界面,其他人则钟爱于命令行。 术语   刚刚接触Unix或者Linux的人在面对诸如终端,控制台和shell时是比较困惑的。   从用户的角度来看,它们之间似乎是没有太大区别的,但事实上,用户是使用控制台来连接终端来查看运行在计算机上的脚本。   在过去的时候,这三者是独立的硬件。控制台无非是一个显示器和一个键盘;它没有计算能力。它通过一个串行接口去连接终端,应用最广泛的是RS-232接口。   终端就像大型主机的界面。它一般具有计算、网络通信或进行其他特殊连接,如与大型主机连接的能力。终端也提供了对系统的管理者权限,这也是它为什么总是被 关在小黑屋的原因。被雇用者使用连接到这些终端的控制台进行工作,但是却无法获得大型主机的管理者权限。控制台与终端最终合并为一个单独的设备,最好的例 子的就是现代linux发行版中仿真的虚拟机终端。   shell就是一个可以读取用户输入,然后在屏幕输出结果的程序。一个shell可以是基于字符的(像CLI),或者是基于图形的(像Windows的 GUI)。今天,shell已经不仅仅是用户与系统的接口,他还肩负着管理进程,窗口,应用程序,命令,以及系统的其他方面。   shell解释执行命令行中输入的命令,用户也可以将命令组合起来写成一个脚本。现代的shell拥有自己的脚本语言,这提供了执行复杂任务的能力。   大多数现代的Linux发行版,如同Mac OSX一样,使用一个shell,BASH(译注:默认的,想用什么自己换)。Solaris和OpenIndiana默认使用Korn Shell,一个BASH的变种。请注意这篇指南主要讲的是BASH。 让我们说说 BASH   BASH 代表 Bourne Again Shell。它被作为 Bourne Shell 的新版本于1989年发布,之后成为了 Unix 系统的默认 shell。它由斯蒂芬·伯恩(Stephen Bourne)编写,用以取代 Thompson Shell。老版的… read more »

Linux:Sublime Text 2 设置文件详解

Sublime Text 2是那种让人会一眼就爱上的编辑器,不仅GUI让人眼前一亮,功能更是没的说,拓展性目前来说也完全够用了,网上介绍软件的文章和推荐插件的文章也不少,而且很不错,大家可以去找找自己需要的。而且 Linux 支持也做的非常好。 之前想设置什么都是直接在网上搜,但最近想调行距,这个把我给难住了,软件上的设置没找到,网上搜也没有,最后的最后在Sublime的官方论坛找到了,个人觉得行距还是很影响视觉体验的,看看下面的对比图就知道了: 看来想驾驭好这软件不弄清楚配置文件是不行了,周末找了时间把配置文件的每条配置信息都加上了中文注释,现在贴出来和大家共享,里面有解释不清楚的也欢迎大家伙来互相讨论:) 另外,这也是我的第一篇博客,以后我会多写些前端方面的文章和大家共享,欢迎一起讨论:) Preferences.sublime-settings文件: // While you can edit this file, it’s best to put your changes in // “User/Preferences.sublime-settings”, which overrides the settings in here. // // Settings may… read more »

Linux:每个开发人员都应该知道的8个Linux命令

  每个开发人员到了他们职业人生的某个阶段的时候,将会发现自己要寻找有关Linux的信息。我并不是这方面的专家。但是掌握了以下8个命令,我几乎可以得到我任何需要的东西。   注意:以下的命令都有很多扩展的文档,博客里提出的知识我最常用的命令,用法。如果你不了解Linux命令,这个帖子会给你一点指导。   我们以一些文本举例。假设我们有2个文件,里面有订单关于第三方的放置地点和发送回应。 order.out.log8:22:19 111, 1, Patterns of Enterprise Architecture, Kindle edition, 39.99 8:23:45 112, 1, Joy of Clojure, Hardcover, 29.99 8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99 order.in.log8:22:20 111, Order Complete… read more »

Linux:Linux 系统安全性能检查小记

Linux系统安全性能检查小记: 1、Accounts检查 # less /etc/passwd# grep :0: /etc/passwd   注意新的用户,和UID,GID是0的用户。 2、Log检查   注意“entered promiscuous mode”   注意错误信息: Remote Procedure Call (rpc) programs with a log entry that includes a large number (> 20) strange characters(-^PM-^PM-^PM-^PM-^PM-^PM-^PM-^PM)   最后一条目前还没理解,也没碰到过,请指点。 3、Processes检查 #… read more »

Linux:putty和WinSCP后门检查及清理方式

检查及清理方式 检查 /var/log 是否被删除 # /usr/bin/stat /var/log如果被删除了,说明中招了 查看 /var/log 文件夹内容 # ls -al /var/log如果文件很少,说明中招了 监控名称为 fsyslog,osysllog 的进程 # /usr/bin/watch -n 1 /bin/ps -AFZ f \| /bin/grep syslog如果有名称为fsyslog或osyslog的进程,说明中招了,注意不要和正常的系统日志进程混淆 检查 /etc/init.d/sshd 的文件头是否被篡改过 # /usr/bin/head /etc/init.d/sshd如果你分不清,请回本贴 检查 /etc/init.d/sendmail… read more »

Linux:10 个你从未用过的 Linux 命令

这也许需要几年甚至是几十年,才能真正掌握 Linux shell 命令。这里有 10 个你从来没有听说或使用过的命令。他们在没有特定的顺序。我最喜欢的是 mkfifo。1、pgrep, 替代: # ps -ef | egrep ‘^root ‘ | awk ‘{print $2}’ 1 2 3 4 5 20 21 38 39 … 你还可以这样: # pgrep -u root 1… read more »

Linux:如何查看 Linux 系统安装的时间

  我们 SUN 实验室每台服务器上架后都需要填写一个表格,这个表格包括详细的机器硬件配置、操作系统版本和安装时间、网络配置、机器名、MAC 地址和 IP、安装的软件和用途、安全级别和策略、联系人、上架时间、机柜号等。昨天有位管理员忘了填写操作系统的安装时间,跑来问怎么查看 Linux 系统的安装日期和时间(过了2个月谁还记得啊)。  有个办法是查看 lost+found 目录状态,因为这个目录一般很少用到,改动最少(很可能无任何改动),而其他目录比如 /bin, /home 等因为经常升级系统、创建用户等操作会修改目录状态.vPSee 在自己的一台 VPS 结点服务器上验证了一下,这台服务器是去年3月10日安装的系统,中途升级系统重启一次,然后连续满负荷跑了342天没有重启: $ stat /lost+found/  File: `/lost+found/’  Size: 16384         Blocks: 32         IO Block: 4096   directoryDevice: 805h/2053d    Inode: 11          Links: 2Access: (0700/drwx——) … read more »

Linux:CairoPlot 让 Linux 服务器的日志文件更直观

  确实有些Linux服务器管理员很享受阅读及核对日志文件的艰辛过程,但为什么不创建一个美观的列表及图形体系来突出那些故障和问题,而非要受这份罪呢?试试这款优秀的工具——CairoPlot吧,它会提供给你美观且信息可视化的服务器日志文件分析途径。   作为一个需要整天跟数据打交道的从业者,我一直致力于寻找更好的方法来将纷繁复杂的数据显示为列表和图形,尤其是利用Python来实现这一目标。时下存在很多利用Python制作的整合软件包可供使用,但如果你希望输出的结果不会因为粗糙的视觉效果而遭到那些苹果使用者们的耻笑,那么我向你强力推荐CairoPlot。   CairoPlot并未像大多数发行版软件那样进行封包,但它的安装过程依然简便易行。目前在CairoPlot Launchpad page(CairoPlot官方主页)上提供的最新版本是1.1版。你可以在那里下载到cairoplot-1.1.tar.gz这个文件,或是根据你自己的喜好,从BZR上搜索(一旦1.2版本发布,CairoPlot项目可能会整体转移到Sourceforge.net上)。   解压压缩包: $ tar xvf cairoplot-1.1.tar.gz 复制代码   然后复制下面这个文件:cairoplot-1.1/CairoPlot.py,并粘贴到你要开发的Python脚本所在的目录下。   用扇形图说明:谁在发送垃圾邮件?   展开测绘工作之前,找到一个良好的数据源永远是我们的首要任务。针对这个项目,让我们先来分析一个Postfix日志文件,/var/log/mail.info,借以观察一系列垃圾邮件的众多来源。   通过对文件的随机检查,我们会发现有许多提出接收请求的邮件都来自一个客观上根本不存在的地址,举例说明:   Mar 5 15:05:45 mailserver postfix/smtpd[29764]: NOQUEUE: reject: RCPT from 212.199.94.45.static。012.net.il[212.199.94.45]: 450 4.7.1 : Helo command rejected: Host not found; from=… read more »

Linux:命令行艺术

流畅地使用命令行是一个常被忽略的技能,或被认为是神秘的奥义。但是,它会以明显而微妙的方式改善你作为工程师的灵活度和生产力。这是我在 Linux 上工作时发现的有用的命令行使用小窍门和笔记的精粹。有些小窍门是很基础的,而有些是相当地特别、复杂、或者晦涩难懂。这篇文章不长,但是如果你可以使用并记得这里的所有内容,那么你就懂得很多了。 其中大部分最初出现在Quora上,但是考虑到兴趣所在,似乎更应该放到 Github 上,这里的人比我更能提出改进建议。如果你看到一个错误,或者更好的某种东西,请提交问题或 PR!(当然,提交前请看看必读小节和已有的 PR/Issue。) 必读 范围: 本文是针对初学者和专业人员的,选题目标是覆盖面广(全都很重要)、有针对性(大多数情况下都给出具体实例)而简洁(避免不必要内容以及你能在其它地方轻松找到的离题的内容)。每个小窍门在某种情形下都很必需的,或者能比替代品大大节省时间。 这是为 Linux 写的。绝大部分条目都可以同样应用到 MacOS(或者甚至 Cygwin)。 主要针对交互式 Bash,尽管大多数小窍门也可以应用到其它 shell,以及常规 Bash 脚本。 包括了“标准的”UNIX 命令以及那些需要安装的软件包(它们很重要,值得安装)。 注意: 为了能在一篇文章内展示尽量多的东西,一些具体的信息会被放到引用页里。你可以使用 Google 来获得进一步的内容。(如果需要的话,)你可以使用 apt-get/yum/dnf/pacman/pip/brew来安装这些新的程序。 使用 Explainshell 来获取命令、参数、管道等内容的解释。 基础 学习基本 Bash 技能。实际上,键入man… read more »

Linux:如何在 CentOS 7 上安装 Percona服务器

在这篇文章中我们将了解关于 Percona 服务器,一个开源的MySQL,MariaDB的替代品。InnoDB的数据库引擎使得Percona 服务器非常有吸引力,如果你需要的高性能,高可靠性和高性价比的解决方案,它将是一个很好的选择。 在下文中将介绍在CentOS 7上 Percona 服务器的安装,以及备份当前数据,配置的步骤和如何恢复备份。 1.什么是Percona,为什么使用它 Percona是一个MySQL,MariaDB数据库的开源替代品,它是MySQL的一个分支,相当多的改进和独特的功能使得它比MYSQL更可靠,性能更强,速度更快,它与MYSQL完全兼容,你甚至可以在Oracle的MySQL与Percona之间使用复制。 在Percona中独具特色的功能 分区适应哈希搜索 快速校验算法 缓冲池预加载 支持FlashCache MySQL企业版和Percona中的特有功能 从不同的服务器导入表 PAM认证 审计日志 线程池 现在,你肯定很兴奋地看到这些好的东西整合在一起,我们将告诉你如何安装和对Percona Server做基本配置。 2. 备份你的数据库 接下来,在命令行下使用SQL命令创建一个mydatabases.sql文件,来重建或恢复salesdb和employeedb数据库,根据你的设置替换数据库名称,如果没有安装MySQL则跳过此步: mysqldump -u root -p –databases employeedb salesdb > mydatabases.sql 复制当前的配置文件,如果你没有安装MYSQL也可跳过:… read more »

Linux:从 Vim 到 Emacs 到 Evil

半个多月前,缘由 Vim 的一点小需求无法实现,我开始尝试 Emacs。从初窥门径到配置出完全满足我的一切,中途曾一度不可自拔,工作之余、入睡之前都在看 Emacs 的文档资料。发现我的控制欲特别强,不达目的不愿罢休。好在 Emacs 的确是个强大的平台,不负我望,在积累了一定的 elisp 基础之后就很快突破瓶颈,轻松定制出自己的编辑器。折腾 Emacs 就是 “山重水复疑无路,柳暗花明又一村”,时而线索终端而疲惫不堪,时而找到突破而满是成就感。总的来说 Emacs 的许多功能都无法 work out of the box,很多地方缺少面对新手的文档。只有熟悉了 Emacs 的理念,学习了 elisp 这门语言后再去 hack 他,才能为我所用。像 Gentoo 一样,Emacs 非常适合以及需要折腾,因为他只是个 Platform,而非 Editor。 Why 我使用 Linux 和… read more »

从 Vim 到 Emacs 到 Evil

半个多月前,缘由 Vim 的一点小需求无法实现,我开始尝试 Emacs。从初窥门径到配置出完全满足我的一切,中途曾一度不可自拔,工作之余、入睡之前都在看 Emacs 的文档资料。发现我的控制欲特别强,不达目的不愿罢休。好在 Emacs 的确是个强大的平台,不负我望,在积累了一定的 elisp 基础之后就很快突破瓶颈,轻松定制出自己的编辑器。折腾 Emacs 就是 “山重水复疑无路,柳暗花明又一村”,时而线索终端而疲惫不堪,时而找到突破而满是成就感。总的来说 Emacs 的许多功能都无法 work out of the box,很多地方缺少面对新手的文档。只有熟悉了 Emacs 的理念,学习了 elisp 这门语言后再去 hack 他,才能为我所用。像 Gentoo 一样,Emacs 非常适合以及需要折腾,因为他只是个 Platform,而非 Editor。 Why 我使用 Linux 和… read more »

使用 Find 命令来帮你找到那些需要清理的文件

Credit: Sandra H-S 有一个问题几乎困扰着所有的文件系统 — 包括 Unix 和其他的 — 那就是文件的不断积累。几乎没有人愿意花时间清理掉他们不再使用的文件和整理文件系统,结果,文件变得很混乱,很难找到有用的东西,要使它们运行良好、维护备份、易于管理,这将是一种持久的挑战。 我见过的一种解决问题的方法是建议使用者将所有的数据碎屑创建一个文件集合的总结报告或”概况”,来报告诸如所有的文件数量;最老的,最新的,最大的文件;并统计谁拥有这些文件等数据。如果有人看到五年前的一个包含五十万个文件的文件夹,他们可能会去删除哪些文件 — 或者,至少会归档和压缩。主要问题是太大的文件夹会使人担心误删一些重要的东西。如果有一个描述文件夹的方法能帮助显示文件的性质,那么你就可以去清理它了。 当我准备做 Unix 文件系统的总结报告时,几个有用的 Unix 命令能提供一些非常有用的统计信息。要计算目录中的文件数,你可以使用这样一个 find 命令。 $ find . -type f | wc -l 187534 虽然查找最老的和最新的文件是比较复杂,但还是相当方便的。在下面的命令,我们使用 find 命令再次查找文件,以文件时间排序并按年-月-日的格式显示,在列表顶部的显然是最老的。 在第二个命令,我们做同样的,但打印的是最后一行,这是最新的。 $ find… read more »

为什么 Laravel 会成为最成功的 PHP 框架?

Laravel是一个有着美好前景的年轻框架,它的社区充满着活力,相关的文档和教程完整而清晰,并为快速、安全地开发现代应用程序提供了必要的功能。在近几年对PHP框架流行度的统计中,Laravel始终遥遥领先。那么是什么让Laravel成为最成功的PHP框架? 2011年,Taylor Otwell将Laravel作为一种包含全新现代方法的框架介绍给大家。Laravel最初的设计是为了面向MVC架构的,它可以满足如事件处理、用户身份验证等各种需求。另外它还有一个由管理数据库强力支持,用于管理模块化和可扩展性代码的软件包管理器。 Laravel以其简洁、优雅的特性赢得了大家的广泛关注,无论是专家还是新手,在开发PHP项目的时候,都会第一时间的想到Laravel。本文我们将讨论为什么Laravel会成为最成功的PHP框架。 模块化和可扩展性 Laravel注重代码的模块化和可扩展性。你可以在包含超过5500个程序包的Packalyst目录中找到你想要添加的任何文件。Laravel的目标是让你能够找到任何想要的文件。 微服务和程序接口 Lumen是一个由laravel衍生的专注于精简的微框架。它高性能的程序接口可让你更加简单快速的开发微型项目。Lumen使用最小的配置集成了所有laravel的重要特性,你可以通过将代码复制到laravel项目的方式将完整的框架迁移过来。

PHP 编程中 10 个最常见的错误,你犯过几个?

错误1:foreach循环后留下悬挂指针 在foreach循环中,如果我们需要更改迭代的元素或是为了提高效率,运用引用是一个好办法: $arr = array(1,2,3,4); foreach($arr as&$value){     $value = $value *2; } // $arr is now array(2, 4, 6, 8) 这里有个问题很多人会迷糊。循环结束后,$value并未销毁,$value其实是数组中最后一个元素的引用,这样在后续对$value的使用中,如果不知道这一点,会引发一些莫名奇妙的错误:)看看下面这段代码: $array =[1,2,3]; echo implode(‘,’, $array),”n”; foreach($array as&$value){}    // by reference echo… read more »

5 个在 Linux 中管理文件类型和系统时间的有用命令

对于想学习 Linux 的初学者来说要适应使用命令行或者终端可能非常困难。由于终端比图形用户界面程序更能帮助用户控制 Linux 系统,我们必须习惯在终端中运行命令。因此为了有效记忆 Linux 不同的命令,你应该每天使用终端并明白怎样将命令和不同选项以及参数一同使用。 在 Linux 中管理文件类型和设置时间 请先查看我们 Linux 小技巧系列之前的文章: 5 个有趣的 Linux 命令行技巧 给新手的 10 个有用 Linux 命令行技巧 在这篇文章中,我们打算看看终端中 5 个和文件以及时间相关的提示和技巧。 Linux 中的文件类型 在 Linux 中,一切皆文件,你的设备、目录以及普通文件都认为是文件。 Linux 系统中文件有不同的类型: 普通文件:可能包含命令、文档、音频文件、视频、图像,归档文件等。 设备文件:系统用于访问你硬件组件。 这里有两种表示存储设备的设备文件:块文件,例如硬盘,它们以块读取数据;字符文件,以逐个字符读取数据。… read more »

给新手的 10 个有用 Linux 命令行技巧

我记得我第一次使用 Linux 的时候,我还习惯于 Windows 的图形界面,我真的很讨厌 Linux 终端。那时候我觉得命令难以记忆,不能正确使用它们。随着时间推移,我意识到了 Linux 终端的优美、灵活和可用性,说实话,我没有一天不使用它。今天,我很高兴和刚开始接触 Linux 的人一起来分享一些有用的技巧和提示,希望能帮助他们更好的向 Linux 过渡,并帮助他们学到一些新的东西(希望如此)。 10 个 Linux 命令行技巧 5 个有趣的 Linux 命令行技巧 管理 Linux 文件类型的 5 个有用命令 这篇文章希望向你展示一些不需要很高的技术就可以像一个高手一样使用 Linux 终端的有用技巧。你只需要一个 Linux 终端和一些自由时间来体会这些命令。 1. 找到正确的命令 执行正确的命令对你的系统来说非常重要。然而在 Linux… read more »

阅读 Docker 源代码的神兵利器

Golang开发环境的安装 阅读Go源码之前,安装Go语言的开发环境是必不可少的。下面我们介绍下载和安装的步骤。 1. 下载官方的Go语言安装包 请根据操作系统的版本(FreeBSD、Linux、Mac OS X或者Windows)以及处理器的架构(386、amd64或者arm)进行选择。下载地址为:https://golang.org/dl/ ,是Google提供的服务,可能需要使用VPN才能访问。 2. 安装Go语言安装包 选择合适的版本下载完成后,就可以开始进行Go语言安装包的安装了,过程如下。 FreeBSD、Linux以及Mac OS X之tar安装 对于FreeBSD、Linux以及Mac OS X用户来说,下载好的tar压缩文件需要再执行以下步骤才算是安装完成。 把压缩包解压至/usr/local目录下,命令如下: tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz 选择适合的压缩包进行安装,例如,如果在64位Linux系统上安装Go 1.2.1版本,那么对应的压缩包就是go1.2.1.linux-amd64.tar.gz。 把/usr/local/go/bin添加到系统的环境变量中,可以通过把下面这行命令加入到/etc/profile(系统所有用户都受影响)或者$HOME/.profile(当前用户受影响)文件中来完成。 export PATH=$PATH:/usr/local/go/bin 提示:Go的安装环境默认安装在/usr/local(Windows系统是C:\)路径下。如果指定某个本地目录为安装路径,就必须设置$GOROOT环境变量。如果要把安装包解压至$HOME目录下,就需要把下面两行代码加入到$HOME/.profile文件中。 export GOROOT=$HOME/go export PATH=$PATH:$GOROOT/bin Mac OS X之pkg快速安装 下载后缀为.pkg的相关安装包,打开后按照图形界面的指引操作即可顺利安装。使用这种方法时,安装包默认会安装到/usr/local目录下,/usr/local/go/bin也会被加入到环境变量。安装完成后,在终端使用时需要重新开启一个会话,以便生效。 Windows安装 除了源码安装以外,Go官方给用户提供了两种安装开发环境的方法:一种是手动解压缩Zip包安装,这需要设置环境变量;另一种是全自动安装。 MSI安装: 打开MSI文件,按照指引界面一步步操作即可,默认安装在C:\Go路径下。安装器会自动把C:\Go\bin目录加入到环境变量中。同样,需要重启命令行使之生效。 Zip安装: 把Zip文件下载并解压缩到自己选择的目录,推荐C:\Go。如果放到C:\Go以外的目录,需要设置GOROOT变量。然后把解压缩后Go目录下的bin目录(如C:\Go\bin)加入到PATH环境变量中。 Windows下设置环境变量:… read more »

使用 tuptime 工具查看 Linux 服务器系统的开机时间的历史和统计

你可以使用下面的工具来查看 Linux 或类 Unix 系统运行了多长时间: uptime : 告诉你服务器运行了多长的时间。 lastt : 显示重启和关机时间。 tuptime : 报告系统的运行时间历史和运行时间统计,这是指重启之间的运行时间。和 uptime 命令类似,不过输出结果更有意思。 找出系统上次重启时间和日期 你可以使用下面的命令来获取Linux操作系统的上次重启和关机时间及日期(在OSX/类Unix系统上也可以用): ### 显示系统重启和关机时间 who -b last reboot last shutdown ### 开机信息 uptime cat /proc/uptime awk ‘{ print “up… read more »

RHCSA 系列(十): Yum 包管理、Cron 自动任务计划和监控系统日志

在这篇文章中,我们将回顾如何在 RHEL7 中安装,更新和删除软件包。我们还将介绍如何使用 cron 进行任务自动化,并完成如何查找和监控系统日志文件,以及为什么这些技能是系统管理员必备技能。 RHCSA: Yum包管理、任务计划和系统监控 – Part 10 使用yum 管理包 要安装一个包以及所有尚未安装的依赖包,您可以使用: # yum -y install package_name(s) package_name(s) 需要是至少一个真实的软件包名 例如,安装 httpd 和 mlocate(按顺序),输入。 # yum -y install httpd mlocate 注意: 字符 y 表示绕过执行下载和安装前的确认提示。如果需要提示,你可以不用它。 默认情况下,yum… read more »

Python 开发者的 Docker 之旅

「人生苦短,我用 Python」这句话作为「Docker 开发大礼包」的第二季的开篇引言是再合适不过了。这句话的出处是 Bruce Eckel,对,就是那个 C++ 和 Java 生命里最重要那个男人。这大概就是传说中的大是大非之后痛彻心扉的领悟。 Python 其实是一门非常古老的语言,他的故事几乎伴随着我国改革开放的历史步伐一路走来,也同样经历了跌宕起伏,涅槃重生的激荡二十年。毫不夸张的说,Python 的演化历史和成果,是程序员自强不息摆脱机器思维,迈向本我的探索旅程。 谁创造了 Python? Guido van Rossum,荷兰人。在这个诞生了梵高和克鲁伊夫的国家, 1989 年,因为圣诞节过于寂寞难耐,有个百无聊赖的年轻人创造了一个新的脚本语言。 Python 是什么的缩写? 不是缩写。因为作者 Guido 当时在看一部叫「Monty Python’s Flying Circus」的英国腐剧,因此得名。 Python 最著名的版本? Python 2.0 于 2000 年 10… read more »

你知道 Linux 内核是如何构建的吗?

介绍 我不会告诉你怎么在自己的电脑上去构建、安装一个定制化的 Linux 内核,这样的资料太多了,它们会对你有帮助。本文会告诉你当你在内核源码路径里敲下make 时会发生什么。 当我刚刚开始学习内核代码时,Makefile 是我打开的第一个文件,这个文件看起来真令人害怕 :)。那时候这个 Makefile 还只包含了1591 行代码,当我开始写本文时,内核已经是4.2.0的第三个候选版本 了。 这个 makefile 是 Linux 内核代码的根 makefile ,内核构建就始于此处。是的,它的内容很多,但是如果你已经读过内核源代码,你就会发现每个包含代码的目录都有一个自己的 makefile。当然了,我们不会去描述每个代码文件是怎么编译链接的,所以我们将只会挑选一些通用的例子来说明问题。而你不会在这里找到构建内核的文档、如何整洁内核代码、tags 的生成和交叉编译 相关的说明,等等。我们将从make 开始,使用标准的内核配置文件,到生成了内核镜像 bzImage 结束。 如果你已经很了解 make 工具那是最好,但是我也会描述本文出现的相关代码。 让我们开始吧! (题图来自:adafruit.com) 编译内核前的准备 在开始编译前要进行很多准备工作。最主要的就是找到并配置好配置文件,make 命令要使用到的参数都需要从这些配置文件获取。现在就让我们深入内核的根 makefile 吧… read more »

RHCSA 系列(三): 如何管理 RHEL7 的用户和组

和管理其它Linux服务器一样,管理一个 RHEL 7 服务器要求你能够添加、修改、暂停或删除用户帐户,并且授予他们执行其分配的任务所需的文件、目录、其它系统资源所必要的权限。 RHCSA: 用户和组管理 – Part 3 管理用户帐户 如果想要给RHEL 7 服务器添加账户,你需要以root用户执行如下两条命令之一: # adduser [new_account] # useradd [new_account] 当添加新的用户帐户时,默认会执行下列操作。 它/她的主目录就会被创建(一般是”/home/用户名”,除非你特别设置) 一些隐藏文件 如.bash_logout, .bash_profile 以及 .bashrc 会被复制到用户的主目录,它们会为用户的回话提供环境变量。你可以进一步查看它们的相关细节。 会为您的账号添加一个邮件池目录。 会创建一个和用户名同样的组(LCTT 译注:除非你给新创建的用户指定了组)。 用户帐户的全部信息被保存在/etc/passwd文件。这个文件以如下格式保存了每一个系统帐户的所有信息(字段以“:”分割) [username]:[x]:[UID]:[GID]:[Comment]:[Home directory]:[Default shell] [username]… read more »

SQL 新手指南

介绍 SQL 已经应用到了我们周围的各个角落,不管你信不信。操纵任何种类数据的每个应用程序都需要将数据存放在某处。无论它是大数据,还是只有简单数行的数据包;无论是政府、还是创业公司;无论是横跨多台服务器的大型数据库、还是运行着自己小型数据库的手机,SQL 无处不在。 但是,SQL 是什么呢?SQL 代表结构化查询语言,通常,其发音为“ess-que-el”。SQL 是数据库语言,专门为了和数据库通信而建立的。SQL 是一门简单的语言,和英语语言类似,因为命令和英语句子有着类似的结构。那些句子组织为声明式的语句,这样 SQL 也被叫做声明式语言。 在可视化地编写 SQL 查询语句方面,已经有很多可用的工具了,为什么还要学习一个全新的语言呢?当你用某些 SQL 工具时,重要的是理解 SQL 语言、理解可视化工具正在做什么、以及为什么那样做。有时候,需要手动写一些 SQL 语句,不仅因为这是最快的方法,而且这更强大、经常是完成预定目标的唯一方法。 数据库的介绍 我们刚才提到了,SQL 是数据库语言。那么,数据库是什么?数据库是一种存储机制,被设计为用来访问存储的信息及其操作。数据库里的信息被存储在称作表(table)的对象里。表的名字是其唯一身份,由列和行构成。列包含列名、列的数据类型以及该列的其它属性。行包含该列的记录或数据。数据库里的大部分表之间会有关系(relationship)或连接(link),一对一、或一对多的关系。这也是为什么这种数据库被称作关系模型数据库。 关于描述数据库结构,最容易的方法就是把它和 Excel 电子表格做比较,它们有着诸多相似。一个数据库就是一份独立的文件。电子表格里的 sheet 就是表(table),每个 sheet 有一个名字。列和行,都和数据库一样。SQL 语言用来创建新表、更改现有表,用来获取数据、更新数据或删除数据。 比如说,我们有一份知名电影的台词大集合,存放在任意单独的文本文件里。即使我们精心组织,用 Excel 电子表格存放,我们所面临的问题仍然是存在。用这种方式存储台词,我们无法快速地从一部电影里得到所有台词,或无法得到一个角色的所有台词。如果我们把文本文件或电子表格放入数据库,并创建带有关系的表,所有问题就迎刃而解了。关系型的真正涵义是什么?关系模型是描述数据、以及这些数据实体之间的关系的方法。在我们的例子中,关系就是每个台词和表之间的联系,电影名称存放在表里、或所有角色也存放在表里。 下面是一个简化处理的例子,只有一个表做示例,表名叫「Movie_quotes」。它有四列,一个列表示台词文本、一个列表示说台词的演员角色,一个表示电影,还有年份。我们收录了八句电影台词,我们的示例表看起来像是这个样子: Movie_quotes… read more »

24个可能你现在用不到,但应该了解的 PHP 库

作为一个PHP开发者,现在是一个令人激动的时刻。每天有许许多多有用的库分发出来,在Github上很容易发现和使用这些库。下面是我曾经遇到过最酷的24个库。你最喜欢的库没有在这个列表里面?那就在评论中分享吧! 1. Dispatch – 微框架 Dispatch是一个PHP小框架。它并没有给你完整的MVC设置,但你可以定义URL规则和方法,以便更好组织应用程序。这对API、简单的站点或原型来说是完美的。 //包含库 include ‘dispatch.php’; // 定义你的路由 get(‘/greet’, function () {    //渲染视图 render(‘greet-form’); }); //post处理 post(‘/greet’, function () { $name = from($_POST, ‘name’);    // render a view while passing… read more »

Ubuntu 系统下搜狗拼音输入法无法输入的问题解决方法

本文将会讲述如何在Ubuntu系统16.04或14.04下解决搜狗拼音输入法能正常启动但不能输出文字或者搜狗输入法无法正常启动的问题的解决方法。 1# 删除ubuntu下的所有的搜狗拼音输入法的配置文件 执行下面的命令: $ cd ~/.config Find . -name sogou* | xargs rm -rf Find .  -name Sougou* | xargs rm -rf 上面的两个find命令将会删除所有的找到的搜狗配置文件。 2# 重启搜狗输入法服务 $ fcitx restart 更多阅读:Ubuntu 系统下安装搜狗拼音输入的方法

Linux系统下find命令递归删除查找目录的方法

本文将会讲述如何使用linux系统下的find查找命令来查找目录或文件,并将查找到的所有文件和目录递归删除掉。 Linux find 命令递归删除非空目录 通常情况下我们会想到find命令里的删除操作是使用-delete选项,但是使用该选项只能删除空目录的文件,不能递归删除该目录里的其它文件。如下面的例子: $ ls dir1 test1 $ find ./ -name “dir1” -type d -delete find: cannot delete `./dir1′: Directory not empty 可以使用下面的Linux find 命令删除非空目录,如: $ find ./ -name “dir1” -type d -exec rm… read more »

最实用的 Linux 命令行使用技巧 (必看!)

我们可能每天都会要使用到很多的 Linux 命令行。 我们也会网络上知晓一些使用它们的小技巧,但是如果我们没有时常来进行练习,就有可能会忘掉怎么去使用它们。 所以我就决定把那些你可能会忘记的小提示和小技巧,或者对你而言可能是全新的东西都列表来。 将输出内容以表格的形式显示出来 有时,在你看到命令行执行的输出时,因为字符串过度拥挤(比如说 mount 命令的输出)导致输出内容难以识别。如果我们看到的内容是一张表格会如何呢?其实这是很容易做到的! mount | column –t: 在此例中,由于内容中留了空格,所以输出的形式就美观了起来。 那如果想要的分隔符是别的什么符号,比如说冒号,又该怎么去做呢? (例如,在 cat/etc/passwd 的输出内容中使用) 这时候只需要使用 -s 参数指定分隔符就行了,像下面这样。 cat /etc/passwd | column -t -s: 重复执行一个命令,直到它运行成功 如果在 Google 上搜索这个功能,你会发现很多人都问到了如何重复执行命令,直到这个命令成功返回并且运行正常。 Google上的建议里就包括 ping 服务器,直到它变得空闲为止,还有就是检查是否有向特定的目录上传了具有特定扩展名的文件,还有就是检查特定的URL是否已经存在,诸如此类的办法。 其实你还可以使用 while true 的循环来实现来实现这个功能: 在上面这个示例中,>/dev/null 2>&1 会让程序的输出重定向到 /dev/ null。标准错误和标准输出都会被包含进去。 这是我认为最酷的Linux命令行技巧之一。… read more »

Linux 下apache 服务器安装与配置教程(配置文件虚拟主机多站点详解)

本文主要讲述如何在linux系统下安装及配置APACHE web 服务器(httpd),并讲解如何配置针对apache 配置SSL, PHP,HTTPS等,并会详细介绍apache配置文件以及如何来配置虚拟主机,apache web 多站点配置等。 Apache 是什么 Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。 摘自百度百科 Apache 该怎么读 Apache音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部。也是一个基金会的名称、一种武装直升机等等。 所以我们一般讲apache读作“阿帕奇”。 Apache 安装与配置 1# Apache 服务器安装前的准备工作 检查该环境中是否已经存在httpd服务的配置文件,默认存储路径:/etc/httpd/httpd.conf(这是centos预装的Apache的一个ent版本,一般我们安装源代码版的Apache)。如果已经存在/etc/httpd/httpd.conf,请先卸载或者关闭centos系统自带的web服务,执行命令:chkconfig  httpd off,再或者把centos自带的httpd服务的80端口改为其他端口,只要不与我们安装的Apache服务的端口冲突就可以啦。 停止并卸载Linux系统自带的httpd服务,执行下面的命令: service httpd stop ps -ef | grep httpd kill -9 pid号(逐个删除)… read more »

Ubuntu 下安装MySQL 5.6/5.7数据库教程(14.04/16.04)

本文将会讲述在ubuntu 系统下安装及配置MySQL 5.6/5.7 数据库的方法。本文主要通过两种方法来讲述mysql数据库的安装,一种是通过apt-get命令,另一种是源码包编译安装。(以ubuntu 16.04 为示例) Ubuntu安装 MySQL 5.6 数据库 Ubuntu安装MySQL 5.7 数据库 Ubuntu通过deb包安装MySQL 5.7 Ubuntu MySQL 安装失败问题总结 Ubuntu 安装MySQL ODBC驱动 Ubuntu 下安装MySQL-connector-python Ubuntu 安装 python 3.5 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的… read more »

Linux 删除文件

本文将会讲述如何在Linux系统下删除文件的方法,以及如何在命令行下删除某个文件中特定的内容行, 或者删除特定日期创建的文件或者目录。 目录如下: Linux 删除文件命令 Linux 删除单个文件或目录(文件夹) Linux 删除多个文件 Linux 递归删除目录或子目录文件 Linux 交互式删除文件 Linux显示删除文件时的信息 Linux 删除空目录文件 Linux删除文件里文件列表的文件 Linux 删除文件名以“-”开头的文件 Linux 通过文件inode号删除文件 Linux删除指定日期之前的文件 Linux通过自定义rm函数删除文件 Linux删除文件后空间没有释放解决办法 Linux 恢复删除的文件 Linux 删除文件命令 在CentOS,Redhat,或者Ubuntu等类Unix系统下,我们主要用来删除文件或文件夹目录的方法是通过执行rm 命令或者 unlink命令。 下面我们来看删除文件命令rm的用法介绍: rm 命令是Unix或者Linux系统下的主要用来文件系统中删除文件的命令。 当然,在大多数的系统里,… read more »

Linux rm 删除命令

当我们在Linux系统下,如果要删除某个特定的文件或者特定目录下的特定文件,那么首先会想到的是Linux系统的系统命令rm。 本文将会对rm删除文件命令的使用方法做详细的介绍,包括rm命令的命令格式,包含的命令选项,并且通过实例来介绍rm命令的不同选项。 Linux rm 命令介绍 rm 命令在英语里就是remove单词的缩写,就是删除的意思, 该命令主要用来删除linux文件系统下的文件。当使用rm命令的递归参数-rf的话,也可用来删除目录文件。 我们可以在命令行下通过rm命令来删除指定的每一个文件。 默认情况下,该命令不会删除目录文件。 Linux rm命令删除文件的处理过程只是删除文件所对应的inode链接,但并不会删除或者清空文件的存储数据,当删除完成后,系统会将该文件的存储空间标记为空闲状态,这样就别的程序就可以将数据写入这个空间里了。 也就是说,当你删除一个文件的时候,文件数据并没有被改变,只是不会再关联到这个文件名了。 因为文件数据本身并没有被销货,所以当rm命令将指向数据区域的指针删除掉后, 该数据就不能再被访问了, 而且也没法注销该删除操作。不像我们在windows系统里, 我们可以去回收站里将删除的文件恢复到以前的存储位置。 注意: 如果你想彻底的将文件数据从磁盘里删掉,我们可以通过使用Linux系统的shred命令将指定文件所在存储数据测试重新覆盖,这样数据就彻底无法再恢复了。 Linux rm 命令格式及参数 rm [参数] {文件名} 参数如下: -f, –force 强制删除文件, 不做任何删除操作的提示 -I, –interactive  进行交互式的删除操作 -r, -R,… read more »

Linux unlink命令

本文将会讲述Linux系统下unlink删除文件命令的用法。 Unlink 命令会直接调用linux系统下的unlink系统函数,来删除指定的某一个文件。 Linux unlink 命令格式及参数 命令格式如下: Unlink {文件名} Unlink {选项} Unlink 参数如下: –help – 显示该命令的帮助信息并退出命令 –version –显示命令的版本信息并退出命令 Unlink命令只有提供了上面的两个参数。 Linux unlink命令实例 1# 删除当前目录下的名为fio.txt 的文件,执行下面的命令: # unlink fio.txt 命令输出如下: [email protected]:~/osetc# ls fio1.txt  fio2.txt  fio.txt [email protected]:~/osetc# unlink… read more »

5 种Linux下 删除除指定文件外的所有文件的方法

本文将会讲述Linux系统下通过rm命令删除除指定文件外的其它所有的文件的5中不同的方法。 当我们在当前目录下或者指定目录下,想删除同类文件或者符合同一模式匹配规则的文件,但需要排除其中的某个或多个文件,只是简单的使用rm命令是无法实现。所以我们需要结合其它的linux命令来实现我们的删除文件操作。 下面我们通过5中不同的方法来介绍删除指定文件外的文件的方法: 方法一: 可以先将需要排除的文件,从当前目录中移动到一个临时目录里,然后执行rm命令将其与的文件删除,最后再将刚才移动走的文件从新拷贝回来。 执行的命令如下: #mv  保留文件 /tmp # rm –rf  删除文件 #mv  /tmp/保留文件 . 方法二:使用Linux中的通配符来排除保留文件 我们可以使用Linux系统中的通配符 !来排除指定的文件, 比如我们要删除当前目录下除了fio1.txt文件的所有其它文件, 执行下面的命令: #rm –i  !(fio1.txt) 命令输出如下: [email protected]:~/osetc# ls fio1.txt  fio2.txt [email protected]:~/osetc# rm -i !(fio1.txt) rm:是否删除普通文件 ‘fio2.txt’?… read more »

Linux 下回收站实现(恢复删除文件)

本文主要讲述通过shell 脚本来实现Linux系统下的类似于windows系统中的回收站的功能。 默认情况下,大多数的Linux发型版本都没有实现回收站的功能,这样就会导致当你错误的删除了系统里某个文件或者错误的执行rm –rf * 命令将某些文件删除后, 我们没有很好的办法恢复已经被误删掉的文件。 下面我们通过简单的shell 脚本函数来重新定义一个trash函数,该函数将会实现当我们执行rm命令删除文件的时候,只是将文件先移动到某个临时的目录文件里,这样就可以起到一个简单回收站功能,如果需要撤销文件删除操作,我们也可以通过重新定义的另一个函数undo,来恢复被删掉的文件,该函数会将你指定的文件从临时目录里恢复到当前目录。 下面是我们实现的shell 函数: undo( ) # 该函数用来撤销或者恢复被删掉的文件 { mv –i ~/.tmp/[email protected] ./ } trash( ) # 该函数用来删除指定文件,并将其移动到临时目录~/.tmp/目录里 { mv [email protected]  ~/.tmp/ } cleartrash()  # 该函数用来删除回收站(临时目录)里的所有文件 { read… read more »

Linux 删除文件名为乱码的文件

本文将会讲述如何通过Linux rm命令来删除文件名包含特殊字符或者乱码文件的方法。 删除文件名以“-”开头的文件 删除文件名包含特殊字符的文件 删除文件名包含乱码的文件 在Linux系统下我们主要用来删除文件的命令是rm或者unlink命令,但是当文件名为乱码或者包含乱码的文件是,我们就无法选择要删除的文件名,这样就会导致无法删除这些文件名为乱码或者包含特殊字符的文件。 当然这种乱码文件名的文件大多数情况都是由于不正常的操作,比如突然中断从服务器文件上传或者下载某些文件的时候,就有可能导致乱码文件名的出现。 Linux下删除以短横杠或者减号“-””开头的文件名的文件 当文件名以减号“-”开头的时候,如果我们使用rm 命令来删除该文件的时候,系统会报错,那么删除这种文件,可以通过rm命令后面接–, 来删除。 执行命令如下: #rm — -fio.txt Linux下删除文件名包含特殊字符的文件 如果文件名包含的是系统里可以打印的特殊字符的文件,这个时候我们可以使用转义字符或者双引号来传给rm命令。 如果要删除当前目录下的名为“!”的文件,那么可以执行下面的命令: # rm  \! 或者 # rm “!“ 命令输出日下: [email protected]:~# ls ! ! [email protected]:~# ls -al ! -rw-r–r–… read more »

Linux 自动删除日志文件(N天或特定日期)

本文将会讲述如何在Linux系统下自动删除特定日期或者N天系统生成的日志文件或者归档文件或者特定某类文件。 Linux系统和windows系统一样,在系统的运行过程中,会不断的产生日志文件或者日志归档文件,或者其它不同类型的日志文件。随着日志的不断输出到文件里,文件的大小也会越来越大,这样该日志文件就会占据越来多的磁盘空间,而且有可能会将可用存储空间全部占用,这样就有可能导致你的机器越来越慢,相应的服务也会停止。为了防止日志文件变大后,导致的系统不能正常访问,我们需要定期的清理或者删除这些日志文件。 查看Linux系统日志文件 对于Linux 下APACHE服务器里,系统会产生访问时的日志文件,错误访问日志文件,MySQL数据库服务也会产生相应的日志文件, 大多数Linux系统的默认系统日志文件都会放在/var/log/目录下,通过下执行下面的命令来查看Linux系统的日志文件: #ls /var/log/* 命令输出如下: [email protected]:~# ls /var/log/* alternatives.log bootstrap.log gpu-manager.log syslog.2.gz alternatives.log.1 btmp installer syslog.3.gz …… Linux系统下自动删除日志文件的方法 首先我们要查找到你要删除的N天生成日志文件,之后再通过Linux rm命令删除日志文件。 之前我们已经介绍过Linux如何根据文件日期删除文件的方法,所以我们现在只需要在该方法的基础上,实现如何自动删除就可以了。我们可通过Linux下的定时任务命令crontab来实现特定日期日志文件的自动删除。 实例:Linux 下自动删除5天前更改或生成的系统日志文件,参照下面的几个步骤, 1# 确定删除特定日期的日志文件的命令,可以使用下面的命令 find /var/log/ -mtime +5 -name message*… read more »

Linux 自动删除N小时或分钟前的文件

在前一篇文章我们介绍了如何在Linux系统下自动删除N天前的日志文件,那么本文将会讲述如何在Linux系统下自动删除N小时之前的特定文件或者日志文件。 在日常工作中,经常会有定时清空相关程序目录下特定时间前生成的日志文件的需求。当然实现的具体方法和上篇文章类似,但唯一不同的是find命令查找文件的依据的条件或者参数不同,-mtime是要查找n*24之前或者之内的相关文件,该参数无法实现小于24小时的特定时间的文件查找,当然find命令提供了另一个类似的参数-mmin, 该参数可以让find命令按指定的分钟来查找文件。 Linux下自动删除2小时之前的日志文件 将上篇文章的find 命令更新如下: find /var/log/ -mmin +120 -name message* -exec rm -rf {} \; 执行完上面的命令后,在/var/log/目录下所有的120分钟或者说2小时以前生成的或者更改过的以message开头的日志文件都会被删掉。 如果要删除两小时之内的日志文件,使用下面的命令: find /var/log/ -mmin -120 -name message* -exec rm -rf {} \; 将上面的find命令加到Linux系统的任务计划crontab里,即可实现自动定时删除文件。 99%的人还阅读了: 通过linux find命令删除查找到的文件 Linux… read more »

5种Linux下安全删除文件的软件工具(最新)

本文主要讲述Linux系统下5种不同的安全删除文件工具的用法介绍。 通常情况下,我们在Linux系统下删除文件的主要方法是通过rm命令或者unlink命令进行删除。 但是正如我们之前介绍过的rm命令删除文件的原理,该命令只是将文件所对应的inode链接删除,但是文件在磁盘存储的数据依然还在,这样就有可能造成数据的泄露。 下面我们会介绍5种Linux系统下永久安全的从磁盘中删除文件数据的工具。 Shred 删除工具 Wipe删除工具 Secure-delete删除文件工具 Sfill 删除工具 Sdmem 内存文件删除工具 Shred 删除工具 Shred工具主要是通过多次的覆盖文件的方式来达到安全删除文件的目的。 Shred 工具用法及选项 用法如下: Shred [选项]  文件名 选项如下: -f, –force           必要时修改权限以使目标可写 -n, –iterations=N    覆盖N 次,而非使用默认的3 次 –random-source=文件      从指定文件中取出随机字节 -s, –size=N          粉碎数据为指定字节的碎片(可使用K、M… read more »

Linux 下/bin/rm: Argument list too long 解决方法(最全)

本文将会通过不同方法来解决在Linux命令行下通过rm命令删除大批量文件的时候遇到的“Argument list too long”的问题。 因为linux命令对传入的参数个数有限制,所以超过限制的时候,系统就会输出参数过长的问题。 查看命令行参数允许的长度大小 执行命令如下: #getconf ARG_MAX 命令输出如下: [email protected]:~# getconf ARG_MAX 2097152 通过AWK命令结合RM命令来删除大批量文件 当通过rm命令直接删除大批量文件的时候,系统会报错,那么可以将rm命令结合AWK命令来进行删除操作,避免“/bin/rm: Argument list too long”的问题。 例如要删除当前目录下所有文件,执行下面命令: # ls -l |awk ‘{print “rm -rf” , $9}’| sh 命令输出如下: [email protected]:~/osetc# ls -l… read more »

Linux 快速删除百万级文件(rsync命令)

当我们想在linux下删除文件的时候,我们会想到通过rm命令来进行删除操作。 而当我们要删除的文件很多的时候,我们会遇到“/bin/rm: Argument list too long“的问题,上一篇文章我们已经介绍了通过find命令或者xargs命令或者自定义shell脚本的方法来避免这种错误。但是如果你想删除几十万或者上百万的文件的话,如果使用之前介绍的方法,效率会很低,删除所需要的时间也会很长。本文会介绍一种通过rsync命令来快速删除大批量文件的方法,并与之前的find命令结合rm命令删除文件的方法进行比较。 Find命令结合rm 命令删除文件 假如要删除当前目录下的上百万个文件(下面的例子以删除1000个文件做比较),执行下面的命令,并通过time命令来查看find /rm命令组合删除文件所需要的时间, 执行命令如下: #time find  ./ -name * –exec rm –rf {} \; 命令输出如下: [email protected]:~/osetc# time find  ./ -name “*.txt” -exec rm  {} \; real    0m0.543s user   … read more »

Sidebar