22

一、指令类

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

安静de沉淀
6.5k 声望282 粉丝

忙起来像个狗?,轻松起来像只猫?,没工作闲得像条鱼?