一、指令类
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 {} + # +: 查找完合并处理,否t则边删除边递归会提示 No such file or directory
# 按关键字递归查找
$ grep -r "关键字" # 默认当前目录下,结尾可指定目录
# 树形路径,需安装
$ 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" # 动态显示文件新增内容,如日志
4.)查看路径及服务
$ pwd # 查看当前路径
$ whereis xxx # 查看可执行的服务,没有用which
$ env # 查看系统环境变量
$ echo $PATH # 显示系统路径配置
5.)查看/结束进程
# 查看占用排名
$ top
# 查看指定进程
$ ps aux | grep xxx # aux或-ef
# 通过进程目录查看
$ ll /proc/pid # 查看cwd和exe相关信息
# 以优雅的方式结束进程
$ kill -l PID
# 强制结束进程
$ kill -9 PID
# 结束同一进程组内的所有进程
$ killall 进程名
6.)查看端口/服务
# 查看本机端口
$ netstat -an | grep 8000 # mac && linux
> netstat -an | findstr 8000 # windows
# 测试本地/远程端口
$ telnet x.x.x.x 8000
# 测试web服务
$ curl -i localhost:8080 # 加参数-v,显示一次通讯过程
# 查看端口占用信息
$ lsof -i tcp:8000 (简写lsof -i:8000)
7.)ssh命令登录
ssh -p 22 username@x.x.x.x
2、新建操作
1.)创建新文件
$ touch a.js
2.)echo新建/追加
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
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 # 去除写/执行
3.)linux下git密钥提示0644权限解决
当git clone出现0644错误,表示当前密钥权限有安全隐患,修改:
$ chmod 0600 ~/.ssh/id_rsa
4、用户管理
1.)新建用户
$ useradd publish
$ groupadd publish # 添加组
2.)设置密码
$ passwd publish
3.)删除用户
$ userdel publish
$ groupdel publish # 删除组
4.)查看用户/组
$ w # 显示当前在线用户列表
$ id # 查看当前用户信息
$ groups # 查看当前组内成员
$ groups publish # 查看publish组内成员
$ cat /etc/group # 查看所有组
$ cat /etc/shadow和/etc/passwd # 查看所有用户名
5.)用户添加sudo权限
当提示用户xxx不在sudoers文件中,需修改sudoers文件
$ vi /etc/sudoers
# 添加一行
xxx ALL=(ALL:ALL) NOPASSWD:ALL
上面的NOPASSWD表示sudo完不用密码,若需要密码验证只留下ALL即可
6.)用户添加到附属组群
若每次使用某个应用命令都需要sudo,比较麻烦,可以通过以下命令添加当前用户到其所属组,如docker:
# 添加到组
$ sudo usermod -aG docker 当前用户名
# 从组剔除
$ sudo usermod -dG docker 当前用户名
要注意的是:需要用户注销后再登录生效
5、网络请求
1.)保存网页/下载文件
curl http://www.linux.com >> linux.html
# 或
curl -o linux.html http://www.linux.com
# 下载文件
curl -O http://www.linux.com/hello.sh # 加-C支持断点续传
2.)测试网页返回值求
在脚本中,这是很常见的测试网站是否正常的用法
$ curl -o /dev/null -s -w %{http_code} www.linux.com
3.)发送post请求
$ curl -X POST http://localhost:3000/api/posts --data '{"user":"xxx"}' --header 'Content-Type:application/json'
6、安装操作
1.)本地上传/下载
$ rz # 上传
$ sz ./filename # 下载
2.)远程工具下载
wget类型于迅雷,支持断点续传
$ wget -c https://nodejs.org/dist/v8.11.3/node-v8.11.3-linux-x64.tar.xz
# 从url依次下载文件
$ wget -r url
# 或
$ curl -C -O https://nodejs.org/dist/v8.11.3/node-v8.11.3-linux-x64.tar.xz
若报错提示:wget: bad address,是因为域名解析服务器配置不对:
$ sudo vi /etc/resolv.conf
# 修改内容为下
nameserver 8.8.8.8 # google域名服务器
3.)压缩/解压
加v:显示详细信息
$ tar -cf x.tar ./x # 压缩
$ tar -xf x.tar # 解压,.tar.xz也可以解
# z:使用zip/gzip
$ tar -zcf x.tar.gz ./x # 压缩
$ tar -zxf x.tar.gz # 解压
# 查看压缩内容
$ tar -tf x.tar
若解压时提示:tar (child): xz: Cannot exec: No such file or directory,需安装:
$ apt-get install xz-utils
4.)包管理工具安装
基于系统自带的包管理工具安装应用
# redhat/centos系列
$ sudo yum install xxx
# deepin/ubuntu系列
$ sudo apt-get install xxx
# mac
$ sudo brew install xxx
# alpine linux
$ apk add xxx
5.)centOS系统内核升级
$ uname -r # 查看内核
$ sudo yum clean all
$ sudo yum update
$ sudo reboot
7、系统操作
1.)查看磁盘空间
# 查看总的磁盘使用
$ cd /
$ df -h
# 查看目录大小
$ du -sh
# 查看当前目录各文件大小
$ du -sh *
# 显示内存及swap
$ free
2.)系统/硬件时间
$ 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
3.)其它
$ w # 显示谁在线
$ id或whoami # 显示当前用户
二、配置类
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,尤其docker里需要
$ vi /etc/resolv.conf
# 添加内容
#------------------------------
nameserver 8.8.8.8
#------------------------------