写在前面
本文介绍了linux 以及常用命令(以ubuntu18.04为例),能够应付实际开发中的一般场景,重点在文件权限和用户组管理这两节,其涉及到了linux的核心问题——权限,其次关于crontab 系统定时任务,其涉及到了Shell脚本的知识,关于Shell可以参考这篇文章:Shell 脚本快速入门
linux 基础(以ubuntu18.04为例)
linux文件分类
- 白色-----普通文件
- 蓝色-----目录
- 绿色-----可执行文件
- 红色-----压缩文件
- 青色-----链接文件
- 黄色-----设备文件(例如管道文件FIFO)
- 灰色-----其他文件
linux 目录
linux下的目录结构:树状
/根目录,所有文件的起源
/bin-----此目录下存有所有命令对应的可执行程序
/etc-----存放所有配置文件的目录
/home-----存放当前linux有多少个用户(普通用户)
/media-----linux 会自动将识别到的外部设备(例如U盘)挂载到该目录下
/opt-----给linux安装的额外软件所在的目录,也有软件装在/user下
~-----家目录下的用户目录(/home/登录的用户名/)
/mnt-----用户可以将识别到的外部设备手动挂载到该目录下
登录后默认位置在/home/登录的用户名/即~目录下
linux 文件权限

上图每一行就是该目录下对应的一个文件。
- rwxrwxr-x 2 sl-ubantu sl-ubantu 3882 2月 22 2023 thread_pool.cpp
- 第一个参数:
-,标识该文件的类型,其中-表示普通文件,d表示目录,p表示管道文件,s表示socket文件。 - 后面九个参数:
rwxrwxr-x,每相邻三个为一组,共三组,分别表示文件所有者,同组成员,其他人对该文件的权限,rwx表示读写与执行权限,某人没有某个权限,就在其对应的位置上用-来代替。 - 第十一个参数:
2,表示该文件的硬链接个数。 - 第十二个参数:
sl-ubantu,表示该文件或目录的所属者。 - 第十三个参数:
sl-ubantu,表示该文件或目录的所属主组。 - 第十四个参数:
3883,表示该文件或目录占用的存储空间。 - 第十五个参数:
2月 22 2023,表示该文件或目录最后的修改时间。 - 第十六个参数:
thread_pool.cpp,表示文件名。
linux用户和用户组管理
用户管理
注意: 在linux中安装有些软件时,系统会自动为其创建一个单独的用户(
该用户作为该软件的安装目录的所有者和所属组),其对应的安装目录只有root用户可以进行操作,其他用户只有读权限-----如安装mysql服务时,系统会自动创建一个叫mysql的用户和组作为文件夹mysql的所有者和所属组。
sudo adduser 用户名 添加(创建)用户(默认是非root用户,其不能使用sudo)
su 用户名1 由当前用户切换到用户1
sudo useradd -s /bin/bash -g 用户所属组 -d /home/用户名 -m 创建用户并分配到指定组中
/bin/bash叫命令解释器/home/用户名叫用户目录
sudo passwd 用户名 修改用户密码
用户名缺省则默认当前用户
sudo deluser 用户名1 删除用户1(不会删除/home下的目录)
sudo userdel -r 用户名1 删除用户名1(会删除/home下的目录)
这里的邮件池是因为创建kk用户时信息没填写完整。
用户组管理
默认情况下,linux系统的每个用户都各自默认属于与自己同名的组(在创建用户时就已经创建了对应的组),但在实际开发中,可能会出现同一个组下有多名用户的情况,linux可以对同一组的所有用户进行集中管理。
- 输入命令
sudo groupadd 组名创建一个新的组
- 输入命令
sudo groupdel 组名删除对应的组 - 输入命令
sudo cat /etc/group查看当前用户所属组下的所有用户(如下图)
红框内,参数1
xitian表示该组组名以及该组的创建用户,1001表示该组的id为1001, 最后一个冒号后面表示该组的所有附加用户
一个用户只能有一个主组和多个附加组,主组一般不改动,默认的主组就是用户所属的那个同名组。
- 输入命令
sudo usermod -g 要切换到的目标主组名 用户名1切换用户1所属的主组
附加组不会影响到用户创建的文件,只会影响到权限(通过命令修改同组其他用户的文件权限)
-
输入命令
sudo usermod -aG 要添加到的目标附加组名 用户名1添加用户1到对应的附加组当中 -
输入命令
sudo deluser 用户名1 组名将用户1踢出对应的组
sudo权限管理
sudo组,在该组的用户可以使用sudo命令(最高权限),默认linux系统创建的初始用户在此组当中(以附加用户的形式),若想要让某个用户拥有使用sudo的权限,则需要将对应用户添加进sudo组(以附加用户的形式)
linux 常用命令
pwd 查看当前工作目录所在的绝对路径
ls 列出当前目录所有文件(不包括隐含文件)
ls -a 列出当前目录文件(包括隐含文件)
ls -l 列出当前目录下文件的详细信息

