systemd script, systemd unit, 启动脚本

systemd script, systemd unit, 启动脚本 service unit 配置文件 template vim /etc/systemd/system/foo.service [Unit] Description=start proxy After=network.target [Service] Type=oneshot ExecStart=/usr/local/bin/proxy.sh RemainAfterExit=true [Install] WantedBy=multi-user.target [Unit] # 服务启动时会在 journal 里打印 description0 Description=description0 After=network.target sshd-keygen.service [Service] # 脚本路径必须是绝对路径 /bin/sh 为 shell 解释器不能省 ExecStart=/bin/sh /usr/local/bin/shell-script0.sh Environment="GODEBUG='gctrace=1'" Environment="ANOTHER_SECRET=JP8YLOc2bsNlrGuD6LVTq7L36obpjzxd" [Install] WantedBy=multi-user.target # 在哪个服务后面启动 (如依赖的服务) Requires=pulseaudio.service # 在哪个服务后面启动 (如依赖的服务) After=pulseaudio.service [Unit] 启动顺序与依赖关系 After 字段: 表示如果 network.target 或 sshd-keygen.service 需要启动, 那么 foo.service 应该在它们之后启动。 相应地,还有一个 Before 字段, 定义 foo.service 应该在哪些服务之前启动。 注意, After 和 Before 字段只涉及启动顺序,不涉及依赖关系。 ConditionPathExists, AssertPathExists: 要求给定的绝对路径文件已经存在,否则不做任何事(condition)或进入failed状态(assert),可在路径前使用!表示条件取反,即不存在时才启动服务。 ConditionPathIsDirectory, AssertPathIsDirectory: 如上,路径存在且是目录时启动。 StartLimitIntervalSec=400 StartLimitBurst=3 [Service] 区块 用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。它的主要字段如下 Type:定义启动时的进程行为。它有以下几种值。 Type=simple:默认值,执行ExecStart指定的命令,启动主进程 Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出 Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行 Type=dbus:当前服务通过D-Bus启动 Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行 Type=idle:若有其他任务执行完毕,当前服务才会运行 ExecStart:服务启动时要执行的命令 ExecStartPre:启动当前服务之前执行的命令 ExecStartPost:启动当前服务之后执行的命令 ExecReload:重启当前服务时执行的命令 ExecStop:停止当前服务时执行的命令 ExecStopPost:停止当其服务之后执行的命令 RestartSec:自动重启当前服务间隔的秒数 Restart:定义何种情况 Systemd 会自动重启当前服务,no, on-success, on-failure, on-abnormal, on-watchdog, on-abort, or always, 默认值: no TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数 Environment:指定环境变量 EnvironmentFile: 指定文件,可定义多个环境变量,按分行方式存储。 WorkingDirectory, 工作目录, 程序启动时的当前目录。如果使用到 workingdirectory,需要先创建该目录 [Install] 段落相关的指令,它们只在systemctl enable/disable操作时有效。如果期望服务开机自启动,一般只配置一个WantedBy指令,如果不期望服务开机自启动,则Install段落通常省略。主要包含以下内容: WantedBy 本服务设置开机自启动时,在被依赖目标的.wants目录下创建本服务的软链接。例如WantedBy = multi-user.target时,将在/etc/systemd/multi-user.target.wants目录下创建本服务的软链接。 RequiredBy 类似WantedBy,但是是在.requires目录下创建软链接。 Alias 指定创建软链接时链接至本服务配置文件的别名文件。例如reboot.target中配置了Alias=ctrl-alt-del.target,当执行enable时,将创建/etc/systemd/system/ctrl-alt-del.service软链接并指向reboot.target。 DefaultInstance 当是一个模板服务配置文件时(即文件名为Service_Name@.service),该指令指定该模板的默认实例。例如trojan@.service中配置了DefaultInstall=server时,systemctl enable trojan@.service时将创建名为trojan@server.service的软链接。 可以通过以下两个选项来设置服务启动的频率: ...

2018-02-23 · 5 min · 937 words · -

time command

