ciniao 发布的文章

基本概念

lftp是一个功能强大的命令行文件传输工具,支持多种协议,如 FTP、SFTP、HTTP 等。mirror命令是lftp中用于目录同步的一个重要命令。它可以递归地下载或上传整个目录结构,并且能够根据源目录和目标目录之间的差异,智能地增量更新文件。

命令语法

mirror 命令的基本语法形如:

mirror [options] [source] [destination]

source:指定要同步的源目录。例如,如果是从 FTP 服务器下载,这就是服务器上的目录路径;如果是上传,这就是本地要上传的目录路径。
destination:指定同步的目标目录。对于下载操作,这是本地文件系统的目录路径;对于上传操作,这是远程服务器上的目录路径。
options:有许多选项可以控制mirror命令的行为。例如:
-R:用于反转操作方向,通常用于上传。默认情况下,mirror是用于下载的,使用-R后,就会将本地目录上传到远程服务器,将源目录作为本地目录,目标目录作为远程目录。
-c:这个选项用于继续被中断的传输。如果在同步过程中由于网络问题或其他原因导致传输中断,使用-c选项可以从中断的地方继续进行传输,而不是重新开始整个同步过程。
-n:这个选项用于进行模拟运行。当使用-n时,mirror命令不会实际传输文件,而是会显示将要进行的操作,包括哪些文件将被下载或上传、目录结构如何创建等信息,这对于在执行实际同步操作之前检查命令的正确性非常有用。
--delete:这个选项用于删除目标目录中在源目录中不存在的文件和目录。例如,在同步两个目录时,如果源目录中的某个文件被删除了,使用--delete选项可以确保目标目录中的相应文件也被删除,从而保持两个目录的严格同步。

- 阅读剩余部分 -

是否开启了慢查询记录

选择某一数据库,执行db.getProfilingStatus(),可得到如下结果:

was=1表示开启了慢查询记录,0表示未开启
showms表示记录超过多少ms的数据库操作

开启记录慢查询

只开启某一个数据库,选中某一数据库后,shell里执行db.setProfilingLevel(1,200),其中,参数1表示记录的级别,参数2表示记录大于多少ms的操作

0:关闭,不收集任何数据。
1:收集慢查询数据,默认是100毫秒。
2:收集所有数据

默认情况下,开启的profile表只有1M储存空间,可通过下面命令调整到100M

- 阅读剩余部分 -

查看磁盘占用状态

df -lh

查看某目录下文件和文件夹大小情况

cd /data
du --max-depth=1

查看进程情况

ps -ef | grep mongo

查看文件内容

cat aa.txt

#对于大文件或者需要及时查看的,也可以用
tail -f /var/log/cron

- 阅读剩余部分 -

基于指定函数或指定文件侵入式分析

cProfile:基于lsprof的用C语言实现的扩展应用,运行开销比较合理,适合分析运行时间较长的程序,推荐使用这个模块;

使用cProfile进行性能分析,你可以在Python脚本中实现,也可以使用命令行执行:

if __name__ == "__main__":
    import cProfile
    # 直接把分析结果打印到控制台
    cProfile.run("test()")
    # 把分析结果保存到文件中
    cProfile.run("test()", filename="result.out")
    # 增加排序方式
    cProfile.run("test()", filename="result.out", sort="cumulative")

使用命令行运行的方法基本一致,Bash代码如下:

# 直接把分析结果打印到控制台
python -m cProfile test.py
# 把分析结果保存到文件中
python -m cProfile -o result.out test.py
# 增加排序方式
python -m cProfile -o result.out -s cumulative test.py

也可直接对代码段进行分析:

import cProfile, pstats, StringIO
pr = cProfile.Profile()
pr.enable()
#需要调试的代码段
pr.disable()
s = StringIO.StringIO()
ps = pstats.Stats(pr, stream=s).sort_stats('cumulative')
ps.print_stats()
print s.getvalue()

#或

from cProfile import Profile
def runRe():
    import re
    re.compile("aaa|bbb")
prof = Profile()
prof.enable()
runRe()
prof.create_stats()
prof.print_stats()

- 阅读剩余部分 -

很多时候,大家可能只是依靠 console.log 来调试 JavaScript 代码,这样做的局限性不言而喻,掌握工具的使用方法可以极大提高解决问题的效率。尽管 JavaScript 以难以 Debug 著称,如果你知道一些技巧可以让你更快地搞定它。

debugger;

除了console.log之外,debugger;是我最喜欢的快速 debug 的工具。一旦在代码中加入了这行语句,Chrome 在执行的时候会自动在该行停下来。你甚至可以和条件语句配合使用,仅仅在你需要它的时候开启。

if (thisThing) {
    debugger;
}

将对象以表格的形式展示

有时候,你需要查看一个复杂的对象元素。通常,我们都会使用console.log将其打印出来然后查看。其实,你还可以使用console.table,让对象更加美观地呈现出来。

var animals = [
    { animal: "Horse", name: "Henry", age: 43 },
    { animal: "Dog", name: "Fred", age: 13 },
    { animal: "Cat", name: "Frodo", age: 18 }
];
console.table(animals);

输出样式:

- 阅读剩余部分 -