一、指令类
1、查看操作
1.)查看linux版本
# 查看内核版本
$ uname -r # -a 查看完整内核
# 查看系统信息
$ cat /etc/issue
$ cat /etc/redhat-release # 查看centOS系统版本
2.)查找文件
$ ll -a # mac下:ls -al
# 当前查找指定文件/目录,不递归
$ ll | grep "名称"
# 按文件/目录名递归查找
$ find -name "名称" # 可指定类型-type f: 文件,-type d: 目录, mac下find后要添加路径
# 找到后可执行指定命令,如:
$ find -type d -name "node-sass" -exec rm -rf {} + # '+'用来查找完合并处理,否则边删除边递归会提示 No such file or directory
# 或用xargs实现
$ find -type d -name "node-sass" | xargs rm -rf
# 按关键字查找
$ grep -n 'keyword' * # 只查找文件,不递归子目录
$ grep -nr 'keyword' # 递归查找,-n显示行号
# 树形路径,需安装
$ yum/brew install tree
$ tree -L 2 # 数字表示层级
$ tree -L 2 -d # 只显示目录
3.)查看文件/内容
# 指定文件查找内容
$ cat "fileName" | grep "keyword"
# 查看指定头尾行
$ head "fileName" # 默认10行,-n:查看前n行
$ tail "fileName" # 默认10行,-n:查看尾n行
$ tail -f "fileName" # 动态显示文件新增内容,如日志
# echo输出带颜色(红色=31,绿色=32,黄色=33,青色=36,白色=37),\e也可以用\033代替
$ echo -e "\e[36m显示内容\!...\e[0m"
# 遇到!号需要转换,或把双引号"改成单引号'
$ echo -e "\e[36mSuccess\!\e[0m"
# 1加粗,5闪动文本
$ echo -e "\e[1;32;5m显示内容...\e[0m"
4.)查看路径及服务
$ pwd # 查看当前路径
$ whereis xxx # 查看可执行的服务,没有用which
$ env # 查看系统环境变量
$ echo $PATH # 显示系统路径配置
5.)查看/结束进程
# 查看占用排名
$ top
# 查看指定进程
$ ps aux | grep xxx # aux或-ef
# -v不包括自身或指定字段
$ ps aux | grep xxx | grep -v 'grep'
# 查看指定字段
$ ps aux | grep xxx | awk '{print $1}'
# 通过进程目录查看
$ ll /proc/pid # 查看cwd和exe相关信息
# 以优雅的方式结束进程
$ kill -l PID
# 强制结束进程
$ kill -9 PID
# 结束同一进程组内的所有进程
$ killall 进程名
若系统没有killall命令,可安装:
$ apt-get install psmisc # centOS下用yum安装
2、新建操作
1.)创建新文件
$ touch a.js
2.)新建/追加
echo命令'>'用来新建,'>>'用于追加内容
# 新建,并添加内容
$ echo 'hello world' > a.txt
# 新建,多行一次性添加
$ echo -e 'line1 \n line2' > a.txt # \n分行
# 追加,多行一次性追加
$ echo -e 'line1 \n line2' >> a.txt
# 追加,多行多次追加,'\'多行连接符
$ echo 'line1' >> a.txt \
&& echo 'line2' >> a.txt
cat可以把一个文件内容追加到另一个文件
$ cat file1 >> file2
# 显示并另存为file2
$ cat file1 | tee file2 # tee -a 追加
3.)sed命令
sed -i可以直接对文件进行查找、替换、删除、添加而无需打开
# 全局替换,只替换第一个匹配去掉g
$ sed -i 's/原字符串/新字符串/g' a.txt
# Mac下-i后面添加''或'_bak'
$ sed -i '' 's/原字符串/新字符串/g' a.txt
# 删除所有匹配到字符串的行
$ sed -i '/匹配字符串/d' a.txt
# 特定字符串的行后插入新行,若行前插入/a改为/i
$ sed -i '/特定字符串/a 新行字符串' a.txt
# 在文件尾添加多行内容
$ sed -i '$a line1 \n line2' a.txt
4.)vi编辑内容
$ vi "fileName"
# 非编辑模式下
查找:输入/,n向后查,N向前查, dd删除,uu恢复
复制:按yy,再p
# 不退出执行其它命令
:! cat xxx
# 查找替换
:%s /x/y /g # x替换成y, /g全局替换
当vi编辑模式下,移动方向键出字母或mac下delete键不能用,解决如下:
$ echo -e "set nocp \nset backspace=2" >> ~/.vimrc && source ~/.vimrc
如果服务器没有安装vi/vim,还可以用nano编辑器
$ nano
5.)创建软链
$ ln -s source target # 要用绝对路径创建,-f: 强制覆盖
6.)复制文件/目录
$ cp -r source dest # -f: 强制覆盖不提示
7.)移动/改名
$ mv 源 目标 # 当源和目标名称相同时,即改名
8.)新建多层目录
父级目录不存在,则创建
$ mkdir -p /x/y/z
3、权限操作
1.)改变所有者
$ chown -R user:group file
2.)改变读写权限
a.) 数字表示法:权限由三位组成,分别表示User,Group,Other的权限,每位再由r=4,w=2,x=1叠加而成
$ chmod 777 file # 全部有读/写/执行权限
$ chmod 755 file # 除了拥有者,其它组和人只能读/执行
$ chmod 750 file # 拥有者组可读/执行,其它人无
b.) 字母表示法:a:所有人,u:拥有者, g:拥有者组,o:其他
$ chmod a+x file # 所有人只能执行
$ chmod a=rwx file # 同777
$ chmod a-wx file # 去除写/执行
# 组员可以访问目录
$ chmod g+rx dir # x可进入目录,r可查看目录下内容
3.)linux下git密钥提示0644权限解决
当git clone出现0644错误,表示当前密钥权限有安全隐患,修改:
$ chmod 0600 ~/.ssh/id_rsa
4、用户管理
1.)新建用户/组
$ useradd 'username'
# 新建组
$ groupadd 'username'
2.)设置密码
$ passwd 'username'
3.)切换用户
$ su - 'username' # 切换用户且切换用户环境
$ su 'username' # 不切环境
# 切换并执行脚本
$ su - 'username' -c 'ls -a'
若su切换用户时提示:This account is currently not available,或切换不了,说明用户被限制登录了,先查看:
$ cat /etc/passwd | grep 'username'
若是/sbin/nologin
或/bin/false
之类,再将其改成/bin/bash
4.)删除用户/组
# 删除用户,-r清除用户目录
$ userdel -r 'username'
# 删除组
$ groupdel 'username'
当删除不了用户,报:userdel: user test is currently used by process 1时,需要手动删除passwd、shadow、group、gshadow等文件中用户及分组信息那一行
$ vipw # 相当于vi /etc/passwd
$ vipw -s # 相当vi /etc/shadow
$ vipw -g # 相当于vi /etc/group
$ vipw -gs # 相当vi /etc/gshadow
# 删除用户目录
$ rm -fr '/home/username'
5.)查看用户/组
$ w # 显示当前在线用户列表
$ id # 查看当前用户信息
$ groups # 查看当前组内成员
$ groups 'username' # 查看publish组内成员
$ cat /etc/group # 查看所有组
$ cat /etc/shadow 和 /etc/passwd # 查看所有用户名
6.)用户添加sudo权限
当提示用户xxx不在sudoers文件中,需切换到root权限或有sudo权限的用户,执行:
# 修改/etc/sudoers文件
$ visudo
# 在root字段下面添加一行
xxx ALL=(ALL:ALL) NOPASSWD:ALL
上面的NOPASSWD表示sudo执行时无须密码,若需要密码验证只留下ALL即可
7.)用户直接使用root权限
编辑passwd文件,找到用户所在的行,将用户ID修改为0
$ vi /etc/passwd # 或vipw命令
# x:后面的数字改成0
hoby:x:0:1002:tommy:/home/hoby:/bin/bash
8.)用户添加到应用组
若每次运行一个应用都需要sudo权限,如:docker,比较麻烦,可以将当前用户添加到应用所属组:
# 添加到组
$ sudo gpasswd -a 'username' 'appgroup'
# or
$ sudo usermod -aG 'groupname' 'appgroup'
# 从组剔除
$ sudo gpasswd -d 'username' 'appgroup'
要注意的是:需要用户注销后再登录生效,添加结果可查看/etc/group
5、网络操作
1.)查看网络
$ ifconfig
# win下
> ipconfig
> ipconfig /flushdns # 刷新dns
2.)查看端口/服务
# 查看本机端口
$ netstat -an | grep 8000 # mac && linux
> netstat -an | findstr 8000 # windows
# 测试本地/远程端口
$ telnet x.x.x.x 8000
$ ssh x.x.x.x -p 8000
# 测试web服务
$ curl -I localhost:8080 # 加参数-v,显示一次通讯过程
# 查看端口占用信息
$ lsof -i tcp:8000 (简写lsof -i:8000)
telnet默认没启用,mac下需要安装:brew install telnet
, win下开启功能:控制面板 > 程序与功能 > 启动或关闭Windows功能
3.)远程连接
# 远程连接
$ ssh -p 22 user@x.x.x.x
# 远程传送文件
$ scp x.tar.gz user@x.x.x.x:remoteDir # -o StrictHostKeyChecking=no 参数用在自动化脚本第一次连接忽略确认提示
# 远程传送目录
$ scp -r localDir user@x.x.x.x:remoteDir
# 远程执行批量脚本
serv=web
ssh -Tq user@x.x.x.x << remotessh
echo $web # 变量定义在脚本块之外不需要转义
remotessh
# 变量定义在脚本块内需要\$转义或在标识上做特殊处理
ssh -Tq user@x.x.x.x << 'EOF'
serv=web
echo $web
EOF
块标识符remotessh也可以用EOF(不输出echo内容),块中用到的变量推荐定义在脚本头部,若定义在块中变量$都需要转义成\\$,或者在第一个remotessh或EOF上加引号
4.)测试网页
显示http response头信息, 小写-i还显示网页内容
$ curl -I www.baidu.com
5.)测试网页返回值
下面是在脚本中测试网站是否正常的常用方法,还可以获取其它值,如:time_connect
$ curl -s -o /dev/null -w "%{http_code}\n" www.baidu.com
6.)发送post请求
$ curl -X POST http://localhost:3000/api/posts --data '{"user":"xxx"}' --header 'Content-Type:application/json'
6、安装操作
1.)包管理器安装
不同的系统自带的包管理器和安装方式也不同
# redhat/centos系列
$ sudo yum install xxx
# ubuntu/debian系列
$ sudo apt-get install xxx
# mac
$ sudo brew install xxx
# alpine
$ apk add xxx
2.)服务器上传/下载
$ rz # 上传
$ sz ./filename # 下载
3.)本地下载文件
$ wget -c https://npm.taobao.org/mirrors/node/v12.11.1/node-v12.11.1-linux-x64.tar.xz
# 下载文件
$ curl -O http://www.linux.com/hello.sh
# 下载跟踪重定向文件
$ curl -OL https://npm.taobao.org/mirrors/node/v12.11.1/node-v12.11.1-linux-x64.tar.xz
# 保存网页
$ curl http://www.linux.com >> linux.html
wget支持断点续传,用时若出现错误提示:wget: bad address,需修改dns配置:
$ sudo vi /etc/resolv.conf
# 修改内容为下
nameserver 8.8.8.8 # google域名服务器
4.)压缩/解压
-v:显示详细信息,-m:
$ tar -cf x.tar ./x # 压缩
$ tar -xf x.tar.xz # 解压
# z:使用zip/gzip
$ tar -zcf x.tar.gz ./x # 压缩
$ tar -zxf x.tar.gz # 解压
# v:显示详细信息
$ tar -zxvf x.tar.gz
# m:当压缩包与服务器时间不一致,以服务器为准
$ tar -mzxvf x.tar.gz -C dirX # 解压到目录
# 查看压缩内容
$ tar -tf x.tar
若解压.xz文件时提示:tar (child): xz: Cannot exec: No such file or directory,需安装:
$ yum install xz-utils
若不支持gzip,需安装:
$ yum install zlib zlib-devel
5.)批量执行脚本
# 修改成可执行文件
$ chmod +x ./file.sh
$ ./file.sh
# 直接执行
$ sh ./file.sh
# 调试模式执行
$ sh -x ./file.sh
6.)centOS系统内核升级
$ uname -r # 查看内核
$ sudo yum clean all
$ sudo yum update
$ sudo reboot
7、系统操作
1.)启动/关闭
# 重启
$ reboot
# 或
$ shutdown -r now
# 关机
$ shutdown now
2.)查看系统资源
# 查看总的磁盘使用
$ df -h
# 查看目录大小
$ du -sh
# 查看当前目录各文件大小
$ du -sh *
# 以M为单位查看文件大小
$ ll --block-size=M
# 显示内存及swap
$ free -g # -g:G单位,-m:M单位
3.)系统/硬件时间
$ date # 查看系统时间
$ cal # 显示本地日历
$ uptime # 显示运行时间
$ hwclock # 查看硬件时间
$ hwclock -w # 用系统时间同步硬件时间
$ ntpdate cn.pool.ntp.org # 更新系统时间
# 修改utc为cst时间
$ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' > /etc/timezone
4.)当前/在线用户
# 显示当前用户
$ id 或 whoami
# 显示当前所有在线用户
$ w
5.)历史命令
# 查看历史
$ history
# 清空历史
$ history -c && echo > ~/.bash_history
二、配置类
1、系统配置
1.)bash配置
$ vi ~/.bashrc
#-----------------------------------
# 别名
alias ll='ls -al'
alias cls='reset'
# 用户path
PATH=$PATH:/usr/local/lib/node/bin
#-----------------------------------
$ source ~/.bashrc
2.)环境变量/PATH
若所有用户都能使用,需修改全局配置:
$ sudo vi /etc/profile
#-----------------------------------
# 结尾添加如下
export PATH=/usr/sbin:$PATH
# 自定义变量
export MY=wang
#-----------------------------------
$ source /etc/profile
3.)设置随机启动
$ chkconfig --add /etc/init.d/xxx # 添加服务
$ service serviceName start
$ chkconfig serviceName on
2、网络配置
1.)dns配置
修改dns配置文件/etc/resolv.conf,在docker容器中默认不可用,多数需要修改
nameserver 8.8.8.8
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。