time command 执行命令并计时 【格式】time [-p] command [arguments…] 【说明】 执行命令行"command [arguments…]",命令行执行结束时在标准输出中打印执行该命令行的时间统计结果,其统计结果包含以下数据: 1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间; 2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和; 3)系统CPU时间(system CPU time): 命令执行完成花费的系统CPU时间,即命令在核心态中执行时间总和。 其中,用户CPU时间和系统CPU时间之和为CPU时间,即命令占用CPU执行的时间总和。实际时间要大于CPU时间,因为Linux是多任务操作系统,往往在执行一条命令时,系统还要处理其它任务。 另一个需要注意的问题是即使每次执行相同命令,但所花费的时间也是不一样,其花费时间是与系统运行相关的。 例1: # time date Sun Mar 26 22:45:34 GMT-8 2006 real 0m0.136s user 0m0.010s sys 0m0.070s 在例1中,执行命令"time date"(见第1行)。系统先执行命令"date",第2行为命令"date"的执行结果。第3-6行为执行命令"date"的时间统计结果,其中第4行"real"为实际时间,第5行"user"为用户CPU时间,第6行"sys"为系统CPU时间。以上三种时间的显示格式均为MMmNN[.FFF]s。 在例1中,CPU时间 = 用户CPU时间 + 系统CPU时间 = 0m0.010s + 0m0.070s = 0m0.080s,实际时间大于CPU时间,说明在date命令运行的同时,还有其它任务在运行。 【参数说明】 -p 以POSIX缺省的时间格式打印时间统计结果,单位为秒。详细的输出格式见例2。 例2: # time -p date Wed Mar 27 00:33:11 GMT-8 2006 real 0.11 user 0.00 sys 0.02 在例2中,同样执行命令"time date"(见第1行)。系统先执行命令 “date”,第2行为该命令的执行结果。第3-5行为执行命令"date"的时间统计结果。注意本例的时间格式与例1中的时间格式差别,使用-p 参数后的时间显示格式为NN.FF,其单位为秒。 ...

2018-02-13 · 1 min · 197 words · -

ssh config, sshd config

ssh config, sshd config ssh config public key, authorized_keys vim ~/.ssh/authorized_keys ~/.ssh/config https://linux.die.net/man/5/ssh_config https://www.openssh.com/legacy.html Host foo Hostname remote.server.com IdentityFile ~/.ssh/id_rsa.github IdentitiesOnly yes port 22 host 这一项 ssh config 的别名, 在命令行里可以直接 ssh foo hostname 远程主机的主机名或 ip IdentityFile 私钥路径 IdentitiesOnly, yes: ssh 连接时只使用 IdentityFile 配置的私钥, 忽略 ssh agent 提供的私钥 KexAlgorithms, the key exchange methods that are used to generate per-connection keys The IdentitiesOnly yes is required to prevent the SSH default behavior of sending the identity file matching the default filename for each protocol. If you have a file named ~/.ssh/id_rsa that will get tried BEFORE your ~/.ssh/id_rsa.github without this option. ...

2018-02-11 · 3 min · 466 words · -

内核态, 用户态

