Linux 常用命令
Linux 常用命令
本文只记录个人日常备忘的命令,详细命令手册推荐查看:https://www.runoob.com/linux/linux-command-manual.html
1、文件
rz/sz(上传下载)
如果没有安装,可以使用 yum install lrzsz -y 来安装。
# 上传文件
rz
# 上传文件,如果有同名则覆盖
rz -y
# 下载一个文件
sz filename
# 下载多个文件
sz filename1 filename2tar(压缩解压)
语法
tar [主选项+辅选项] 文件或者目录其中主选项是必须要有的,它告诉 tar 要做什么,辅助选项是选用。
参数
主选项(以下三个只能同时出现一个)
-c:压缩-x:解压-t:预览压缩包中的文件列表
辅选项
-z:是否用gzip来压缩或解压,对应的格式为xxx.tar.gz或xxx.tgz-j:是否用bzip2压缩或解压,对应的格式为xxx.tar.bz2-v:压缩的过程显示文件(常用)-f:目标的压缩包文件名,在该参数后要立即接文件名,不能再加其他参数-p:使用源文件的原属性(属性不会根据用户而变)--exclude filename:压缩过程中排除掉指定文件
示例
touch demo.txt
# 压缩文件为.tar.gz格式并打印过程
tar -czvf demo.tar.gz demo.txt
# 查看压缩包里的文件列表
tar -tzvf demo.tar.gz
# 解压demo.tar.gz压缩包
tar -xzvf demo.tar.gzmkdir(创建目录)
示例
# 在a目录下创建b目录,-p表示创建完整目录(a不存在时也会创建)
mkdir -p a/bmv(移动)
语法
mv [参数] src dest| 类型 | src为目录 | src为文件 |
|---|---|---|
dest为目录 | dest已存在时,将src移动到dest中;dest不存在时,将src重命名为dest | src移动到dest中 |
dest为文件 | 出错,不支持的操作 | src重命名为dest |
注意:当目标目录或文件已存在时,不加参数的执行会自动覆盖原已存在的目录或文件,这很严重。
参数
-b:当目标目录或文件存在时,会为已存在的目录或文件自动创建备份文件(在名称后加~)-i:如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。-f:如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。-n:不要覆盖任何已存在的文件或目录。-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
示例
# 将a.txt重命名为b.txt
mv a.txt b.txt
# 将 /usr/test 目录下的所有目录和文件移动到当前目录下
mv /usr/test/* .2、用户
id(查看用户信息)
显示用户以及所属群组的实际与有效 ID。若两个 ID 相同,则仅显示实际 ID。若仅指定用户名称,则显示目前用户的 ID。
语法
id [-gGnru][--help][--version][用户名称]参数
-g或--group:显示用户所属群组的ID-G或--groups:显示用户所属附加群组的ID-n或--name:显示用户,所属群组或附加群组的名称-r或--real:显示实际ID-u或--user:显示用户ID-help:显示帮助-version:显示版本信息
示例
# 查看当前用户信息
id
# 输出
uid=0(root) gid=0(root) groups=0(root)su(切换用户身份)
用于变更为其他用户的身份,除 root 外,需要输入该用户的密码,所有用户均可使用该命令。
语法
# 不带任何参数表示要切换到root用户
su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]参数
-f或--fast:不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh-m -p或--preserve-environment:执行 su 时不改变环境变数-c command或--command=command:变更为帐号为 USER 的用户并执行指令(command)后再变回原来用户-s shell或--shell=shell:指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该用户(USER) shell--help显示说明文件--version显示版本资讯--l或--login这个参数加了之后,就好像是重新 login 为该用户一样,大部份环境变数(HOME SHELL USER等等)都是以该用户(USER)为主,并且工作目录也会改变,如果没有指定 USER ,默认是 rootUSER欲变更的用户帐号ARG传入新的 shell 参数
示例
# 变更帐号为 root 并在执行 ls 指令后退出变回原使用者
su -c ls rootsudo(受限的特权)
后面跟命令行作为参数,并以 root 身份执行,且需要输入口令(只一次,默认 5 分钟内没有再次使用 sudo,则需再次输入口令);
管理员通过配置 /etc/sudoers 指定用户可以执行的特权命令。
# 以系统管理员身份(或以 -u 更改为其他人)执行指令
sudo command
# 显示版本号
sudo -V
# 显示版本号及使用帮助
sudo -h
# 显示出自己(执行 sudo 的使用者)的权限
sudo -l
# 因为 sudo 在第一次执行或是在N分钟(默认5)内没有执行会问密码,该参数是重新做一次确认,如果超过N分钟,也会问密码
sudo -v
# 强制用户在下一次执行sudo时问密码(无论是否超过N分钟)
sudo -k
# 执行环境变量中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
sudo -s
# 将环境变量中的HOME目录指定为要变更身份的用户目录(不加 -u 参数就是root)
sudo -H
# 其他略......3、系统
systemctl(服务管理)
systemctl 是 CentOS 7 的服务管理工具中主要的工具,它融合之前 service 和 chkconfig 的功能于一体。历史上 Linux 的启动一直采用 init 进程,这种方式有两种缺点:①启动时间长;init 进程为串行启动,只有前一个进程启动完才能启动下一个。②启动脚本复杂;init 进程只是执行启动脚本,而脚本具体做什么需要自己去处理各种情况,这往往使脚本变得很长。
systemd 就是为了解决这些问题诞生的,根据 Linux 惯例,字母 d 是守护进程的缩写,所以 systemd 就是要守护整个系统;systemd 取代了 initd,成为系统第一个进程(PID 等于 1),其他进程都是它的子进程。
示例
# 启动服务
systemctl start xxx.service
# 停止服务
systemctl stop xxx.service
# 重启服务
systemctl restart xxx.service
# 重新加载服务的配置
systemctl reload xxx.service
# 杀死服务的所有子进程
systemctl kill xxx.service
# 查看服务状态
systemctl status xxx.service
# 设置服务开机启动
systemctl enable xxx.service
# 设置服务开机不启动
systemctl disable xxx.service
# 查看服务是否是开机启动
systemctl is-enabled xxx.service
# 查看服务是否正在运行
systemctl is-active xxx.service
# 查看服务是否运行失败
systemctl is-failed xxx.service
# 查看服务的依赖关系
systemctl list-dependencies xxx.service
# 查看服务的所有依赖关系,包括target类型
systemctl list-dependencies --all xxx.service
# 查看开机启动的服务
systemctl list-unit-files|grep enabled参考
- https://www.cnblogs.com/zwcry/p/9602756.html
- https://www.linuxprobe.com/linux-systemctl.html
- https://www.linuxprobe.com/you-need-know-process.html
watch(周期性执行命令)
watch 命令在命令行中运行一个指定命令,并将其输出实时显示在终端上,这对于监控程序的输出或者周期性地执行命令非常有用。
语法
watch [选项] 命令参数
-n或--interval:指定执行间隔秒数,默认 2 秒-d或--differences:高亮显示变化的部分-t或--no-title:不在顶部显示标题栏,仅显示命令输出结果
此处只列举了部分,其他参数可使用 watch -h 查看。
示例
# 每隔1秒执行一下指定命令
watch -n 1 "docker ps"
# 每隔5秒中执行一下指定命令,并高亮显示有变化的地方
watch -d -n 5 "ps -ef|grep java"4、网络
firewall-cmd(防火墙管理)
CentOS 7.0 以后采用防火墙(对应进程 firewalld)来管理端口,在之前为 iptables。当然还有一个命令 firewall-offline-cmd,这个命令是 firewalld 守护进程的脱机命令行客户端,只有当 firewalld 服务没有运行时才应该使用它。
# 使用systemctl的方式管理自身状态
systemctl 选项 firewalld
# 开启端口
# --zone:作用域,这个参数可选
# --add-port:添加端口,格式为 端口/通讯协议
# --permanent:永久生效,否则开机失效
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 关闭端口
firewall-cmd --remove-port=8080/tcp --permanent
# 查看开放的端口,返回端口列表
firewall-cmd --zone=public --list-ports
# 查看某端口是否开放,返回yes、no
firewall-cmd --query-port=8080/tcp
# 不重启重新加载配置(重要!修改之后一定要重新加载,否则不会生效)
firewall-cmd --reload
# 查看防火墙状态
firewall-cmd --state
# 查看所有的区域信息
firewall-cmd --list-all-zonesscp(内网服务器间传文件)
语法
scp [参数] <源地址(用户名@IP地址或主机名)>:<文件路径> <目的地址(用户名 @IP 地址或主机名)>:<文件路径>示例
# 把本地的test.txt文件拷贝到150机器的/usr/local/目录下
scp /home/test.txt root@192.168.1.150:/usr/local/
# 通过指定端口,将目标服务器上的demo.txt文件复制到当前服务器的当前目录下(反过来也可)
scp -P2202 root@192.168.1.150:/home/cmes/demo.txt ./5、系统设置
rpm(包管理)
语法
rpm [参数]参数
-i:安装指定的rpm包-v:显示指令执行过程-vv:显示详细的指令执行过程-h或--hash:通过打印#符号来展示当前的安装进度-u或--upgrade:升级指定的rpm包(会保留软件的配置文件)-q:查询已安装的软件包-a:列出所有信息-e或--erase:删除已安装的软件包
示例
# 安装软件包
rpm -ivh demo.rpm
# 查询已安装的jdk信息
rpm -qa jdk*
rpm -qa | grep jdk
# 卸载软件
# --nodeps:忽略依赖关系强制卸载(想想是否有必要)
# --test -vv:模拟删除软件包的过程,并不会真正删除
rpm -ev jdk1.8.0_131-1.8.0_131-fcs.x86_646、实践
查看系统相关信息
- CPU:
lscpu - 内存:
free -h - 硬盘:
df -hT(以人类可读的方式显示文件系统的硬盘使用情况)
lsblk(列出所有可用块设备、显示逻辑磁盘信息)
fdisk -l(查看挂载硬盘个数及分区情况)
- GPU:
nvidia-smi(明确知道是NVIDIA显卡,使用其命令)
lshw -C display
lspci -vnn | grep VGA -A 12
lspci | grep vga(如果后面有个十六进制代码,可以直接去https://admin.pci-ids.ucw.cz/mods/PC/10de?action=help?help=pci查询显卡信息,参考文档https://cloud.tencent.com/developer/article/2109897)
在文件中搜索指定内容
# 查询当前目录下所有txt文件中是否包含某个字符串
grep -r "搜索内容" *.txtMD5文件校验便捷命令
# 校验当前目录(含子目录)下的所有文件并将校验和输出到test.md5文件中
find ./ -type f -print0 | xargs -0 md5sum > test.md5
# 反向校验test.md5内容中的各文件校验和是否匹配
md5sum -c test.md5目录或文件占用大小统计


