在初学使用Linux/Mac时的一些笔记,整理放在一起,便于遗忘时快速查阅定位。
Zsh 使用笔记
命令选项补全
在zsh中只需要键入 tar - 就会列出所有的选项和帮助说明
目录浏览和跳转
输入 d,即可列出你在这个会话里访问的目录列表,输入列表前的序号,即可直接跳转。
智能跳转
安装了 autojump 后并启用之,zsh 会自动记录你访问过的目录,通过 j 目录名 可以直接进行目录跳转,而且目录名支持模糊匹配和自动补全,例如你访问过 hadoop-1.0.0 目录,输入j hado 即可正确跳转。j –stat 可以看你的历史路径库。
命令别名
在命令行中输入 alias 可以查看所有的命令别名
.zshrc
在用户根目录的 .zshrc 中新增函数方法动作、快捷别名
Mac OS 如何在终端下打开 APP 应用程序?
比如使用 x.app 软件 打开 y.txt 文件,可使用open命令 open -a x.app y.txt
如何启动HTTP代理 Privoxy ?
因没有安装在系统目录内,所以启动的时候需要打全路径 sudo /usr/local/sbin/privoxy /usr/local/etc/privoxy/config查看是否启动成功 netstat -na | grep 8118
如何查找一个文件,并返回路径?
查找文件 name.txt
路径
find / -name “name.txt”
/
表示全局查找,替换它以便在其他指定目录查找。
如何创建一个快捷访问文件?
ln -s 源目录 目标快捷方式
例如:在当前文件下创建快捷文件 wwwroot,并指向目录 /home/wwwroot/
ln -s /home/wwwroot/ wwwroot
如何离线下载 YouTube 视频?
使用强大的youtube-dl吧,项目源码:https://github.com/rg3/youtube-dl
安装 youtube-dl:
pip install --upgrade youtube_dl
使用方法:
https://www.youtube.com/watch?v=nNGmruHS3r8 => 需要下载的视频URL
执行下列命令缓存到当前目录
youtube-dl https://www.youtube.com/watch?v=nNGmruHS3r8
离线取回:
利用 python 即可快速创建一个临时 WEB 服务,当其他 Node 的 http-sever 也可以的。
python -m SimpleHTTPServer 8080
现在要下载一个视频 MP3 轨道,我们需要以下两个选项:
–extract-audio (短选项-x) -视频文件转换为纯音频文件。
–audio-format -指定音频格式,其中该文件将被下载。 支持的音频格式是“最佳”,“aac”,“vorbis”,“mp3”,“m4a”,“opus”或“wav” “best”默认设置
要将视频下载为mp3文件,可以使用以下命令之一:
youtube-dl -x --audio-format mp3 https://www.youtube.com/watch?v=jwD4AEVBL6Q
那么如果我们已经下载了视频格式,结果还想要音频MP3呢?
可以使用 ffmpeg 格式转换工具
以下命令可以将 123.mp4 文件转换成 123.mp3 文件
ffmpeg -i 123.mp4 123.mp3
如何打包、压缩、解压文件/文件夹呢?
.tar.gz格式(.tar是打包! .gz是压缩!打包后的文件名:FileName;需要打包的文件夹:DirName)
压缩:
$ tar zcvf FileName.tar.gz DirName
解压:
$ tar zxvf FileName.tar.gz
.zip格式(打包文件file1、file2和目录dir,压缩为file.zip)
解压:
$ unzip file.zip
压缩:
$ zip -r file.zip file1 file2 dir
如何复制一个文件夹下的文件到另一个文件夹里?
需求:dir1目录下面的一堆文件复制到dir2目录下。
cp -r dir1 dir2 # 这样的话dir1文件夹复制到了dir2下
cp -r dir1/. dir2 # 加上 /. 既可
如何上传和下载一个文件?
可以使用 Curl、Wget、rz/sz、scp 工具
Wget 是大多数 *nix 系统中标准的命令行下载工具。
$ Wget https://example.com/download.php?fileID=foo
Mac OS 自带 Curl 下载 Chrome 的例子:
正常下载一个文件
$ curl -O https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.dmg
url 重定向链接
$ curl -L -o ‘file.zip’ ‘https://example.com/download.php?fileID=foo’
上传文件到远程ftp
$ curl -T file.zip ftp://root:123456@jandou.com/home/wwwroot/
上传文件到远程sftp:
$ curl -T file.tar.gz -u root sftp://jandou.com
rz/sz 命令
远程拷贝和本地上传 scp 命令
从远程机器拷贝到本地 ( -P: 大写的P, 指定端口号 )
$ scp -P 10086 root@bg.jandou.com:/root/file.zip ~/Desktop
从本地上传到远程机器(-r:小写的r,表示递归,目录或文件只能用相对路径)
$ scp -P 10086 -r ~/Desktop/file.zip root@bg.jandou.com:/root/
出现错误***: not a regular file不能成功传送,解决方案:有可能服务器没权限 chmod 777 ,在使用scp时加上 -r 参数即可
VI/VIM 常用命令列表
:w 保存文件但不退出vi
:w file 将修改另外保存到file中,不退出vi
:w! 强制保存,不推出vi
:wq 保存文件并退出vi
:wq! 强制保存文件,并退出vi
:q 不保存文件,退出vi
:q! 不保存文件,强制退出vi
:e! 放弃所有修改,从上次保存文件开始再编辑
i 进入编辑模式
d 非编辑模式,双击 d ,删除整行
网卡物理地址(Mac地址)如何动态设置?
例如 00:1f:3c:93:b5:99,可执行:
$ sudo ifconfig en1 ether 00:1f:3c:93:b5:99
如何进行文件(夹)的删除操作?
删除空目录dir: rmdir dir
删除非空目录dir: rm -rf dir
如何进行文件(夹)的重命名操作?
删除空目录dir: mv 原XXX.mp3 改XXX.mp3
Linux 里的进程守护有哪些方法?
用 screen 进程守护,来源 http://www.cmsky.com/shadowsocks-manyuser-sspanel/
screen -S ss
cd /root/shadowsocks/shadowsocks/
python servers.py
恢复执行:
screen -r ss
用 supervisor 进程守护
首先安装 supervisor
默认安装了 pip , 如果没安装过,不同平台参考下面命令安装:
$ sudo apt-get install python-pip # For Debian/Ubuntu
$ sudo yum install python-pip # For CentOS
安装 supervisor 命令:
$ pip install supervisor
创建 supervisor 配置文件
输出至 supervisor 的默认配置路径。
我没有放在默认位置,我放在 /root/shadowsocks 文件夹里的!
$ echo_supervisord_conf > /etc/supervisord.conf
在 supervisord.conf 所放目录下运行 supervisor 服务
$ [root@zhuziyi shadowsocks]# supervisord
$ supervisord
vim 配置 supervisor 以监控 ss-manyuser 运行(或者vi命令)
$ vim /etc/supervisord.conf
在文件尾部(当然也可以新建配置文件,不过这样比较方便)添加如下内容并酌情修改:
[program:ss-manyuser]
command = python /root/shadowsocks-rm/shadowsocks/servers.py
user = root
autostart = true
autorestart = true
其中 command 里的目录请自行修改为你的 servers.py 所在的绝对路径。
重启 supervisor 服务以加载配置
$ killall -HUP supervisord
查看 shadowsocks-manyuser 是否已经运行:
$ ps -ef | grep servers.py
可以通过以下命令管理 shadowsock-manyuser 的状态
$ supervisorctl {start|stop|restart} ss-manyuser
参考:https://prinzeugen.net/build-shadowsocks-sharing-site-with-ss-panel/
在命令后面加上一个 & 符号,表示该命令放在后台执行
fg(foreground)命令:将后台进程 调到前台
bg(background)命令:将一个在后台暂停运行的命令,变成继续在后台执行的命令。
Ctrl + Z 命令:将一个正在前台执行的命令放到后台,并且暂停
Ctrl + C 命名:结束前台进程
用jobs查看进程的 jobnumber,然后用命令:kill %n 来结束。
用 PS 查看进程的 pid,然后用命令:kill pid 来结束。
强大的 PM2 进程管理(推荐)
启动 Shadowsocks:pm2 start /root/shadowsocks/servers.py –name=”shadowsocks” –watch
启动 Http-Server:pm2 start http-server –name=”node-server” –watch
进程守护全面参考:http://www.ruanyifeng.com/blog/2016/02/linux-daemon.html
Mac Terminal里的一些杂项记录
sudo killall -9 networkd
ifconfig 查看网络配置
telnet 172.25.47.49 11443 检测服务器 172.25.47.49 的 11443 端口是否开启
lsof -i tcp:8090 -n 查看8090端口使用情况
ssh -D 6088 supdev@172.25.47.49 连接 172.25.47.49 服务器,本地 6088 端口数据 Socks 5 代理到服务器网络
如何安装 Google BBR 脚本为服务器加速?
https://teddysun.com/489.html
https://doub.io/wlzy-22/
逗比一键安装SSR教程:https://doub.io/ss-jc42/comment-page-5/
注意! Centos 7 默认开启自带防火墙,如果不关闭,系统重启后,外网是无法访问机器的。
如何安装小众加密代理 Brook ?
脚本地址:https://softs.fun/Bash/brook.sh
脚本说明:https://doub.io/brook-jc3/
客户端:https://doub.io/brook-jc2
如何使用 Screen 进程守护?简版
新建一个Screen,如开启一个ss进程守护: screen -S ss
开启需要长期运行的进程,如开启一个Node HTTP服务:http-server -p 80
将当前Screen Session放到后台:CTRL + A + D
当需要唤起一个Screen Session 时:screen -r ss
终止一个Screen Session:先exit退出,再 CTRL + D
via:https://github.com/chenzhiwei/linux/tree/master/screen
lnmp 如何安装和配置 SSL?
不能批量增加域名,会只生成一个路径,从而导致其他域名找不到证书
默认证书储存路径:/etc/letsencrypt/live
nginx 的 80 端口强制 301 跳转到 443 端口、错误页、HSTS等设置,配置所在路径: /usr/local/nginx/conf/vhost/
这是一个模板示例
server
{
listen 80;
server_name jandou.com;
charset utf-8;
return 301 https://$host$request_uri; # 注意进行301重定向到https,否则通过http仍能访问你的站点
}
server
{
listen 443 ssl http2;
#listen [::]:443 ssl http2;
server_name jandou.com ;
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/default;
ssl on;
ssl_certificate /etc/letsencrypt/live/jandou.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jandou.com/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_session_cache builtin:1000 shared:SSL:10m;
# openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
# 严格传输安全(HSTS)配置
add_header Strict-Transport-Security "max-age=63072000; preload";
include none.conf;
# 跳转到博客的 404 页
error_page 404 $scheme://tech.jandou.com$request_uri;
# Deny access to PHP files in specific directory
#location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
include enable-php.conf;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ /.well-known {
allow all;
}
location ~ /\.
{
deny all;
}
access_log off;
}
如何使用 crontab 来定时执行任务?
任务配置文件,在该文件里增加定时任务: /etc/crontab
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //服务状态
我写的一个脚本示例,可下载:crontab.txt
#!/bin/bash
#随机数,表示随机一个 25 以内的数
randNum1=$(($RANDOM%25))
randNum2=$(($RANDOM%25))
currentTime=`date "+%Y-%m-%d %H:%M:%S"`
# /var/spool/cron/root ( root是个文件,代表 root 用户的任务调度 ),在文件夹 /var/spool/cron/ 存入各个用户的调度任务配置
# crontab -e 编辑某个用户的 cron 服务,比如当前用户为 root,这个命令实际上是个语法糖,最终还是往 /var/spool/cron/root 写入配置,效果一样!
path_root="/var/spool/cron/root"
# /etc/crontab 是系统任务调度,系统级别的任务添加在这里,但目前我没用这个!!
path_sys="/etc/crontab"
path_log="/root/wwwroot/jandou.com/data/runlog.txt"
path_qiandao="/root/wwwroot/jandou.com/data/qiandao.txt"
# 测试每分钟写入追加
# * * * * * echo \"$currentTime-$randNum1\" >> $path_log
#生成crontab 任务配置文件
echo "
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
# 每 2 小时运行一次
* 2 * * * . /root/cache.sh
# 每60分钟执行一次
1 9-18 * * * node /root/house/app.js
" > $path_root
echo "# 每周 1 ~ 5 的 9:00 ~ 9:25 ,随机时间,执行一次
#####注释这一行暂停自动打卡
"$[randNum1]" 9 * * 1-5 node /root/qiandao/app.js" >> $path_root
echo "
# 每周 1 ~ 5 的 18:00 ~ 18:25 ,随机时间,执行一次
#####注释这一行暂停自动打卡
"$[randNum2]" 18 * * 1-5 node /root/qiandao/app.js" >> $path_root
echo "
# 每周日的 18:00 ,执行一次,清理签到日志
0 18 * * 7 echo '' > $path_qiandao" >> $path_root
echo "
# 每周 1 ~ 5 的 06:00,执行一次,用于自动生成 crontab 配置
#####注释这一行暂停自动打卡
0 6 * * 1-5 . /root/qiandao/timing.sh" >> $path_root
echo "
# crontab 配置文件生成时间:"$currentTime >> $path_root
echo "
① 生成 crontab 配置成功!" >> $path_log
#重启服务
service crond restart
echo "② 重启 crond 服务成功!
③ 当前时间:"$currentTime"
④ 上班时间:09 : "$randNum1"
③ 下班时间:18 : "$randNum2"
****************************" >> $path_log
cat $path_root
crontab 命令使用,定时执行任务,详细资料查看:http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html
如何安装 zsh 搭档插件 autojump?
Mac 上直接用 MacOS 缺失软件包管理器 Homebrew 来安装
$ brew install autojump
Centos 上可以用 Yum 安装
$ yum install autojump
手动安装
如果返回与以下提示,表示yum源没有autojump
No package autojump available.
Error: Nothing to do
如果不想改源,那么就直接下载autojump源码手动安装:
git clone git://github.com/joelthelion/autojump.git
cd autojump
install.py
安装完后目录 ~/ 下面就有 .autojump 目录了,然后在 .zshrc 里面加一行:
[[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh
最后再执行一次 source .zshrc,以生效。