内核态, 用户态 用户态 Ring3运行于用户态的代码则要受到处理器的诸多检查,它们只能访问映射其地址空间的页表项中规定的在用户态下可访问页面的虚拟地址,且只能对任务状态段 (TSS) 中I/O许可位图 (I/O Permission Bitmap) 中规定的可访问端口进行直接访问。 内核态 Ring0 在处理器的存储保护中, 核心态 ,或者特权态 (与之相对应的是用户态) ,是操作系统内核所运行的模式。运行在该模式的代码,可以无限制地对系统存储、外部设备进行访问。 内核态和用户态 核心态和用户态是操作系统两种运行级别。 核心态就是拥有资源较多的状态,或者说访问资源多的状态,也称之为特权态;相对来说,用户态就是非特权态,访问资源将受到限制。 核心态下CPU可执行任何指令,而用户态下CPU只能执行非特权指令。当CPU处于核心态时可随意进入用户态;而处于用户态时,切换到核心态只有在系统调用和中断时才能发生。一般程序一开始都是运行与用户态,当程序需要系统资源时,就必须通过中断进入核心态。 用户态切换到内核态的3种方式 系统调用 这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如fork()实际上就是执行了一个创建新进程的系统调用。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。 异常 当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。 外围设备的中断 当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。 这3种方式是系统在运行时由用户态转到内核态的最主要方式,其中系统调用可以认为是用户进程主动发起的,异常和外围设备中断则是被动的。 核心态和用户态各有优势: 运行在核心态的程序可访问的资源多,但可靠性、安全性要求高,维护管理比较复杂。一个程序运行在哪取决于其对资源和效率的需求。 用户栈和内核栈 内核在创建进程的时候, 会为进程创建对应的堆栈. 每个进程有两个栈, 一个用户栈, 存在于用户空间; 一个内核栈,存在于内核空间。当进程运行在用户态时,CPU堆栈指针寄存器里的内容是用户堆栈地址,使用用户栈;在核心态时, 同理。 当进程因为中断或系统调用而进入内核态时,进程所使用的堆栈也要有用户栈转到内核栈。进程陷入内核态后,先把用户堆栈的地址保存到内核栈之中,然后设置堆栈指针寄存器的内容为内核栈的地址;当恢复到用户态时,把内核栈中保存的用户栈的地址恢复到堆栈指针寄存器即可。 进程从用户态转到内核态时,进程的内核栈总是空的,所以进程陷入内核的时候,直接把栈顶地址给堆栈指针寄存器即可。 http://www.cnblogs.com/balingybj/p/4783119.html http://www.cnblogs.com/Allen-rg/p/7171105.html http://blog.csdn.net/xifeijian/article/details/9080895 https://www.zhihu.com/question/40147261 https://www.jianshu.com/p/255c6c7603d0 https://zhuanlan.zhihu.com/p/279354447

2018-01-19 · 1 min · 48 words · -

linux shell ctrl – s

linux shell ctrl – s ctrl+c 结束正在运行的程序【ping、telnet等】 ctrl+d 结束输入或退出shell ctrl+s 暂停屏幕输出 ctrl+q 恢复屏幕输出 ctrl+l 清屏,【是字母L的小写】等同于Clear http://www.tsingpost.com/articles/201405/828.html http://blog.csdn.net/absurd/article/details/593881

2017-12-14 · 1 min · 17 words · -

journal, journalctl, syslog

journal, journalctl, syslog # -u 指定 unit journalctl -u file-server 清理磁盘空间 # Check current disk usage of journal files sudo journalctl --disk-usage # Delete journal logs older than 5 days: sudo journalctl --vacuum-time=5days # Delete log files until the disk space taken falls below 200M: sudo journalctl --vacuum-size=200M # Delete old logs and limit file number to 10: sudo journalctl --vacuum-files=10 Arch Linux 启用 systemd 后, 很多服务都被替换掉了, 当然 syslog 也不例外, 被 Systemd Journal 所替代。 ...

2017-11-24 · 2 min · 255 words · -

prototype

prototype 基于原型编程是面向对象编程的一种方式, 原型编程里没有 class 的概念, 直接使用对象, 又叫基于实例的编程. 基于类的编程中, 类定义了对象的基本布局和函数特性, 接口是可以使用的对象, 它基于特定类样式. 类表现为行为和结构的集合, 对接口来说这些类的行为和结构是想同的. 区分的规则是基于行为和结构之后才是状态.

2017-11-13 · 1 min · 14 words · -

swap

swap archlinux 禁用 swap 禁用 zram swap systemctl list-units --type=swap sudo systemctl mask dev-zram0.swap reboot 查看 swap 使用情况 # 没有输出的话就是没有启用 swap swapon --show swapon free -m cat /proc/swaps vmstat 1 5 NAME TYPE SIZE USED PRIO /dev/vda2 partition 1.9G 1.5G -1 # PRIO, Priority # /dev/vda2 是安装操作系统时划分的磁盘分区, 也可以使用文件来做为交换分区 # 启用 swap 分区 swapon /dev/vda2 # 如果是文件则 swapon /swap-file swapoff /swap-file # -s, --summary swapon -s|column -t # add swap to /etc/fstab, 启动之后自动挂载 swap 分区 # /dev/sda2, swap分区 UUID=ed325732-b768-4680-a4ff-24dd0da24509 none swap defaults 0 0 # swap 文件的配置 /swap-file none swap defaults 0 0 # 关闭swap交换分区 swapoff /dev/vda2 swapoff -a priority swap 分区的优先级 (priority)有啥用? 在使用多个swap分区或者文件的时候,还有一个优先级的概念 (Priority)。 ...

