流月
  • CSS
  • JavaScript
  • Web API
  • TypeScript
  • 框架

    • React
    • Vue
  • 其他

    • 小程序
    • 工程化
    • 性能优化
    • 测试
    • 其他
  • nodejs
  • deno
  • express
  • nginx
  • docker
  • 其他
  • 安全基础
  • 正则表达式
  • 网络基础
  • 设计模式
  • 数据结构与算法
  • LeetCode
  • CodeWars
  • 手写代码
  • Git
  • devops
  • 编码原则
  • 防御编程
  • Chrome
  • Edge
  • Flutter
  • Linux
  • 库
  • 网站
  • 面试
  • 摘抄
  • 方法论
  • 语法
  • 王小波
  • Elon Musk
  • CSS
  • JavaScript
  • Web API
  • TypeScript
  • 框架

    • React
    • Vue
  • 其他

    • 小程序
    • 工程化
    • 性能优化
    • 测试
    • 其他
  • nodejs
  • deno
  • express
  • nginx
  • docker
  • 其他
  • 安全基础
  • 正则表达式
  • 网络基础
  • 设计模式
  • 数据结构与算法
  • LeetCode
  • CodeWars
  • 手写代码
  • Git
  • devops
  • 编码原则
  • 防御编程
  • Chrome
  • Edge
  • Flutter
  • Linux
  • 库
  • 网站
  • 面试
  • 摘抄
  • 方法论
  • 语法
  • 王小波
  • Elon Musk
  • Linux

Linux

shell

shells

  • bash
  • zsh
  • fish
  • tcsh

Mac

shell

  • 安装iterm2
  • 安装zsh
  • 安装oh-my-zsh:开源的zsh配置文件

oh-my-zsh 下三个插件autojump、zsh-autosuggestion和zsh-syntax-highlightin

LaunchPad

defaults write com.apple.dock springboard-columns -int 7
defaults write com.apple.dock ResetLaunchPad -bool TRUE;killall Dock

设置环境变量

修改~/.profile文件

export PATH=$PATH:[your path0]:[your path1]:[...]

[]去掉

设置生效

source .profile

查看环境变量

echo $PATH

查看ubuntu版本

cat /etc/issue

启动-设置开机从文本启动 针对16.04

$ sudo systemctl set-default multi-user.target
执行如下命令启动到桌面:
$ sudo systemctl start lightdm
恢复默认图像界面启动
systemctl set-default graphical.target

用户-添加用户

使用adduser命令,自动创建用户和用户组
adduser pm

然后添加sudo
当然必须在root用户下,usermod -aG sudo pm

用户-设置超级用户

sudo passwd root
输入当前用户密码
输两次root密码

scp 传递文件

scp local_file remote_username@remote_ip:remote_folder

nginx

// nginx 指定配置文件运行
sudo nginx -c /usr/local/etc/nginx/nginx.conf

// 重启
sudo nginx -s reload

mongodb


默认  
数据保存在/var/lib/mongodb
日志 /var/log/mongodb

配置文件  
/etc/mongod.conf
  systemLog.path
  storage.dbPath

重启
sudo service mongod start
sudo service mongod stop
sudo service mongod restart

to remove Data & logs
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb

服务器常用端口

port.png

linux 常用命令

grep

ls | grep '^doc' # 以 doc 开头
ls | grep 'js$' # 以 js 结尾
ls | grep 'REA.ME' # 匹配一个非换行符的字符

sed 字符串操作

ssh 登录

ssh root@192.168.80.128

top 系统状态

# 进程所占的系统资源
top



free 内存占用

# 内存使用
free -h

netstat 网络情况

# 网络情况
netstat -lnp

# 正在使用的端口
netstat -tlunp

lsof 查看端口占用

lsof -i tcp:8080

usermod 用户与组

# 创建一个用户组(可以带上 -g 888 来在创建组的时候增加编号)
groupadd chenng
cat /etc/group
chenng:x:500:

# 修改组名称
groupmod -n newchenng chenng

# 修改组编号
groupmod -g 668 newchenng

# 删除用户组(必须先删除组里面的用户才能删除组)
groupdel newchenng

# 设置组密码
gpasswd chenng

