Linux下搜索查找命令

搜索查找命令

which - 显示命令的完整路径

说明:
查找命令的路径

locate - 根据用户权限索引和搜索系统中的所有文件

说明:
updatedb用于更新索引数据库

find - 查找一个目录下的文件

说明:

通过名称搜索

find -name “query”

忽略大小写搜索

find -iname “query”

查找不包含的搜索

find -not -name “query”
find ! -name “query”

通过类型搜索

find -type type_descriptor query
f: regular file
d: directory
I: symbolic link
c: character devices
b: block devices

find / -type c
find / -type f -name “*.conf”

通过时间和大小过滤

c: bytes
k: Kilobytes
M: Megabytes
G: Gigabytes
b: 512-byte blocks

find / -size 50c
find / -size -50c
find / -size +700M

Access Time: 上一次读写时间
Modification Time: 上一次文件内容修改的时间
Change Time: 上一次节点元数据修改时间

find / -mtime 1
find / -atime -1
find / -ctime +3

参考

Git checkout指定tag的代码

有时候,想要拉取特定标签的代码,比如说1.0.0标签名的代码?

clone

1
$ git clone

先使用git clone克隆这个代码仓库。

checkout

1
2
$ git tag -l
$ git checkout tags/<tag_name>

克隆完代码仓库后,通过检出特定标签的代码。

创建分支

1
$ git checkout tags/<tag_name> -b <branch_name>

更好的方法,检出代码后创建一个新的分支,否则你将会在一个用标签版本号命名的分支上。

参考

Download a specific tag with Git

电动自行车购买不完全指南

年初的时候,也就是刚过完年,准备弄个电动自行车(后续简称为电动车),方便平时的生活,主要是周末进行买菜以及附近的办事。
购买之后,使用了将近2个多月的时间,心得体会是,生活的半径确实扩大了,有一些地铁和公交不方便达到的地方,有时候想去也会去看看了。虽然电动车的行程没有汽车的覆盖范围广,但是两者的功能职责是不同的,汽车的购买也在计划中了。

这里就列举下购买电动车的一些心得:

定位

这里的定位,主要是你想购买的电动车的用途、重量、续航。

所谓的用途,有点类似你的目标,你想要电动车做什么事。比如说上下班通勤、周末买菜、运送小件货物等等。

重量和续航,会影响到后续的使用,锂电池和铅酸电池的电动车重量不一样,另外,不同的车架重量也不一样。

续航,影响到日常的使用,通常充满电在50公里的行程比较多,也有60~80公里的行程,更多的是100公里。超长续航的比较少,代价是更重的电池和价格。

购买之前,先想清楚,购买电动车的定位,方便下一步筛选。

预算

根据第一步所想得定位,可初步筛选出相应功能的电动车品牌所对应的车型,这一步,就要确定一下购买的预算。

车架不同,价格有大概1K左右的预算,简单车架的电动车一般在2k左右,完整车架的电动车一般在3~4k左右(简单车架和完整车架为我自己创的,方便描述)

确定了预算之后,就可以进一步排除筛选的范围,直到确定想买的车型。

选车

确定了定位和预算之后,这一步就要从众多的电动车品牌中选一出一款自己喜欢的车子。每个人的诉求不同,性价比、颜值、续航、重量、品牌粉、广告代言明星粉(胡歌^_^)等等

这里罗列一下国内主要的电动车品牌,供参考:

  • 小牛
  • 雅迪
  • 绿源
  • 爱玛
  • 新日
  • 立马
  • 台铃
  • 绿佳
  • 比德文
  • 小刀
  • 小鸟

讲一下我购买前关注的比较多的品牌情况,小牛、雅迪、绿源、爱玛。

1、小牛
主要生产锂电池电动车,外形比较酷,续航很不错,稍微高端一点的车型还配有app监控服务,另外还提供保险。缺点是价格偏高,价位在4500以上依车型而定。
本来是很中意小牛的,最终没有买,一来是价格偏高,二来是担心被盗心疼。