2017-10-13 · 2 min · 314 words · -

shell下批量替换文件名中的空格

shell下批量替换文件名中的空格 http://blog.csdn.net/dliyuedong/article/details/14229121 rename 's/ /_/g' * rename 's/\(/_/g' *

2017-09-22 · 1 min · 9 words · -

cron, anacron

cron, anacron anacron 用于以天为单位的频率运行命令。它的工作与 cron 稍有不同,它假设机器不会一直开机。 anacron 如何在 Linux 工作 anacron 任务被列在 /etc/anacrontab 中,任务可以使用下面的格式 (anacron 文件中的注释必须以 # 号开始) 安排。 https://linux.cn/article-8590-1.html 在本篇中,我们会解释 cron 和 anacron,并向你展示如何在 Linux 中设置 anacron。我们也会比较这两个工具。 要在一个给定时间或者稍后安排一个任务,你可以使用 at 或者 batch 命令,要使命令能够重复运行,你可以使用 cron 以及 anacron 工具。 cron - 是一个用于运行计划任务如系统备份、更新等的守护进程。它适合在那些 24X7 不间断运行的机器如服务器上运行的计划任务。 命令/脚本被写在 cron 任务脚本中,它是在 crontab 文件中被安排的。系统默认的 crontab 文件是 /etc/crontab,但是每个用户也可以创建自己的 crontab 文件来在特定时间运行用户定义的命令。 要创建一份个人 crontab 文件,只要输入: $ crontab -e 如何在 Linux 中设置 anacron anacron 用于以天为单位的频率运行命令。它的工作与 cron 稍有不同,它假设机器不会一直开机。 cron 也适合在那些不会 24X7 运行如笔记本以及桌面电脑的机器上运行每日、每周以及每月的计划任务 (LCTT 译注: 不适合按小时、分钟执行任务) 。 ...

2017-09-02 · 2 min · 279 words · -

清空文件

清空文件 在处理服务器磁盘占用时, 比如有比较大的日志文件, 服务还在运行, 所以文件是不能删的, 又因为文件太大了不适合用文本编辑器打开, 比如 vi 之类, 想清空文件就要用以下方法了. BTW: 删除一个正在使用的文件是另外一个问题… wiloon.com/deleteonwrite truncate truncate -s 0 foo.log truncate 可被用来将一个文件缩小或者扩展到某个给定的大小。 你可以利用它和 -s 参数来特别指定文件的大小。要清空文件的内容, 则在下面的命令中将文件的大小设定为 0 本命令缩减或扩充指定文件的大小为指定值。 参数所指定的文件如果不存在, 那么该命令会创建这个文件。 如果一个文件的大小比参数指定的大, 那么超出的部分就会被丢弃。 如果一个文件比参数指定的小, 那么文件会被扩充, 并且被扩充的部分 (空洞) 在被读取的时候是字节0。 truncate 函数使用前不需要使用 open 函数打开文件 命令格式 truncate 选项 文件列表 命令详解: 对于长选项来说必须的参数, 对于短选项来说也是必须的。 -c, --no-create 不创建任何文件 -o, --io-blocks 把参数指定的大小视为 I/O 块,而不是视为字节 -r, --reference=FILE 使用文件 FILE 的大小作为参考大小 -s, --size=SIZE 使用 SIZE 指定文件的大小 --help display this help and exit 显示这个帮助信息 --version 输出版本信息,然后退出 SIZE 参数可以是 (或者是一个整数后面跟着任意的) 下面的选项: KB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y. SIZE 之前也可以加上下面的特性: '+' 增加 SIZE, '-' 减少 SIZE, '<'最大为 SIZE, '>'最小为 SIZE, '/'以SIZE为除数,向下取整, '%'以SIZE为除数,向上取整。 注意: -r 和 -s 选项是互斥的。 示例 truncate -c --size 2000m x.dbf # 源文件 test.db 和目标文件 test.db.bak ll -th /root/test.db -rw-r--r--. 1 root root 12G May 24 01:26 /root/test.db [root@my1-222 ~]# ll -th /root/test.db.bak -rw-r--r--. 1 root root 0 May 24 17:51 /root/test.db.bak [root@my1-222 ~]# # 利用truncate瞬间制造大小相同的文件 [root@my1-222 ~]# truncate -r test.db test.db.bak [root@my1-222 ~]# ll -th /root/test.db.bak -rw-r--r--. 1 root root 12G May 24 17:56 /root/test.db.bak [root@my1-222 ~]# [root@my1-222 ~]# truncate --size 10G test.db.bak [root@my1-222 ~]# ll -th /root/test.db.bak -rw-r--r--. 1 root root 10G May 24 18:01 /root/test.db.bak 文件清空之后的 inode 问题 在文件的写入操作比较繁忙的时候会观察到 清空 文件 之后 用 stat 命令查看 inode信息时, 能看到 文件 长度为0 ,但是过几秒再查看时,文件 长度又变成了清空前的长度,但是 df 命令能看到磁盘空间的确被释放了 ...

2017-09-01 · 3 min · 431 words · -

fstab

fstab 格式 <file system> <dir> <type> <options> <dump> <pass> 示例 UUID=48ab4d71-5bb2-4bc4-bf32-dc357020ae27 /data ext4 defaults 0 0 UUID=b256c0bb-9000-456b-b9eb-18239b5df5ddswap none swap defaults 0 0 UUID=E854-F511 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2 # 支持TRIM 的ssd 启用trim, 在参数里加discard, 使用discard受系统和硬件限制, 大多数系统建议后台服务定时discard, 如: fstrim.timer /dev/sdb1 /data1 ext4 defaults,noatime,discard 0 0 https://wiki.archlinux.org/index.php/Fstab_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87 <options> 挂载时使用的参数,注意有些 参数是特定文件系统才有的。 defaults - 使用文件系统的默认挂载参数,例如 ext4 的默认参数为:rw, suid, dev, exec, auto, nouser, async. rw - 以读写模式挂载文件系统。 relatime - 实时更新 inode access 记录。只有在记录中的访问时间早于当前访问才会被更新。 (与 noatime 相似,但不会打断如 mutt 或其它程序探测文件在上次访问后是否被修改的进程。),可以提升性能(参见 atime 参数)。 fmask - 设置文件的权限过滤, dmask和fmask是mount的选项,针对fat/ntfs文件系统,适用于fstab配置, 通过设置 fmask, dmask, uid, gid参数可以控制文件目录的默认权限以及所属用户和组。 dmask —— 设置目录的权限过滤 iocharset codepage Sets the codepage for converting to shortname characters on FAT and VFAT filesystems. By default, codepage 437 is used. 源自 MS-DOS 或者 Windows 的文件系统 (例如:vfat、ntfs、smbfs、cifs、iso9660、udf) 需要使用挂载选项 “iocharset” 使得文件名中的非 ASCII 字符能够正确转码。此选项的值应设置为与你的区域数据的字符集相同,使得内核能够理解。如果对应的字符集定义 (位于 File systems -> Native Language Support,即文件系统 -> 原生语言支持) 编译到内核中或者编制成模块,它就能工作。vfat 和 smbfs 文件系统还需要 “codepage” 选项。它应该设置为你所在的国家在 MS-DOS 下使用的 codepage 号码。例如,为了挂载优盘,zh_CN.GB2312 用户的 /etc/fstab 文件中会需要: ...

2017-08-10 · 2 min · 358 words · -

selinux

selinux 临时关闭 selinux # 查询 selinux 状态 sestatus # 临时关闭selinux setenforce 0 永久关闭 SELinux vim /etc/selinux/config 把 #SELINUX=enforcing 改成 SELINUX=disabled https://www.ibm.com/developerworks/cn/linux/l-secure-linux-ru/index.html http://okeeper.leanote.com/post/CentOS7%E4%B8%AD%E5%85%B3%E9%97%ADselinux https://my.oschina.net/oaoa/blog/185833 SELinux 初探 在进入了 CentOS 5.x 之后,SELinux 已经是个非常完备的核心模块了!CentOS 5.x 提供了很多管理 SELinux 的命令与机制, 因此在整体架构上面比以前的版本要单纯且容易操作管理!所以,在这一版以后,我们建议大家千万不要关掉 SELinux 这玩意儿! 让我们来仔细的玩玩这家伙吧! 小标题的图示什么是 SELinux 什么是 SELinux 呢?其实他是『 Security Enhanced Linux 』的缩写,字面上的意义就是安全强化的 Linux 之意!那么所谓的『安全强化』是强化哪个部分? 是网络资安还是权限管理?底下就让我们来谈谈吧! 当初设计的目标: 避免资源的误用 SELinux 是由美国国家安全局 (NSA) 开发的,当初开发这玩意儿的目的是因为很多企业界发现, 通常系统出现问题的原因大部分都在於『内部员工的资源误用』所导致的,实际由外部发动的攻击反而没有这么严重。 那么什么是『员工资源误用』呢?举例来说,如果有个不是很懂系统的系统管理员为了自己配置的方便,将网页所在目录 /var/www/html/ 的权限配置为 drwxrwxrwx 时,你觉得会有什么事情发生? 现在我们知道所有的系统资源都是透过程序来进行存取的,那么 /var/www/html/ 如果配置为 777 , 代表所有程序均可对该目录存取,万一你真的有启动 WWW 服务器软件,那么该软件所触发的程序将可以写入该目录, 而该程序却是对整个 Internet 提供服务的!只要有心人接触到这支程序,而且该程序刚好又有提供使用者进行写入的功能, 那么外部的人很可能就会对你的系统写入些莫名其妙的东西!那可真是不得了!一个小小的 777 问题可是大大的! ...

2017-08-01 · 11 min · 2290 words · -

less command

less command make Vim behave like “tail -f”? less +F https://unix.stackexchange.com/questions/82058/how-do-i-make-vim-behave-like-tail-f http://www.cnblogs.com/peida/archive/2012/11/05/2754477.html less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,就可以使用 pageup pagedown 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。 1.命令格式: less [参数] 文件 2.命令功能: less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。 3.命令参数: -b <缓冲区大小> 设置缓冲区的大小 -e 当文件显示结束后,自动离开 -f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件 -g 只标志最后搜索的关键词 -i 忽略搜索时的大小写 -m 显示类似more命令的百分比 -N 显示每行的行号 -o <文件名> 将less 输出的内容在指定文件中保存起来 -Q 不使用警告音 -s 显示连续空行为一行 -S 行过长时间将超出部分舍弃 -x <数字> 将"tab"键显示为规定的数字空格 /字符串: 向下搜索"字符串"的功能 ...

2017-07-28 · 2 min · 328 words · -

logrotate

logrotate 确认 cronie 已经安装并启动 http://wiloon.com/cron 全局配置 /etc/logrotate.conf 不同应用的具体配置则在 /etc/logrotate.d/* 配置文件内容 /etc/logrotate.d/ansiblelog vim /etc/logrotate.d/ansiblelog /var/log/ansible.log { daily rotate 7 missingok dateext copytruncate compress } /var/log/nginx/*.log /var/log/tomcat/*log { # 可以指定多个路径, 用空格分隔, 或者用换行分隔 su root root # 切换到root用户操作文件 daily # 日志轮转周期, weekly, monthly, yearly, daily rotate 30 # 保存30天数据,超过的则删除 size +100M # 超过 100M 时分割, 单位 K,M,G, 优先级高于 daily compress # 切割后压缩, 也可以为 nocompress delaycompress # 切割时对上次的日志文件进行压缩 dateext # 日志文件切割时添加日期后缀 missingok # 如果没有日志文件也不报错 notifempty # 日志为空时不进行切换, 默认为ifempty create 640 nginx nginx # 使用该模式创建日志文件 sharedscripts # 所有的文件切割之后只执行一次下面脚本 postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript } # logrotate status cat /var/lib/logrotate/logrotate.status # 显示详细的信息;而且 --debug/-d 实际上不会操作具体文件 (Dry Run) logrotate --debug --verbose --force /etc/logrotate.d/nginx # 启用debug模式, 上不会操作具体文件 (Dry Run) # -d, --debug logrotate -d # 强制滚动日志, 手动执行, 所有配置 logrotate -f /etc/logrotate.conf # 单个配置 logrotate -f /etc/logrotate.d/nginx # -f,--force crontab -e * * */1 * * /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.d/tcpcopy /etc/crontab 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly run-parts 命令位于 /usr/bin/run-parts, 内容是很简单的一个shell脚本, 就是遍历目标文件夹, 执行第一层目录下的可执行权限的文件。 ...

2017-07-25 · 2 min · 348 words · -

ntp, chrony, 时钟服务, 时钟同步

systemd-timesyncd, ntp, chrony NTP,是 Net Time Protocol 的缩写,意即网络时间协议。 archlinux 默认启用 ntp systemd-timesyncd archinstall 默认使用 systemd-timesyncd 作时钟同步, UDP 123 端口(NTP 协议),不能用 https 代理 systemd-timesyncd 是一个用于跨网络同步系统时钟的守护服务。它实现了一个 SNTP 客户端。与NTP的复杂实现相比,这个服务简单的多,它只专注于从远程服务器查询然后同步到本地时钟。 # archlinux 的时钟同步是默认启用的. timedatectl status # System clock synchronized: yes # 检查其状态 systemctl status systemd-timesyncd # systemd-timesyncd 服务启用 sudo systemctl enable systemd-timesyncd --now # timedatectl 层面启用 NTP sudo timedatectl set-ntp true # 禁用 sudo systemctl stop systemd-timesyncd sudo systemctl disable systemd-timesyncd sudo systemctl mask systemd-timesyncd sudo timedatectl set-ntp false chrony install # install chrony - arch sudo pacman -S chrony # for centos yum install chrony # ubuntu apt install chrony chrony 配置 # 号和 ! 号都代表注释 ...

2017-07-20 · 6 min · 1215 words · -

strace, 跟踪进程中的系统调用

strace, 跟踪进程中的系统调用 sudo pacman -S strace 统计系统调用的耗时 strace -cp <PID> http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/strace.html strace 跟踪进程中的系统调用 strace 常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。 输出参数 每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。 strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。 strace cat /dev/null execve("/bin/cat", [“cat”, “/dev/null”], [/* 22 vars */]) = 0 brk(0) = 0xab1000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29379a7000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) … 参数 -c 统计每一系统调用的所执行的时间,次数和出错的次数等. -d 输出strace关于标准错误的调试信息. -f 跟踪由fork调用所产生的子进程. -ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号. -F 尝试跟踪vfork调用.在-f时,vfork不被跟踪. -h 输出简要的帮助信息. -i 输出系统调用的入口指针. ...