# 创建一个用户
useradd -g sexy sdf
useradd -d /home/chenng chenng(没有指定用户组,会创建一个与用户名相同的用户组)
usermod -c dgdzmx sdf(增加注释)

# 修改一个用户所属用户组
usermod -g sexy chenng

# 删除用户
userdel jzmb(不会删除个人文件夹文件)
userdel -r jzmb(会删除个人文件夹文件)

# 设置用户密码
passwd chenng

chmod 文件与权限

# 更改文件属组,-R 递归更改目录所有文件属组
chgrp [-R] 属组名 文件名

# 更改所属主,可以同时更改文件属组
chown [-R] 属主名:属组名 文件名

# 更改文件9个属性,r=4、w=2、x=1
chmod [-R] 770 文件或目录
chmod +x 文件或目录
chmod -x 文件或目录

systemctl 服务管理

这些服务对应的启动脚本文件保存在 /usr/lib/systemd/system

# 让某个服务开机自启(.service可以省略)
systemctl enable crond.service

# 不让开机自启
systemctl disable crond

# 查看服务状态
systemctl status crond

# 启动某个服务
systemctl start crond 

# 停止某个服务
systemctl stop crond

# 重启某个服务
systemctl restart crond

# 重新加载服务配置文件
systemctl reload * 

# 查询服务是否开机启动
systemctl is-enabled crond

rm 删除文件

tail 动态查看日志

tail -f /var/log/mail.log /var/log/apache/error_log

du 查看文件大小

# 查看文件大小
du -sh vue.css

# 查看文件夹内容大小,-s 显示统计
du -h 工具

tar 打包解包

  • -z 表示使用 gzip 压缩工具
  • -c 压缩打包,-x 表示解压解包
  • -v 表示可视化
  • -f 后面跟文件名,表示压缩后的文件名为 filename,或当期需要解压文件 filename
# 打包
tar -zcvf dist_file source_dir

# 解包
tar -zxvf sourcefile

find 查找文件

# 找命令
which mv

# 全局寻找文件,需要先安装 mlocate 并执行 updatedb 生成索引
locate nginx.conf

# 文件查找
find root_path -name '*.md'

nohup 持续运行

# 后台运行
nohup python app.py > log_app.log 2>&1 &

mkdir 创建文件夹

# 递归创建目录
mkdir -p test1/test2

cat & less 查看文件

# 显示行号
cat -b index.html

# 交互式查看文件
less index.html

cp 复制文件

# 复制目录及目录内所有项目
cp -r source_dir dist_dir

curl

curl 命令的使用:HTTP请求、下载文件、FTP上传下载

# 下载文件
curl -O http://doc.zwwill.com/css/%E3%80%8Acss%E6%8F%AD%E7%A7%98%E3%80%8B.pdf

curl https://www.baidu.com/         # GET请求, 输出 响应内容
curl -I https://www.baidu.com/      # GET请求, 只输出 响应头
curl -i https://www.baidu.com/      # GET请求, 输出 响应头、响应内容
curl -v https://www.baidu.com/      # GET请求, 输出 通讯过程、头部信息、响应内容等

# POST 提交 JSON 数据(\表示命令语句还未结束, 换行继续)
curl -H "Content-Type: application/json"                \
     -d '{"username":"hello", "password":"123456"}'     \
     http://localhost/login

# POST 提交 表单数据
curl -F "username=hello"                \
     -F "password=123456"               \
     -F "head_image=@filepath.jpg"      \
     http://localhost/register

shell 脚本

echo

变量

# 声明 = 两边不能有空格
# 双引号可以有变量、可以出现转义字符;单引号不可以
name="chenng"

# 最好加 {},直接写 $name 嵌入字符串会出问题
echo ${name} 

# 删除变量
unset name

