Linux 命令在线查询网站
首先介绍一个 Linux 命令的在线查询网站,里面有几乎所有的 Linux 的命令和参数信息。基本上就是英文文档的中文翻译,很好用。
查看命令的帮助文档
系统命令一般都会有帮助文档,可以通过命令查看:
1 | man 命令 |
比如:
1 | man ls |
关机和重启
直接拔电源关闭计算机是不可取的,可能会丢失数据。即便使用虚拟机,也不建议直接关闭。更好的方式是使用命令关机和重启:
1 | init 0 # 关机 |
alias 别名
alias 命令用来给一个命令加上一个昵称,当你以后需要经常输入一个很长的命令的时候,可以创建一个别名,会让操作变得简单许多。
直接输入alias,查看当前系统中已经设置了的别名:
1 | alias |
取消别名:
1 | unalias |
创建别名:
1 | alias rm='rm -i' # 这里 -i 的含义是删除文件时会有确认提示 |
案例
当用户输入rm命令的时候,给他一个提示,”你这个傻蛋,求你别瞎用 rm 了!”
1
alias rm='echo 你这个傻蛋,别瞎用 rm 了!'
例如每次都要ssh登录,命令太长
1
2ssh root@123.206.16.61
alias ssh1='ssh root@123.206.16.61'
工作中常见的四个环境:
本地开发环境
测试服务器环境
预生产服务器环境(和线上的标准几乎一致)
生产服务器环境(线上)
管道符 |
管道符 |
用来将前一个命令输出的返回结果作为后一个命令的参数输入。
可以常用来检测进程信息
1
ps -ef|grep mysql
检测端口情况
1
netstat -tunlp|grep 80
netstat 网络状态
netstat 命令用于显示 Linux 的网络端口情况。
1 | 参数解释 -tunlp 显示tcp upd 所有的socket连接信息 |
过滤出 nginx 是否存活的命令,查看 nginx 的 80 端口是否存在
1 | [root@localhost tmp]# netstat -tunlp | grep 'nginx' |
ps 进程状态
ps 命令用于检测进程情况。
1 | ps -ef # 列出 Linux 上所有的进程信息,以及进程 id 号等 |
与 grep命令联用,过滤出出 vim 有关的进程:
1 | [root@chaogelinux ~]# ps -ef | grep vim |
kill 根据 pid 杀进程
杀死进程的命令,基本语法为:
1 | kill 进程id号 |
基本用法:
获取进程的 id 号:
1
ps -ef
用 kill 命令杀死进程:
1
2kill 进程id
kill -9 进程id # 强制杀死进程,-9 为强制性的信号参数
pkill 根据进程名杀进程
若进程 id 不可知,或者明确知道进程名。可以通过 pkill 的命令,根据进程名杀进程:
1 | pkill nginx |
grep 过滤
grep 命令是 shell 三剑客之一,用于过滤字符串。其基本语法为:
1 | grep 参数 你要过滤的文件 |
它的常用参数有:
- i:忽略大小写
- n:输出行号
- v:反向选择
过滤字符串信息:
1 | [root@localhost tmp]# grep -i 'all' settings.py |
过滤掉某字符串的行:
1 | [root@localhost tmp]# grep -vi 'all' settings.py |
过滤掉空白行(支持正则):
1 | [root@localhost tmp]# grep -v '^$' settings.py |
过滤掉注释行:
1 | [root@localhost tmp]# grep -v '^#' settings.py |
过滤掉,空白行和注释行,可以用管道符,多次过滤:
1 | 1.先过滤掉空白行 |
scp 安全复制
scp 命令用于在两台 Linux 服务器之间远程传输文件,其基本语法为:
1 | scp 待发送的文件 目标路径 |
案例 1:把本地的某文件,发送到另一台服务器的 /tmp
目录下(本地的局域网机器,是能发送给远程机器的,通过路由器出去):
1 | yumac: ~ yuchao$scp ./yasuo.txt root@123.206.16.61:/tmp/ # 发送普通的文件给远程服务器 |
案例 2:把远程机器的东西,给拿到我本地来
1 | yumac: lol yuchao$scp root@123.206.16.61:/tmp/好好学习奥力给.txt ./ |
再举两个案例:
准备 2 台 Linux 虚拟机,确保互相可以通信,它们的 IP 分别为 192.168.178.181
和 192.168.178.253
。
情况 1,我登录在 192.168.178.181
,我要把 181 这台机器的资料,发给 253 的那台机器:
1 | scp ./test.txt root@192.168.178.253:/tmp/ |
情况 2,我还是登录在 181 的机器,我要拿到远程机器 253 的一个文件:
1 | scp root@192.168.178.253:/tmp/test.txt /tmp/ |
修改 Linux 语言为中文
1 | export LC_ALL=zh_CN.UTF-8 |
lrzsz 工具
这个可以用于 Windows 和 Linux 之间互相传递文件,主要用于 Xshell 的文件拖拽功能。
使用 lrzsz 工具之前,需要安装这个工具包:
1 | yum install lrzsz -y |
这个工具提供了两个命令:rz 和 sz。
- 直接在 Xshell 上输入 rz,就会蹦出一个文件接收的界面,用于获取 Windows 的文件
- 在 Xshell 上输入
sz file.txt
,也会蹦出一个界面,用于发送资料给 Windows - 也可以直接用鼠标,拖动 Windows 的资料,发给 Linux
xftp 工具
用于 Windows 和 Linux 之间传递大量的文件,支持断点续传。
直接下载使用即可
du 文件夹大小
统计文件,文件夹大小有两种方式:
使用 ls 命令:
1 | ls -lh /tmp # -h 参数用来给文件大小加单位 |
使用 du 命令:
1 | du -h . #显示出当前文件夹下所有内容的大小 |
top 资源管理器
top 命令相当于 Linux 系统的任务管理器和资源管理器:
1 | top |
- 输入命令 top 进入任务管理器
- 按下 q 键退出 top 命令
uptime 运行时间
uptime 用于查看系统运行时长:
1 | uptime |
free 内存占用
free 命令用于显示内存的使用情况
1 | free -m #以M单位显示内存情况 |
chattr 和 lsattr 权限设置
这两条命令不常见,其应用场景可以参见 记录腾讯云中矿机病毒处理过程(重装系统了fu*k)。
chattr 是给文件设置特殊权限的命令;
lsattr 是检查文件特殊权限的命令。
1 | chattr +i file #给文件加上禁止删除的锁 |
date 查看系统时间
可以直接输入 date 命令查看当前时间:
1 | date |
ntpdate 时间同步
用于同步 Linux 系统时间的命令。
服务器的时间是非常重要的,会影响到程序的正常运行,尤其是一些定时任务。
如果使用 date 命令发现系统时间不正确,使用如下命令即可时间同步:
1 | ntpdate -u ntp.aliyun.com #和阿里的ntp时间服务器同步,更新时间 |
注:这是永久修改时间的命令。
wget 下载
在线获取一个 url 资源的命令,可以用作爬虫命令。
在使用之前,需要单独安装 wget:
1 | yum install wget -y |
使用:
获取一个图片 url 资源
1
wget https://pythonav.com/media/teacher/wupeiqi.png
支持俩递归爬取的参数,能获取网站静态资源
1
wget -r -p www.luffycity.com #递归爬取路飞的静态资源,css js font等
curl 访问网址
curl 向指定地址发送 http 请求,并接收返回响应,基本用法为:
1 | curl https://www.baidu.com |
Linux 的用户管理
QQ 群一般有三个角色:群主、管理员和普通群成员。类似地,Linux 系统也有三种用户身份:root 用户、管理员用户和普通用户:
- QQ 群主,想干嘛就干嘛,想踢人就踢人 ——– 等于 Linux 的 root 用户,权利最大
- QQ 群管理员,群主给与他的比较大的权限 ——– 等于 Linux 命令加上 sudo,默认以 root 去执行命令
- 渣渣用户,QQ 群里的小白,权利特别低 ——– 等于 Linux 的普通用户,用于保证服务器安全,防止删除等危险操作
UID 和 GID
UID,用户的 id 号,root 是 0,普通用户从 1000 开始
GID,是用户组的 id 号
Linux 下存放用户账户信息的文件是 /etc/passwd
useradd 创建用户
只有 root 有权限,创建普通用户,默认 uid 从 1000 开始递进。
1 | useradd sure |
userdel 删除用户
使用 userdel 命令删除已经存在的用户:
1 | userdel sure |
passwd 修改密码
修改用户密码,只有 root 可以操作。
1 | passwd sure |
su 切换用户
su 命令用于用户切换,root 切换普通用户不要密码
普通用户之间切换需要密码
1 | su - sure # 切换到sure用户,中间的减号代表完全的环境变量切换,一定要加上 |
id 产看用户信息
id 命令用于查看用户的 uid 等信息
1 | [root@localhost test]# id sure |
sudo 命令
当普通用户执行命令权限不够的时候,使用 sudo,强大自己的权限。
比如要访问 /root
文件夹。但这个文件夹就像皇宫一样,不是所有人想进就能进去的。只有具有 root 权限的用户,比如 root 用户才有权限访问。来百姓无法进入皇宫,普通用户无法访问 /root
文件夹。
sudo 命令就好比是写着“如朕亲临”的令牌。拿着这个令牌的老百姓便也可以随意出入皇宫,普通用户使用 sudo 命令就可以访问我们的 /root
文件夹了。
要给普通用户赋予 sudo 命令权限,需在 root 下进行配置,步骤如下:
打开 sudo 的配置文件
1
visudo
也可以使用 vim 直接修改
/etc/sudoers
文件。使用visudo
命令修改会有语法检测,更专业。找到如下配置行,添加你允许使用sudo的用户名字
1
2
3
4
5# Allow root to run any commands anywhere
root ALL=(ALL) ALL
caixukun ALL=(ALL) ALL
haohao ALL=(ALL) ALL
laowang ALL=(ALL) ALL使用 sudo 命令,在你敲的命令前,加上 sudo 即可:
1
sudo ls /root
Linux 的文件和目录权限
创建一个 happy.txt
文件,并查看文件的详细信息:
1 | [root@localhost test]# touch happy.txt |
我们看到,信息行的最前面,是一行奇怪的符号:-rw-r--r--
。它的含义是:
- 它的 user 属主是 root,user 属主的权限是
rw-
(可以读,可写,不可执行) - 它的属组 group 是 root,group 属组的权限是只读的,代表在 root 组里的用户都可以读这个
happy.txt
- 此时假设一个普通用户 sure 登录了机器,对于
happy.txt
来说,sure 就是一个 other 其他用户,只读权限
第一列指代的是文件权限,常见的文件类型有:
-
普通文本d
文件夹l
软连接
后面九列,分别是属主、属组和其他用户对该文件的权限。每个符号的含义为:
r
readable,有可读的权限w
writable,可写x
executable,可执行-
没有该权限
权限符号 | 解释 | 普通文件 | 文件夹 |
---|---|---|---|
r | readable,有可读权限 | cat、more等读取操作 | ls 等读取操作 |
w | writable,可写 | vim、vi、echo 等写入操作 | touch、mkdir 等在文件夹中创建文件的操作 |
x | executable,可执行 | 可以用解释器执行 | cd 等进入文件夹的操作 |
没有该权限 | - | - |
需要注意的是,文件权限的顺序只能是 rwx 而不是其他,不可乱序。
Linux 的用户身份有三个:
当前这个文件属于谁——-user—属主
当前在这个文件属于哪个组—-group—属组
其他人—这个文件和当前登录的系统用户没有任何关系—–other
这 3 类角色对同一个文件都有不同的读、写、执行权限
chmod 修改文件权限
change mode,更改文件权限的命令
1 | chmod u+x file # 给user用户添加一个x可执行权限 |
用 sure 普通用户给文件的 other 添加一个w写的权限
1 | [sure@localhost ~]$ sudo chmod o+w happy.txt |
r、w、x 权限可分别转化为数字 4、2、1:
权限分配 | 属主 | 属组 | 其他用户 | ||||||
---|---|---|---|---|---|---|---|---|---|
权限项 | 读 | 写 | 执行 | 读 | 写 | 执行 | 读 | 写 | 执行 |
字符表示 | r | w | x | r | w | x | r | w | x |
数字表示 | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
换句话说,就是按照 rwx 顺序,若有该权限,则在对应位置写为 1,若无该权限,则写为零。最后得到一个三位二进制数,将其转为十进制数,即可得到权限的数字。
然我们重新看一下前面的 happy.txt 文件的详细信息:
1 | -rw-r--r--. 1 root root 0 Feb 7 19:32 happy.txt |
现在我们要修改这个文件,只有属主可写,其他人都没有权限,用数字权限转化。
属主可写,权限用二进制表示是 010,转换为十进制为 2;
属组和其他用户无权限,二进制权限为 000,转换为十进制也是 0;
因此,应该将文件权限修改为 200:
1
chmod 200 happy.txt #这个代表 user是 2 只写的,group和other都没有权限
如果我们要给文件设置成 user 可读可写,group 可读可写,其他人只能写,那么:
属主可读可写,用二进制表示该是 110,转换为十进制就是 6;
属组可读写,二进制为 110,十进制为 6;
其他用户只能写,二进制位 010,十进制位 2;
因此,文件权限应为 662:
1
chmod 662 happy.txt
同样地,已知用户权限的数字,可以倒过来推导用户权限。例如,请解读如下权限:
1 | chmod 235 happy.txt |
- 属主的权限为 2,转换为二进制是 010,按照 rwx 的位置,可知属主只有可读权限;
- 属组权限为 3,转换为二进制是 011,可写,可执行;
- 其他用户权限为 5,二进制为 101,可读可执行。
ln 软链接
创建软链接的命令,类似于创建快捷方式,其用法为:
1 | ln -s 源文件绝对路径 快捷方式绝对路径 |
tar 压缩解压缩
打包、压缩、解压缩的命令,压缩包的后缀名通常是 .tar.gz
或 .tgz
常用参数如下:
1 | -z 调用 gzip 压缩资源,节省磁盘空间 |
例如,把 /tmp
下所有的内容,进行压缩打包,节省磁盘空间
1 | tar -zcvf /opt/alltmp.tgz ./* # 打包且压缩/tmp下所有内容,生成一个压缩文件,放到opt下 |
unzip 压缩
unzip 命令用来解压缩 zip 格式的压缩文件:
1 | unzip file.zip |
若因为跨系统(如从 Windows 转移到 Linux)而造成文件名乱码,可以尝试在解压时指定编码:
1 | unzip -O utf8 day016.zip |
查看系统发行版
Redhat 系 Linux 系统发行版查看方法:
1 | cat /etc/redhat-release |
Linux 系统通用查看方法:
1 | cat /etc/os-release |
查看系统信息
查看系统详细信息:
1 | [root@localhost l1]# uname -a |
systemctl 软件启停管理
只要是通过 yum 安装的软件,都可以用 systemctl 系统服务管理命令,进行启停管理:
1 | systemctl start/stop/restart/status nginx #分别是 启动,停止,重启,查看状态 |
crontab 定时任务
老板给你下达一个任务:每周一的凌晨三点,启动一下 nginx。你当然可以在周一早上起个大早,在三点钟启动一下 nginx。不过我想你一定不愿意这样做。幸运的是,你可以设置一个定时任务来做这个事情。你可以设定一个定时任务,每周一的凌晨三点执行你需要的命令。
CentOS 系统创建定时任务的命令是 crontab。
在 /etc
目录下有一个 crontab 文件,这个就是系统任务调度的配置文件:
1 | vim /etc/crontab |
我们可以看到里面的配置提示:
1 | SHELL=/bin/bash |
最后一行为 crontab 的基本设置语法,即:
1 | 分 时 日 月 周 你要执行的命令绝对路径 |
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
详细的设置可以参考这个图片:
直接来我们通过一系列的练习题,深入了解 crontab 命令的编写规则:
每分钟执行一次命令
1
* * * * * 绝对路径的命令 #每分钟执行命令
每小时的整点,执行命令
1
0 * * * * 绝对路径的命令 #每小时的整点执行
每小时的 3、15 分钟执行命令
1
3,15 * * * * 绝对路径的命令
在上午 8-11 点的第 3 和第 15 分钟执行
1
3,15 8-11 * * * 绝对路径的命令
每晚 6 点半执行命令
1
30 18 * * * command
没周六、日的凌晨 1:30 执行命令
1
30 1 * * 6,7 command
每周一到周五的凌晨 1 点,清空
/tmp
目录的所有文件1
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*
每晚的 21:30 重启 nginx
1
30 21 * * * /usr/bin/systemctl restart nginx
每月的 1、10、22 日的下午 4:45 重启 nginx
1
45 16 1,10,22 * * /usr/bin/systemctl restart nginx
每个星期一的上午 8 点和 11 点的第 3 到 15 分钟执行命令
1
3-15 8,11 * * 1 command
crontab 命令的用法
1 | crontab (选项)(参数) |
常用参数有:
-e
:编辑该用户的计时器设置;-l
:列出该用户的计时器设置;-r
:删除该用户的计时器设置;-u<用户名称>
:指定要设定计时器的用户名称。
定时任务的文件存放在 /var/spool/cron
crontab 的使用步骤如下:
输入命令,打开定时任务配置文件
1
crontab -e
写入 crontab 命令语句,注意命令尽量使用绝对路径,绝对路径可通过 which 命令获取
查看定时任务
1
crontab -l
如果不再需要定时任务,使用命令删除:
1
crontab -r
防火墙关闭
防火墙是为了保护服务器安全,运维人员会编写防火墙语句,控制服务器的流量出入。
新手学习直接关闭即可,影响实验。以后的防火墙也是由运维设置,会在不影响项目正常运行的前提下保障安全,而不是系统自带防火墙那样死板。
关闭防火墙服务的语句有如下这么几个,按需任选其一即可:
1 | iptables -F # 清空防火墙规则,重启恢复 |
关于防火墙的其他操作还有:
1 | systemctl status firewalld # 查看防火墙状态 |
关闭 se-linux
se-linux 是 Linux 系统中的信息提示工具,很多时候也是不需要的,我们可以将其关闭掉。
关闭 se-linux 需要修改它的配置文件。配置文件位于 /etc/selinux/config
:
1 | vi /etc/selinux/config |
将文件中的 SELINUX 对应的值设置为 disabled:
1 | # This file controls the state of SELinux on the system. |
保存退出。设置不会立即生效,重启后生效。