2017-06-08 · 1 min · 205 words · -

iowait

iowait iowait 表示在一个采样周期内有百分之几的时间属于以下情况: CPU空闲、并且有仍未完成的 I/O 请求。 对 %iowait 常见的误解有两个: 一是误以为 %iowait 表示 CPU不能工作的时间, 二是误以为 %iowait 表示 I/O有瓶颈。 首先 %iowait 升高并不能证明等待 I/O的进程数量增多了, 也不能证明等待 I/O的总时间增加了。 例如, 在 CPU繁忙期间发生的 I/O, 无论IO是多还是少, %iowait都不会变;当 CPU繁忙程度下降时, 有一部分 IO落入CPU空闲时间段内, 导致%iowait升高。 再比如, IO的并发度低, %iowait就高;IO的并发度高, %iowait可能就比较低。 可见 %iowait是一个非常模糊的指标, 如果看到 %iowait 升高 ,还需检查I/O量有没有明显增加, avserv/avwait/avque 等指标有没有明显增大, 应用有没有感觉变慢,如果都没有,就没什么好担心的。 iowait 的含义为有进程在等 io操作结束 (备份进程) , 并且在等待 io操作结束的过程中, 无其他进程占用cpu, cpu处于空闲状态, 故根据iowait参数无从判断io负载情况,还需要通过iostat来判断备份期间io负载情况 (如备份期间磁盘写性能是否已达瓶颈等) %iowait = (cpu idle time)/(all cpu time) 说明: 高速cpu会造成很高的 iowait值,但这并不代表磁盘是系统的瓶颈。唯一能说明磁盘是系统瓶颈的方法,就是很高的read/write时间,一般来说超过20ms,就代表了不太正常的磁盘性能。为什么是20ms呢?一般来说,一次读写就是一次寻到+一次旋转延迟+数据传输的时间。由于,现代硬盘数据传输就是几微秒或者几十微秒的事情,远远小于寻道时间 (seek time) 220ms和旋转延迟48ms,所以只计算这两个时间就差不多了,也就是15~20ms。只要大于20ms,就必须考虑是否交给磁盘读写的次数太多,导致磁盘性能降低了。 ...