2、雅迪
算是国内电动车的第一品牌,有铅酸电池和锂电池的电动车可供选择,续航和售后还不错,价格属于中上,配套服务没有小牛的好,目前雅迪应该是走偏高端的路线。
我最终购买了雅迪的铅酸电池的一款车,买的是60V的电池,续航还不错,在60~80公里的样子,主要是我老婆看中了车子的颜值。

3、绿源
车子的外观和雅迪相似,功能上也和雅迪相近,价格比雅迪偏低一点,也是一个不错的选择,性能上没有测试过。

4、爱玛
爱玛是从自行车出身的,因此车架上会更偏向自行车一些,走得偏低端的路线。

以上这些情况,供大家参考,实际购买的时候,需要找几家门店去看看实际的车子,包括看外观、试骑等等。

使用

说说购买电动车之后的使用情况,主要是平时周末的时候买菜和出去周边游玩。

  • 载人和物
    可以带一个人,可以带超市购买的物品完全没有问题,只是不是大件。曾经带过最大的一件物品是,从宜家拖了一个花架,大概有1.7米的高度。

  • 续航
    平时走的公里,坡度普遍不高的情况,一般充满电,可使用70公里以上。就平时周末使用,一周充一次电的频率。

  • 重量
    这里不得不吐槽,购买的铅酸电池及完整车架的电动车,重量太重了,上下楼很费劲,平时推一下挪一下都要费力。如果是在意车子重量的,建议买锂电池的车。

以上所有内容为购买过程中的心得体会,有不足的地方,欢迎提问或者讨论

通过css实现锚点跳转后的位置调整

设计导航菜单的过程中,有时候会涉及到二级子菜单,外部的或者是内部页面页面的跳转,这个时候,锚点可能会派上场。

其中使用锚点进行页面的各部分内容跳转,有时候页面的导航栏是使用固定定位(fixed)的布局,可能会导致标题遮挡部分跳转后的内容,因此,需要对锚点调整后的位置进行偏移。

方法

通过使用css实现锚点跳转后的位置调整:

定义一个class:

1
2
3
4
.named-target {
padding-top: 50px;
margin-top: -50px;
}

将这个class赋给锚点或者锚点后的元素即可。

原理

字面上的原理可以理解为元素外边距向上移动了50像素,使用上内边距给抵消了。
内在的原理,我还没理解,待理解了再更新。

css弹性盒简介之一

css布局经历了使用table和float布局的过程,W3C推出了flexbox的布局方式。

Flexbox基础

flex container

使用div或者其他标签作为容器,用于放置其他子元素。

flex items

嵌套在容器中的直接元素自动转为flex item,子元素的子元素便不是flex item。

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- html part -->
<div class="container">
<div>A flex item</div>
<div>Another flex item</div>
<div>A third flex item</div>
</div>

/* css part */
.container {
display: -webkit-flex;
display: flex;
}

.container div {
-webkit-flex: 1;
flex: 1;
}

i18next的jquery插件jquery-i18next的使用方法

前提条件

使用jquery-i18next插件前,需要jquery和i18next的支持。

安装

jquery-i18next支持npm和bower安装

1
2
3
4
5
# npm package
$ npm install jquery-i18next

# bower
$ bower install jquery-i18next

使用入门

在html代码中插入data-i18n的属性

1
2
3
4
5
<ul class="nav">
<li><a href="#" data-i18n="nav.home"></a></li>
<li><a href="#" data-i18n="nav.page1"></a></li>
<li><a href="#" data-i18n="nav.page2"></a></li>
</ul>

定义翻译文件

可在源码路径下创建locales/en/translation.json文件

1
2
3
4
5
6
7
{
"nav": {
"home": "Home",
"page1": "Page One",
"page2": "Page Two"
}
}

通过Javascript代码进行初始化和翻译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 其中i18nextInstance是i18next的实例,最后一个参数是配置项

