Linux常用命令

一、指令类

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
#------------------------------
    原文作者:安静de沉淀
    原文地址: https://segmentfault.com/a/1190000018754517
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