测试工程师的linux 命令学习(持续更新中)
1.ls
"""1.ls"""
ls -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出 ls -l等同于 ll
第一列共10位,第1位表示文档类型,d表示目录,-表示普通文件,l表示链接文件。后9位,依次对应三种身份所拥有的权限,身份顺序为:owner、group、others,权限顺序为:readable、writable、excutable。如:-r-xr-x—的含义为当前文档是一个文件,拥有者可读、可执行,同一个群组下的用户,可读、可执行,其他人没有任何权限。
第二列表示链接数,表示有多少个文件链接到inode号码。
第三列表示拥有者
第四列表示所属群组
第五列表示文档容量大小,单位字节
第六列表示文档最后修改时间,注意不是文档的创建时间
第七列表示文档名称。以点(.)开头的是隐藏文档
linux查看命令中-h参数,通常是指Human readable也就是说把文件的大小转成我们熟悉的大小单位如
K、M、G
如
ll -h
- rws
setuid:该位是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令
那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 如果本来在该位上有x, 则这些特殊标志显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T)
2.who am i
"""2.who am i """
显示当前登录时用的用户名 如root
3.top
"""3.top """
top 查看服务器总体的系统运行状态和cpu的使用率
直接输入大写的M 按照 %MEM降序排列
直接输入大写的P 按照 %CPU降序排列
Z 黑白彩色
q 退出
top -c: 显示完整的命令
4.cat
"""4.cat """
cat(英文全拼:concatenate)
cat filename 查看某个文件内容
cat /dev/null > file_name 清空某个文件
5.grep
"""5.grep Global Regular Expression Print(全局正则表达式打印) """
用于对文件内容进行搜索匹配 一般和cat一起使用 如 cat XXX.txt | grep -n 123
-E :开启扩展(Extend)的正则表达式。
-i :忽略大小写(ignore case)。
-v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。
-n :显示行号
-w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker
-c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
-o :只显示被模式匹配到的字符串。
--color :将匹配到的内容以颜色高亮显示。
-A n:显示匹配到的字符串所在的行及其后n行,after
-B n:显示匹配到的字符串所在的行及其前n行,before
-C n:显示匹配到的字符串所在的行及其前后各n行,context
查找mysql.log文件中含有emission的行
使用联合筛选 如要名称和日期 and
的关系,这是指同一条日志同时要满足的条件
cat mysql.log | grep "市经道路与铁路交叉二期工程" | grep ”building“
查询mysql日志中含有 “car_inout_data” 或 “building”的数据or
关系,这是指某条日志只要查看其中一个就可以
tail -f mysql.log | grep "car_inout_data|building"
目前使用来看这个命令不是那么稳定,需要转义一下
tail -f mysql.log | grep "car_inout_data\|building"
追踪实时的数据
tail mysql.log -f | grep -C 1 "市经道路与铁路交叉二期工程"
实时追踪不含有 car 和and关系
point的,这是指某条日志不包含其中一个都不显示
tail -f mysql.log | grep -v “car” | grep -v “point”
-
2022年3月24日更新 实时追踪不含有 car 或者 point的行,这是指某条日志不包含其中一个都不显示。同
tail -f mysql.log | grep -v "car" | grep -v "point"
一样的效果tail -f mysql.log | egrep -v "car|point"
查看日志末尾10行
tail -n 10 filename
循环实时查看最后10行
tail -fn 10 filename
查询日志前10行
head -n 10 filename
2022年4月1日更新 更新服务器时间
硬件时间:计算机自己有自己的时间,也就是硬件时间,hard clock,也就是存在 BIOS 里那个时间
服务器时间:计算机启动时,就要读取硬件时间
6.date 查看当前服务器时间
"""6.date """
date -s "20220401 23:59:59" 设置服务器时间
hwclock --show 显示硬件时间
hwclock --hctosys 将硬件时间写入系统时间
date
date -s "20220401 23:59:59"
hwclock --show
hwclock --hctosys
7.df -h
7 . 查看当前主机磁盘存储空间 df:disk free
df -h
- H与h的区别 大写 -H:在某些命令中,如 df -H、du -H,大写的 -H 表示以“基于十进制的单位”显示结果。这意味着磁盘空间大小 以 1000 的倍数进行计算和显示。例如,1 GB 表示 1000 MB,而不是 1024 MB。
小写 -h:在许多命令中,如 df -h、du -h,小写的 -h 表示以“人类可读的单位”显示结果。这意味着磁盘空间大小以更易读的方式进行显示,使用 K(千字节)、M(兆字节)、G(吉字节)等单位。例如,1 GB 表示 1 吉字节。 - 如下图所示
df -h /xxx
可以查看此文件在哪块硬盘(存储位置)上
上图中 /dev/vad1
已经满了导致系统不可用,但是不知道要删除哪个文件夹下的文件
此时可以df -h /xxx
来查看文件在哪块硬盘上,就可以通过删除下面的文件来腾出空间
8.查看服务器版本
hostnamectl status
9.代码自动补全
yum -y install bash-completion
输入host按tab就会出现之相关的命令
10 rm
rm 加文件名 删除文件需要确认
rm -f 强制删除文件 不需要确认 f:force
- 删除某个文件夹下所有文件
cd 该文件夹下
rm -f *
2022-07-01更新
11 nohup
nohup python3 gps_minitor.py & 注释:使用python3 后台运行 py程序
12 jobs
jobs 是Linux命令 jobs 命令显示了当前 shell 环境中已启动的作业状态
jobs -l 多显示一列ID号
current 一个“+”(加标志)标识了将被 fg 或 bg 命令作为缺省值使用的作业。这个作业标识也能够使用 %+ (百分号、加号)或 %% (双百分号)来指定。
如果当前缺省作业退出,就用一个“-”(减号标志)来标识将要成为缺省作业的作业。这个作业标识也可以用 %-(百分号、减号)来指定。
state 显示以下值之一:
Running
表示此作业没有被信号挂起并没有退出。
Done
表示此作业已经完成并返回退出状态 0。
Done (code)
表示此作业已经正常完成和退出并返回指定的非零退出状态码。这个代码用一个十进制数来表示。
Stopped
表示此作业已经挂起。
killed
表示此作业正在被杀死
13 find
Linux find 命令用来在指定目录下查找文件。
find / -name 'java' 查找根目录下 名称叫做java的文件
2022-07-05更新
14 lsof
losf: list of file 列出当前系统打开文件
加端口号,查看端口被谁占用
如lsof -i:8888 查看8888端口是否被占用
kill -9 8888即可释放改端口
15 cron
cron:CRON的全称:Command Run On (UNIX scheduler) 可以理解为在linux/unix上运行程序
具体用法如下 不要被某些文章误导了 要看就要看服务器给出的文章
比如 下图表达式根本解释不出来 浪费了笔者 1 2个小时
cron在线工具
crontab -l 查看正在运行中的定时任务
corntab -e 编辑某个用户的任务 只用这个编辑吧 避免报错和不必要的麻烦
注意:cron -e 应全部写绝对路径 并以/开头 比如 /usr/local/python3.9/bin/python3 否则会报错
不建议直接使用python3 建议 使用 which python3 得到执行目录 把这个路径拷贝下来
corntab -e 按 i 进入编辑模式 esc键退出编辑 ctrl + : 输入wq 保存并退出
若出现下图加横线的语句便是安装成功
centos 7.x
/sbin/service crond status //查看状态
/sbin/service crond start //启动
/sbin/service crond stop //停止
/sbin/service crond restart //重启
sbin/service crond reload //重载
cron 的log 在var/log/cron里 可以查看是否执行 计划任务
备注 上图的根目录没有写 /python_project/导致失败 修改之后执行成功
记录一个完整的流程
corntab -e
输入
*/1 * * * * cd /python_project/script/tfbluemq/ && /usr/local/python3.9/bin/python3 testc.py
出现
重启corn使其立即生效
/sbin/service crond restart
查看是否生效
tail -f var/log/cron
crontab -e
实际修改的是/var/spool/cron下的root 文件
2022-07-12
16 curl
curl(CommandLine Uniform Resource Locator) 用于访问 上传和下载 网络上的资源
访问百度
-
获取本机公网IP(实际上是访问了一个网址,返回ip地址)
curl ifcojnfig.me
-
下载文件到当前路径下
curl -O url
2022-09-05
17 mv
-
mv :MV 的全称是 Move(移动) 目前用来修改文件名把老的文件名(old)换成新的文件名(new)
mv old new
2022-09-10
18 find
-
查询指定目录下查找文件
find / -name python # / 代表根目录 -name python 文件名称符合 name 为 pyhton 的文件 pyhton
19 ctrl + z 与 ctrl + c
-
Ctrl+C和Ctrl+Z都是中断命令,但作用不同。
Ctrl+C是发送SIGINT信号,终止一个进程。 Ctrl+Z是发送SIGSTOP信号,挂起一个进程,将作业放置到后台(暂停状态)。与此同时,可以通过fg重启前台被中断的任务,也可以通过bg 把中断的任务放到后台执行。
20 fg bg
-
fg 将命令进程号码为N的命令进程放到前台执行,同%N
fg % [jobnumber]
-
bg 将命令进程号码为N的命令进程放到后台执行,同%N
bg % [jobnumber]
jobnumber可以通过jobs -l获得
21 ps
-
ps :Process Status(进程状态) 查看进程信息
-
-e: 显示所有/每个(evevy)进程。这个选项让 ps 显示系统中的所有进程,而不仅仅是当前用户的进程。 -f: 全格式输出(full-format)。这个选项使 ps 输出更加详细的信息,包括 UID(用户ID)、PID(进程ID)、PPID(父进程ID)、C(CPU使用率)、STIME(启动时间)、TTY(终端)、TIME(占用的CPU时间)和 CMD(命令名称或路径)。 ps -ef | grep nginx # 显示完成的格式输出并含有nginx的进程
-
找出并杀死含有xxx的进程
ps -ef | grep xxx| grep -v grep | cut -c 9-15 | xargs kill -s 9
说明:
“grep firefox”的输出结果是,所有含有关键字“firefox”的进程。
“grep -v grep”是在列出的进程中去除含有关键字“grep”的进程。
“cut -c 9-15”是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
“xargs kill -s 9”中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -s 9”命令的参数,并执行该命令。“kill -s 9”会强行杀掉指定进程。
22 yum install -y bash-completion
- 用于敲击tab键时补全命令
23 firewalld
- 开启防火墙
systemctl start firewalld
- 开启某个端口
firewall-cmd --zone=public --add-port=8041/tcp --permanent
- 重载已添加的端口
firewall-cmd --reload
- 查看开放的端口
firewall-cmd --zone=public --list-ports
24 解决中文乱码
- 下载中文包
sudo yum install langpacks-zh_CN
- 查看已安装的语言包列表
locale -a
- 设置系统默认语言,请使用以下命令:
localectl set-locale LANG=zh_CN.UTF-8
25 firewall
- 启动防火墙
systemctl start firewalld
- 开放防火墙端口 port=xxxx
firewall-cmd --zone=public --add-port=8041/tcp --permanent
- 重载已添加的端口
firewall-cmd --reload
- 查看开放的端口
firewall-cmd --zone=public --list-ports
- 删除防火墙
firewall-cmd --zone=public --remove-port=80/tcp --permanent
26 tar
-
压缩 czf 解压缩 xzf
-
tar:Tape Archive(磁带归档)是一个用于打包文件和目录的命令,它将多个文件和目录组合成一个单独的归档文件。tar
命令本身并不执行压缩操作,而只是将文件和目录打包到一个文件中,通常使用 .tar 扩展名。
想要使用tar
命令打包则需要使用tar -czvf archive.tar.gz file.txt
-
将 file.txt 打包并使用 gzip 进行压缩成archive.tar.gz;参数说明 -czvf
- c 表示创建归档文件
- z:使用 gzip 压缩算法进行压缩。文件名为tar.gz
- v 表示显示详细的操作过程
- f 后面跟着 archive.tar.gz,指定归档文件的名称
说明如下:
gzip 是用于进行文件压缩的命令,它使用 gzip 压缩算法对单个文件进行压缩,并将其扩展名更改为 .gz。gzip 压缩通常与 tar
命令结合使用,以在打包文件时进行压缩,从而生成 .tar.gz 或 .tgz 格式的压缩文件。因此,如果你只想打包文件和目录,但不进行压缩,可以使用 tar 命令。示例如下:
压缩文件:tar -cvf archive.tar file.txt (将 file.txt 打包成 archive.tar)
压缩目录:tar -cvf archive.tar directory/ (将 directory 目录打包成 archive.tar)
如果你希望在打包文件时进行压缩,可以使用 tar 命令结合 gzip 进行压缩。示例如下:压缩文件:tar -czvf archive.tar.gz file.txt (将 file.txt 打包并使用 gzip 进行压缩成
archive.tar.gz) 压缩目录:tar -czvf archive.tar.gz directory/ (将 directory
目录打包并使用 gzip 进行压缩成 archive.tar.gz) 综上所述,如果你只需要打包文件和目录,选择 tar
命令;如果你需要在打包时进行压缩,可以选择 tar 结合 gzip 进行压缩
-
解压缩
tar -xzvf archive.tar.gz
tar:是一个用于打包和解包文件的命令。
- x:表示解压缩(或提取)归档文件的内容。
- z:表示解压缩时使用 gzip 压缩算法。
- v:显示详细的操作过程,将输出被处理的文件列表。
- f archive.tar.gz:指定要处理的归档文件的名称为 archive.tar.gz。
执行该命令后,tar 将会解压缩 archive.tar.gz 文件,并将其中的文件提取到当前目录中。解压缩后的文件和目录将在屏幕上以详细的方式显示出来。
解压缩到指定目录:
tar -xzvf archive.tar.gz -C /path/to/directory
27 scp
-
scp( Secure Copy 安全拷贝)命令用于在不同的服务器之间安全地复制文件或目录。
scp /path/to/file username@destination:/path/to/destination
下面是 scp 命令的具体解释:
- /path/to/file:指定源服务器上要复制的文件或目录的路径。
- username:目标服务器上的用户名,你需要使用目标服务器的有效用户名进行替换。
- destination:目标服务器的主机名或 IP 地址。
- :/path/to/destination:指定要将文件复制到的目标服务器上的路径。冒号前的部分表示目标服务器上的路径,你可以根据需要进行替换。
28 不同服务器的数据库之前复制表
1若两台服务器可以进行通信
- 注意格式和大小写,
-p
后面的xxx
是数据库密码,-P
后面跟端口号 --skip-lock-tables
是不锁表进行传输 看实际需要进行添加或删除newgps
是库名vehicle_point_2024-10-10
是表名pv
是查看进度 需要yum install -y pv
进行安装 若是不需要查看进入则删除pv |
mysqldump -h 221.237.xxx.xx -P 3336 -u epuser -p'xxxx' --skip-lock-tables newgps vehicle_point_2024-10-10 | pv | mysql -h 106.75.xxx.xxx -u epuser -p'xxxx' newgps
- 不需要查看进度命令 不需要锁表命令
mysqldump -h 221.237.xxx.xxx -P 3336 -u epuser -p'xxxx' newgps vehicle_point_2024-10-10 | mysql -h 106.75.138.97 -u epuser -p'xxxx' newgps
2 实测最稳定的方式(执行了1.9G的sql文件,其它方式可能连接会断开)
- 1 在需要同步复制数据的服务器上(我的路径为
/root
)使用下列命令导出sql
nohup mysqldump -h 221.237.xxx.xxx -P 3336 -u epuser -p'xxx' --skip-lock-tables newgps vehicle_point_2024-10-10 > original_table.sql &
2 进入mysql,并选择数据库名
mysql -u xxx -p’xxx‘
# 选择数据库名
use xxx;
3 执行sql文件
source /root/original_table.sql
29 whereis和which
which
和whereis
是两个不同的命令,都是用来查找命令的位置如mysql
、python
、nginx
等
1whereis
搜索更全面更广
2 在环境变量中的命令,which
才可以找到
which
命令
which
用于查找系统 PATH 环境变量中指定命令的位置。- 它会按照
$PATH
变量中定义的路径顺序查找是否存在指定命令。 - 如果在
$PATH
中找不到该命令(如nginx
)
which nginx
返回no nginx
,说明nginx
不在系统的$PATH
中。
whereis
命令
whereis
查找命令的位置,包括二进制文件、源代码和手册页的位置。- 它不仅仅依赖于
$PATH
变量,还会在一些系统默认目录中进行查找,因此更全面。 whereis
的结果通常包含了命令的所有相关文件。
whereis nginx
找到了 nginx
安装在 /usr/local/nginx
下,表明 nginx
安装在该路径下,但不在 $PATH
目录中。
总结
nginx
在 /usr/local/nginx
目录下,但这个目录未添加到 $PATH
中,导致 which
命令无法找到它。如果需要通过直接输入 nginx
命令来运行,可以将 /usr/local/nginx
添加到系统的 $PATH
变量中,例如:
export PATH=$PATH:/usr/local/nginx
这样之后可以直接使用 nginx 命令而无需指定完整路径
30 du
du
:Disk Usage,用于显示文件和文件夹的磁盘使用情况。
- 查看此文件夹下总共大小
du -sh xxx
-s
:–summarize,表示只显示指定目录的总大小,而不是显示其每个文件和子目录的大小。-h
:–human-readable,表示以“人类可读”的格式显示大小,自动将结果以 KB、MB、GB 等单位显示出来。- xxx: 文件夹名称
31 unzip
解压.zip
后缀文件,一般用于服务器上打包失败,必须上传本地打包的文件,应压缩为.zip
格式,.rar
在windows上不好解压
此命令若在服务器上没找到,sudo yum install unzip
则需要下载相应的库包
以centos服务器为例
sudo yum install unzip
32 公网ip地址查询
curl ifconfig.me
实际上是访问某个网址,此网址将公网ip返回给服务器
33 上传文件
此程序可以通过直接拖拽文件到xshell界面上传文件到xshell目前所在路径下,非常好用!
sudo yum install lrzsz