jqueryI18next.init(i18nextInstance, $, {
tName: 't', // --> appends $.t = i18next.t
i18nName: 'i18n', // --> appends $.i18n = i18next
handleName: 'localize', // --> appends $(selector).localize(opts);
selectorAttr: 'data-i18n', // selector for translating elements
targetAttr: 'i18n-target', // data-() attribute to grab target element to translate (if diffrent then itself)
optionsAttr: 'i18n-options', // data-() attribute that contains options, will load/set if useOptionsAttr = true
useOptionsAttr: false, // see optionsAttr
parseDefaultValueFromContent: true // parses default values from content ele.val or ele.text
});

$(".nav").localize();

最终展现在网页中的结果

1
2
3
4
5
// <ul class="nav">
// <li><a href="#" data-i18n="nav.home">Home</a></li>
// <li><a href="#" data-i18n="nav.page1">Page One</a></li>
// <li><a href="#" data-i18n="nav.page2">Page Two</a></li>
// </ul>

使用进阶

通过jQuery的选择器来实现不同的翻译

翻译一个元素

1
2
<a id="btn1" href="#" data-i18n="myKey"></a>
$("#btn1").localize(options);

翻译一个元素的子元素

1
2
3
4
5
6
<ul class="nav">
<li><a href="#" data-i18n="nav.home"></a></li>
<li><a href="#" data-i18n="nav.page1"></a></li>
<li><a href="#" data-i18n="nav.page2"></a></li>
</ul>
$(".nav").localize();

翻译一些内部元素

1
2
3
4
<div class="outer" data-i18n="ns:key" data-i18n-target=".inner">
<input class="inner" type="text"></input>
</div>
$(".outer").localize();

设置不同属性的翻译

比如,想要设置某个元素的title属性的多语言,可使用这种方式;或者其他提示信息等。

1
2
<a id="btn1" href="#" data-i18n="[title]key.for.title"></a>
$("#btn1").localize();

设置多个属性

和设置单个属性类似,不过通过分号进行分隔,添加多个属性。

1
2
<a id="btn1" href="#" data-i18n="[title]key.for.title;myNamespace:key.for.text"></a>
$("#btn1").localize();

设置内部html的属性

1
2
<a id="btn1" href="#" data-i18n="[html]key.for.title"></a>
$("#btn1").localize();

添加前置内容

给一个元素原有内容前插入一些翻译文字

1
2
<a id="btn1" href="#" data-i18n="[prepend]key.for.title">insert before me, please!</a>
$("#btn1").localize();

添加后置内容

给一个元素原有内容后追加一些翻译文字

1
2
<a id="btn1" href="#" data-i18n="[append]key.for.title">append after me, please!</a>
$("#btn1").localize();

设置数据

1
2
<a id="btn1" href="#" data-i18n="[data-someDataAttribute]key.for.content"></a>
$("#btn1").localize();

参考

Linux学习-基础知识部分

这里罗列一些关于学习Linux的基础准备工作,来自《鸟哥的私房菜》,近期准备重新刷一遍,巩固一下Linux的知识和操作。

计算机概论与硬件相关知识

了解计算机的概论,包括一些基本理论知识;以及计算机相关的硬件知识,包括计算机的组成。

Linux的安装和命令

选择一款Linux的发行版并尝试安装。

Linux操作系统的基础技能

了解用户、用户组、权限、程序等概念。

务必学会vi编辑器

所有Unix Like的系统均安装了vi编辑器,平时操作修改配置文件都可能使用到。

Shell和Shell脚本的学习

玩命令行必须要经历的一步,主要包括“正则表达式”、“管道命令”与“数据流重定向”。

软件管理

玩Linux的时候,免不了要自己安装驱动程序或者额外的软件,Tarball/rpm/dpkg等软件包管理工具的使用就很重要了。

网络基础

“IP”、“路由”等概念需要了解,以及再进一步的TCP/IP协议。

参考

[鸟哥的私房菜]
计算机基础
网络基础

程序员养生和每日饮食习惯