# 获取字符串长度
string="abcd"
echo ${#string} # 4

# 提取子字符串
string="runoob is a great site"
echo ${string:1:4} # unoo

循环

# 遍历单词
for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

# 遍历文件
for file in `ls /etc`
do
  echo ${file}
done

数组

array_name=("value0" "value1" "value2" "value3")
echo ${array_name[0]} # value0
echo ${array_name[@]} # "value0" "value1" "value2" "value3"
echo ${#array_name[@]} # 4

sh 脚本传参

# ./test.sh 1 2 3
echo "Shell 传递参数实例!";
echo "执行的文件名:${0}"; # ./test.sh
echo "第一个参数为:${1}"; # 1
echo "第二个参数为:${2}"; # 2
echo "第三个参数为:${3}"; # 3
echo "参数个数为:${#}" # 3

运算符

算术

a=10
b=20

# 完整的表达式要被 ` ` 包含,表达式与运算符之间要有空格
val=`expr $a + $b`
echo "a + b : $val" # a + b : 30

val=`expr $a - $b`
echo "a - b : $val" # a - b : -10

val=`expr $a \* $b`
echo "a * b : $val" # a * b : 200

val=`expr $b / $a`
echo "b / a : $val" # b / a : 2

val=`expr $b % $a`
echo "b % a : $val" # b % a : 0

if [ $a == $b ]
then
   echo "a 等于 b"
fi

if [ $a != $b ]
then
   echo "a 不等于 b"
fi

关系

a=10
b=20

if [ $a -eq $b ] # 数字相等
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi

if [ $a -ne $b ] # 数字不相等
then
   echo "$a -ne $b: a 不等于 b"
else
   echo "$a -ne $b : a 等于 b"
fi

if [ $a -gt $b ] # 数字大于
then
   echo "$a -gt $b: a 大于 b"
else
   echo "$a -gt $b: a 不大于 b"
fi

if [ $a -lt $b ] # 数字小于
then
   echo "$a -lt $b: a 小于 b"
else
   echo "$a -lt $b: a 不小于 b"
fi

if [ $a -ge $b ] # 数字大于等于
then
   echo "$a -ge $b: a 大于或等于 b"
else
   echo "$a -ge $b: a 小于 b"
fi

if [ $a -le $b ] # 数字小于等于
then
   echo "$a -le $b: a 小于或等于 b"
else
   echo "$a -le $b: a 大于 b"
fi
布尔
a=10
b=20

if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a == $b: a 等于 b"
fi

if [ $a -lt 100 -a $b -gt 15 ] # -a 与运算
then
   echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
   echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi

if [ $a -lt 100 -o $b -gt 100 ] # -o 或运算
then
   echo "$a 小于 100 或 $b 大于 100 : 返回 true"
else
   echo "$a 小于 100 或 $b 大于 100 : 返回 false"
fi

逻辑

a=10
b=20

if [[ $a -lt 100 && $b -gt 100 ]] # 逻辑与
then
   echo "返回 true"
else
   echo "返回 false"
fi

if [[ $a -lt 100 || $b -gt 100 ]] # 逻辑或
then
   echo "返回 true"
else
   echo "返回 false"
fi

字符串

a="abc"
b="efg"

if [ $a = $b ] # 字符串相等
then
   echo "$a = $b : a 等于 b"
else
   echo "$a = $b: a 不等于 b"
fi

if [ $a != $b ] # 字符串不相等
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a != $b: a 等于 b"
fi

if [ -z $a ] # 字符串长度为0
then
   echo "-z $a : 字符串长度为 0"
else
   echo "-z $a : 字符串长度不为 0"
fi

if [ -n "$a" ] # 字符串长度不为0
then
   echo "-n $a : 字符串长度不为 0"
else
   echo "-n $a : 字符串长度为 0"
fi

if [ $a ] # 字符串不为空
then
   echo "$a : 字符串不为空"
else
   echo "$a : 字符串为空"
fi

函数

# 带有 return 语句
funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum 和 $anotherNum"
    return `expr $aNum + $anotherNum`
}
funWithReturn
echo "输入的两个数字之和为 $?"

if-else

a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b" # 输出
else
   echo "没有符合的条件"
fi

输出重定向

综合应用

- sed 修改文件
- git lint

命令行 cli

  • autojump
  • tldr
    • 控制台命令的协作备忘单
  • pm2
  • locate
  • nodemon
  • tree
  • lazygit
  • torrent
  • httpie
Last Updated: 7/5/20, 5:05 AM
Contributors: wangqi