ls - lhd 指定目录 (-l表示详细信息,h显示属性,d显示大小) 查看指定目录下所有文件的信息
cd /路径1 切换到对应路径1下(注意对应路径前要加上/)
cd .. 回当前目录的上一级目录
cd - 回上一次所在的目录
cd ~ 或 cd 回当前用户的宿主目录(/home/用户名下),每次登录都默认在此路径下
mkdir 目录名 创建一个目录(只能创建一层目录)
mkdir 目录名1/目录名2 -p 创建多层嵌套目录
rmdir 空目录名 删除一个空目录
rmdir 空目录名1/空目录名2 删除多层嵌套空目录
rm 文件名删除文件
rm -r 目录名 删除一个目录下的一切,递归删除,无论是不是空
rm -rfi 目录名 (-r表示递归删除操作,-i表示询问用户是否进行删除操作,f表示删除不存在的文件时不会出现警告) 删除一个目录下的一切
cp 要拷贝的文件2 文件1 将文件2拷贝到文件1中
cp 目录1/ 目录2 -r 将目录1中的内容递归拷贝到目录2中
mv 路径1/文件名 路径2/ 移动文件位置到指定路径2下
mv 文件名 文件新名称 在当前目录下将文件改名
touch 文件名 创建文件
cat 文件名 查看文件
tail -c 字符数n 文件名 查看文件末尾最后n个字符的内容
tail -c +字符数n 文件名 查看文件中从第n个字符开始到最后的所有内容
tail -n +行数n 文件名 查看文件中从第n行开始到最后的所有内容
tail -n 行数n 文件名 查看文件中最后n行的内容
tail -f 文件名实时监控该文件,文件一旦有更新,就立马把内容输出到终端
tail -n 行数n -f 文件名 查看文件中最新更新的n行内容
ln -s 文件所在路径(必须使用绝对路径) 快捷方式名 为文件创建软链接(快捷方式)
ln 文件名 硬链接名 为文件创建硬链接(类似C++中的引用)
which 命令 找到该命令对应的命令解释器
chmod who [+/-/=] [mode] 文件名 修改对应文件的权限
- 参数
who表示修改谁的权限,可以填写:文件所有者u,文件所属组组员g,其他人o,所有人a(a可省略) - 参数
[+/-/=]表示对权限的操作,可以填写:+:添加权限,-:删除权限,=:覆盖权限 - 参数
[mode]要进行操作的权限(r,w,x),与上一个参数结合起来看。
chmod u + x 文件名 修改对应文件的权限
chmod 777 文件名 修改对应文件的权限(数字法)
r:用4表示,w用2表示,x用1来表示,共三组,每组三位,均用二进制来表示,没有的权限对应的位置上用0来表示。
chown 所有者名1 文件名或目录名 将文件或目录给予所有者1,即更改文件或目录的所属者
chown -R 所有者名1 文件名或目录名 将多级目录递归地给予所有者1,即更改该多级目录的所属者
chgrp 组名 文件名或目录名 改变文件或目录的所属组
目录必须要有执行权限(方便cd进入),且目录的创建和目录内容更改只有目录所属者才有权限(一般目录默认所有者为可以使用sudo的初始root用户————这里是因为创建目录的命令要用到sudo权限才能执行)。
文件的查找
locate /目录1/名字1 搜索目录1下的所有文件名或目录名以名字1开头的文件或目录, 如果搜索到的是目录的话,会将目录下的所有文件的存放路径依次返回,搜索到文件的话,就返回该文件的存放路径
find 要查找的目录 -name "文件名" 按文件名查找
find 要查找的目录 -user 用户名 按查找所有者为指定用户的所有文件和目录
find 要查找的目录 -size +10k 大于10k的文件(按文件大小找)
find 要查找的目录 -size -10k 小于10k的文件(按文件大小找)
find 要查找的目录 -type d|f|p 按文件类型查找(d目录,f普通文件,p管道文件)
find 要查找的目录 -ctime +n 在指定目录下查找n天前创建的文件
find 要查找的目录 -ctime -n 在指定目录下查找n天内创建的文件
find 要查找的目录 -mtime +n 在指定目录下查找n天前修改的文件
find 要查找的目录 -mtime -n 在指定目录下查找n天内修改的文件
find 要查找的目录 -atime +n 在指定目录下查找n天前访问的文件
find 要查找的目录 -atime -n 在指定目录下查找n天内访问的文件
find 要查找的目录 -perm 460 在指定目录下查找权限为r--rw---- 的文件
文件内容的查找
命令 | grep -r "查找的内容" 根据命令执行结果,按照内容查找,将其他内容展示出来
命令 | grep -v "要过滤的内容" 根据命令执行结果,按照内容进行过滤
grep -r "查找的内容" 查找路径 按照内容进行查找,查找指定路径下所有文件的 所有内容当中,指定的内容
grep -v "过滤的内容" 查找路径 按照内容进行过滤,将其他内容展示出来
grep "www" /var/log/test.log 查找test.log文件当中所有的 "www"字符串内容
grep "^指定内容" 文件名 查找文件当中 以指定内容开头的 文件内容
grep "指定内容$" 文件名 查找文件当中 以指定内容结尾的 文件内容
grep "^指定内容1 .* 指定内容2$" 文件名 查找文件当中 以指定内容1开头,指定内容2结尾 的文件内容(.* 表示匹配任意字符)
指令1 | 指令2 当中 | 表示管道符,其能够将前面指令运行的结果传递给后面的指令(作为后面指令的输入)
浏览文件内容
浏览文件内容 的命令: less
-
浏览
test.log文件内容:less /var/log/test.log(退出less命令:回车enter键--->输入:wq) -
同时浏览test.log与test1.log文件内容:
less /var/log/test.log /var/log/test1.log(输入【:n】切换下一个文件,输入【:p】切换上一个文件) -
浏览test.log文件内容:
less /var/log/test.log(按j键表示下一行,按k键表示上一行,按G键表示移动到最后一行,按g键移动到第一行,按ctrl + F键表示向前移动一屏,按ctrl + B键表示向后移动一屏,按ctrl + D键表示向前移动半屏,ctrl + U键表示向后移动半屏)
U盘挂载
/media/ 默认U盘挂载到此目录下
sudo mount 设备名字 要将U盘挂载的目录位置 自定义挂载U盘
设备名字通过sudo fdisk -l命令来查看要将U盘挂载的目录位置通常是/mnt下
sudo umount 要卸载的目录 卸载U盘
压缩包管理
gzip与bzip2
gzip-----.gz格式的压缩包
bzip2-----.bz2格式的压缩包
gzip 文件所在目录/*.txt 压缩当前目录下所有的txt文件,每个txt文件单独压缩,不保留原文件
gzip -dv 压缩文件所在目录 解压文件,不保留原压缩文件
bzip2 -k 压缩文件所在目录 解压文件,保留原压缩文件
bzip2 压缩文件用法与gzip相似,两者都只能压缩文件,不能压缩目录
tar压缩(常用)
参数: c 压缩, x 释放, v 显示提示信息, f 指定压缩文件名字, z 使用gzip方式压缩, j 使用bzip2压缩
必须使用z或j参数,否则该命令只对文件或目录进行打包而不压缩
压缩文件: tar zcvf 生成压缩包的名字 要压缩的文件所在路径
生成压缩包的名字:xxx.zip.gz或xxx.zip.bz2
解压文件到目标目录:tar zxvf 压缩包的名字 -c 目标目录
zip压缩
压缩文件: zip 压缩包名 要压缩的文件或目录所在路径
解压文件到目标目录: unzip 压缩包名 -d 目标目录
-d 目标目录:不加,默认当前目录
管理Ubantu上的各项服务
开启和关闭各项服务
当你在ubantu上下载了一个服务,如redis或mysql,你可以通过以下命令来管理这些服务
sudo systemctl start|stop|restart|status 服务名
其中 start|stop|restart|status 表示任选其一即可,如命令:
sudo systemctl status 服务名表示查看对应服务的状态
服务自启动
- 通过命令
systemctl list-unit-files查看服务(这里指那些系统设置的自启动服务)开机启动的状态 - 通过命令
systemctl disable 服务名来关闭指定服务的自启动 - 通过命令
systemctl enable 服务名来指定服务自启动
定时关机
- 通过命令
sudo shutdown -h 时间可以使系统在指定时间过后,自动关机,时间单位为分钟
修改主机名
如上图,若想修改主机名,可以采用以下命令:
sudo hostnamectl --static set-hostname 修改后的主机名,执行完此命令后,需要重启系统一下才能生效
host映射
当我们需要输入主机名,一般是输入该主机对应的ip地址,如下图,每次都这样做会非常麻烦,因此我们需要一个host映射(主机映射)
在windows操作系统的此路径下C:\Windows\System32\drivers\etc,用写字本打开文件hosts,进行如下更改
更改过后,只需要输入该主机名,windows系统会自动将其自动映射为对应的ip地址
linux 终端
linux 共有七个终端, tty7 为图形界面终端(默认终端),tty1---tty6为文字界面终端
通过键盘上按键ctrl + alt + f1---f7来切换不同终端
tty4:

tty7(默认):

进程管理
ps a 查看当前操作系统下的所有终端的应用程序
ps au 查看所有终端应用程序的更详细信息
ps aux 查看没有终端的应用程序(守护进程)
ps aux|grep bash 按照内容"bash"查找进程
kill -l 查看所有信号
kill -SIGKILL 进程号 杀死对应进程
env 查看当前进程的环境变量
env|grep PATH 按照内容"PATH"查找当前进程的环境变量

linux下环境变量的格式 key:value:value ----- 一个键可以对应多个值
网络相关命令
ifconfig 显示网络信息,可以查看该设备的ip地址,广播地址

ping ip地址 测试本设备能否与对应ip地址的设备正常通信

vim编辑器的使用
vim编辑器是由vi发展而来的一个更加强大的linux通用的文本编辑器,该文本编辑器是在终端窗口使用的
安装命令
sudo apt install vim用vim 打开文件
vim 文件名
一般模式
用vim打开一个文件,就进入一般模式(默认模式)了,该模式下,文件内容不可更改,可以使用键盘上的【上下左右】按键来移动光标,此模式下常用快捷键如下:
yy复制光标所在的当前行内容
y +数字+ y复制从光标所在行到后n行的内容
p将内容粘贴到光标所在的位置
u撤销上一步
dd删除光标所在的当前行内容
d +数字+ d删除从光标所在行到后n行的内容
编辑模式
在一般模式当中,按下按键i即可进入编辑模式,在编辑模式下,可以任意修改该文件的内容,按下按键esc就可以退出该模式
指令模式
在以上两种模式当中,按下按键: 即可进入指令模式,按下按键esc就可以退出该模式,该模式下常用快捷键如下:
linux时间设置
- 输入命令
date会显示当前的系统时间 - 输入命令
date +%Y%m%d显示当前时间(年月日,纯数字) - 输入命令
date "+%Y-%m-%d %H:%M:%S"显示当前时间(年-月-日 时:分:秒,纯数字) - 输入命令
date -d +1day在当前系统时间下加一天,并输出出来
其他命令
man 命令或函数名 查看该命令或函数对应的官方手册
man man手册首页
man catcat命令对应的手册位置

history 查看该系统本地的所有执行过的历史命令
echo 字符串 将该字符串显示(输出)在终端上
$ 这个符号用于从变量中取值
$aa将变量aa中的值取出来
常用快捷键
ctrl + C强制结束进程
ctrl + L清屏
ctrl + Q退出
ctrl + U清除当前已敲的命令
Tab键查看提示(可以防止敲错)
SSH远程连接
当你的linux服务器不在身边时,可以通过ssh服务来进行远程连接,以方便你的使用
Ubantu对应服务的安装
要想使用ssh远程服务,ubantu需要提前安装部署,打开终端,输入命令:
sudo apt update
sudo apt install -y ssh
Xshell 下载与安装
-
下载官网:家庭/学校免费xshell
-
点击安装,一路next即可
-
安装完成后,打开xshell软件,新建会话
- 进行对应的配置,并记住用户名和密码
5.点击确定,连接成功如下图
至此,你就可以通过Xshell来远程操作你的linux 服务器了
Xftp文件传输工具
通过 Xftp文件传输工具,我们可以很方便的让虚拟机当中的ubantu(linux)与本地的windows操作系统进行文件互传
Xftp下载与安装
- 下载官网:家庭/学校免费xshell
- 点击安装,一路next即可
- 安装完成后,打开xftp软件,新建会话(方式和上面
xshell类似) - 新建完成后,如下图
linux硬件监控
通过命令去查看管理linux系统的硬件资源,这就叫硬件监控
磁盘空间
- 输入命令
df -h查看硬盘空间使用情况,重点关注根目录下的情况
- 输入命令
du -h 文件名或目录名查看该文件或目录所占用的磁盘空间 - 输入命令
du -ah 目录名查看该目录以及其内部的所有文件各自所占用的磁盘空间
服务器内存
输入命令 free -m 查看linux服务器的总体内存(主存)情况
进程
- 输入命令
ps -aux查看所有进程,一般配合grep来使用,即ps -aux | grep xxx
结果如下:
- 输入命令
ps -ef查看所有进程以及其各自对应的子进程,一般配合grep来使用,即ps -ef | grep xxx结果如下:
关于这两种命令,若你重点关注进程对CPU和磁盘的占用情况,则你可采用第一种命令,若你重点关注父子进程的关系,则你可采用第二种命令。
- 输入命令
kill 进程号强制关闭对应的进程
网络端口占用
- 输入命令
sudo netstat -nlp | grep 要查找的内容根据指定内容查看对应端口号是否被占用
crontab 系统定时任务
通过设置crontab任务让命令(脚本)在到达指定时间时自动执行。
定时任务的查询与删除
- 输入命令
crontab -l查询当前用户设置的所有定时任务 - 输入命令
crontab -r删除当前用户所有的crontab任务
编辑定时任务
- 重新启动crond服务:
sudo systemctl restart cron - 通过EDITOR环境变量,在执行crontab时选择编辑器,输入命令:
EDITOR=vim crontab -e,命令执行后,进入crontab系统定时任务的编辑阶段,如下图:
3.开始编辑,通过输入五个*号来定时
其中
*/n 表示每隔n个时间执行一次,例如 */20 4,8 * * * 表示每天4点,8点时,每隔10分钟执行一次命令
- 确定好定时后,在定时后面编写脚本,然后退出保存该crontab文件即可,系统到了指定的时间就会自动执行脚本