作为程序员,刚开始工作的几年的,不太注意饮食习惯,有一餐没一餐或者不定时的饮食习惯,会导致胃消化能力变差,甚至得慢性胃炎。

慢慢的,发现胃难受,开始关注养胃,早知道一开始就注意饮食习惯,这里就是给后续的程序员做一些程序员的饮食习惯的参考。

你和我一样,要开始注重养生和饮食了!!!

大原则

影响健康的几点因素

心态,饮食,健身,睡眠,金钱

饮食要点:

这是盛传的一句话,适合要养胃的朋友们:

早吃好,午吃饱,晚吃少。

总体好消化; 早晚餐量少、有营养,午餐吃饱量稍多些。

整体的每顿尽量不要超过7分饱。

日常三餐

以下是我列举的饮食选择,作为平日里每顿饮食的选项。

早餐: 红枣大米粥、鸡蛋。(可选: 玉米、面包、紫薯、燕麦、黑芝麻糊、小米粥、小份水果、牛奶)

午餐: 肉类(猪肉、鸡肉、鱼肉、鸭肉、羊肉、牛肉)、蔬菜(各类蔬菜)、米饭(可选: 面条)

晚餐: 红枣大米粥、肉类或者蔬菜(可选:面条,馄饨,水饺)

水果和零食

除了一日三餐的正常饮食之外,需要一些水果和坚果零食来进行相应的补充。

水果可补充我们所需要的维生素,坚果可补充一些微量元素。

早睡早起

也许上大学和刚毕业的时候,觉得年轻无极限,通宵加班神马的都无所谓,可这是在透支身体,时间会慢慢让你认识到的。

因此,早点养成早睡早起的习惯,对你的身体会更有益。

我现在开始养成晚上11点前后入睡,早睡在7点前后醒来,中午可能会午睡半个小时,一天的精力感觉比较充沛。

结语

愿大家开始注重养生,拥有健康!

-2017.03.16初稿

百度地图获取可视区域及回调事件的用法简介

记录使用百度地图获取可视区域、回调事件的用法。

可视区域

使用百度地图获取可视区域的坐标点的方法:

原理:通过地图状态方法的接口getBounds()可获取到Bounds对象,包含东北和西南角的坐标点。

1
2
3
4
5
6
7
8
9
10
11
12
13
// 获取地图可视化区域的坐标点
function getViewAreaPoint(map) {
var bounds = map.getBounds();
console.log(bounds);
var swPoint = bounds.getSouthWest();
var nePoint = bounds.getNorthEast();
var nwPoint = new BMap.Point(swPoint.lng, nePoint.lat);
var sePoint = new BMap.Point(nePoint.lng, swPoint.lat);
console.log(swPoint);
console.log(nePoint);
console.log(nwPoint);
console.log(sePoint);
}

事件监听

原理:定义事件回调函数,添加事件的监听。

以click事件为例:

1
2
3
4
5
6
7
8
9
10
11
map.addEventListener("click", showInfo);

function showInfo(e) {
console.debug(e);
console.debug(e.type);
console.debug(e.target);
console.debug(e.point);
console.debug(e.pixel);
console.debug(e.overlay);
// console.debug(e.point.lng + ", " + e.point.lat);
}

百度地图的JavaScript类参考中列举click事件的说明:
事件: click
参数:(type, target, point, pixel, overlay)
描述:左键单击地图时触发此事件。

参数的说明:
type: 事件类型(“onclick”)
target: 地图实例
point: 经纬度坐标点Point对象
pixel: 像素坐标
overlay: 覆盖物对象

【以上】

disable超链接的css样式

想要设置disabled的超链接,让用户不可点击,可添加一个class来设置。

1
2
3
4
5
6
7
.disabled-link {
pointer-events: none;
cursor: default;
opacity: 0.6;
}

<a href="#" class="disabled-link">link</a>

注意:
pointer-events这个属性对浏览器兼容性有一定的要求。

IE11
Edge 14
Firefox 51
Chrome 49
Safari 10
Opera 43

【以上】