2017-03-31 · 1 min · 154 words · -

vmstat

vmstat vmstat -SM 1 vmstat 1 10 # vmstat每2秒采集数据,一直采集,直到结束程序 vmstat 2 # 2表示每两秒采集一次服务器状态,1表示只采集一次。 vmstat 2 1 vmstat命令是最常见的 Linux/Unix 监控工具, 可以展现给定时间间隔的服务器的状态值, 包括服务器的 CPU 使用率, 内存使用, 虚拟内存交换情况, IO读写情况。 相比 top, vmstat 可以看到整个机器的 CPU,内存,IO 的使用情况,而不是单单看到各个进程的 CPU 使用率和内存使用率(使用场景不一样)。 -S: 输出信息的单位, (k: 1000, K:1024 , m: 1000000, M: 1048576) bytes, -S, --unit CHAR -a: 显示活动内页 -f: 显示启动后创建的进程总数; -m: 显示slab信息; -n: 头信息仅显示一次 -s: 以表格方式显示事件计数器和内存状态; -d: 报告磁盘状态; -p: 显示指定的硬盘分区状态; 一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如: 输出的字段 r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。 b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。 swpd swap 的使用量 虚拟内存已使用的大小, 如果大于0, 表示你的机器物理内存不足了, 如果不是程序内存泄露的原因, 那么你该升级内存了或者把耗内存的任务迁移到其他机器。 ...

2017-03-31 · 2 min · 251 words · -

tee command

tee command tail -f foo.log |grep bar | tee bar.log 命令说明: 双向重定向, 从标准输入读取数据, 输出到屏幕上, 同时保存成文件。 格式: tee [-a] file 参数说明: -a: 以累加的方式, 将数据加入到 file 中。 例如: ls -al /home | tee ~/myfile | more,将ls命令的数据存一份到myfile中,同时屏幕也有输出数据。 我使用过的Linux命令之 tee - 重定向输出到多个文件 本文链接: http://codingstandards.iteye.com/blog/833695 (转载请注明链接) 用途说明 在执行Linux命令时,我们可以把输出重定向到文件中,比如 ls >a.txt,这时我们就不能看到输出了,如果我们既想把输出保存到文件中,又想在屏幕上看到输出内容,就可以使用tee命令了。tee命令读取标准输入,把这些内容同时输出到标准输出和 (多个) 文件中 (read from standard input and write to standard output and files. Copy standard input to each FILE, and also to standard output. If a FILE is -, copy again to standard output.) 。在info tee中说道: tee命令可以重定向标准输出到多个文件 (`tee’: Redirect output to multiple files. The `tee’ command copies standard input to standard output and also to any files given as arguments. This is useful when you want not only to send some data down a pipe, but also to save a copy.) 。要注意的是: 在使用管道线时,前一个命令的标准错误输出不会被tee读取。 ...

2017-02-28 · 3 min · 451 words · -