Linux命令太多眼花缭乱的,在这整理一下我觉着最基础常用的命令及其选项。
// 文中还有几个”传送门“,后续会”打通“
一般语法形式:命令 [选项] (s) 参数(s)
本文中形式:命令 [选项] (s) 参数(s) 指令解释 // 每条最后的汉字部分都是解释,前面的可能会有缺省
首先是这几个命令用法
1.help [命令] 详细帮助信息
help -d 输出每个主题的简短描述
help -m 以伪 man 手册的格式显示使用方法
2.man [命令] 查看相应的手册
man -w [名称] 查看对应手册位置
3.指令 --help
大部分命令可以在这三种方法中找的帮助信息,在其中一种方法里没有找到就找另外两种方法,再没有就百度
poweroff 关闭系统
shutdown 关闭或重启系统
直接看例子:
shutdown -r now 立即重启系统
shutdown -r 02:11 2点11重启系统
shutdown -h now 立即关闭系统
shutdown -h +45 45分钟后关闭系统
shutdown -c 取消运行shutdown
halt 关闭系统 (和poweroff区别就是halt不会断电,在虚拟机里试试就看出来了)
reboot 重启
init 切换系统运行级别
init 0 关闭系统
init 6 重启系统
vi [选项] [文件]
vim
vi vim详细看这:
pwd 显示当前路径
cd [路径] 更改工作路径 // change directory
ls 列出当前目录下所有子目录和文件信息
-C 多列输出,纵向排序
-R 递归列出遇到的子目录
-a (all) 列出所有文件,包括以 “.” 开头的隐含文件
-A 显示除 “.” 和 “…” 外的所有文件。
-c 使用“状态改变时间”代替“文件修改时间”为依据来排序(使用“ -t ”选项时)或列出(使用“ -l ”选项时)。
-u 使用最近访问时间代替最近修改时间为依据来排序(使用 “ -t ”选项时)或列出(使用“ -l ”选项时)。
-r 逆序排列。
-t 按时间信息排序。
-1 单列输出。
-l 除每个文件名外,增加显示文件类型、权限、硬链接数、所有者名、组名、大小(byte)、及时间信息(如未指明是其它时间即指修改时间)。对于6个月以上的文件或超出未来1时的文件,时间信息中的时分将被年代取代。
dir ( 也被安装为命令 d ) 等同于“ ls -C ”;即,文件缺省是多列输出,纵向排序。
vdir ( 也被安装为命令 v ) 等同于“ ls -l ”;即,文件缺省是按长格式输出。
dir 和 ls作用一样, 用ls输出的有颜色,试试就看出来了
dirs 显示当前目录
例:
[root@localhost eclipse-workspace]# dirs
~/eclipse-workspace
dirname 名称 输出去除尾部’/'字符部分的名称
dirname /usr/bin/ -> /usr
dirname dir1/str dir2/str -> dir1 dir2
dirname stdio.h -> .
basename [选项] 名称 [后缀] // 去除前面的部分
basename /usr/bin/sort -> sort
basename include/stdio.h .h -> stdio
basename -s .h include/stdio.h -> stdio
basename -a any/str1 any/str2 -> str1 str2 (必须有-a 和dirname多个参数的情况区别)
touch [选项] 文件名 创建文件
-c, --no-create 不创建文件如果不存在的话
touch [选项] 文件名 修改时间
-a 修改文件的访问时间atime
-m 修改文件修改时间mtime
-r file 将参照文件file相应的时间戳记的数值作为指定文件时间戳记的新值( use this file’s times instead of current time)
-t [[CC]YY]MMDDhhmm[.ss] 用[[CC]YY]MMDDhhmm[.ss]将当前时间改为指定时间
// [[CC]YY]MMDDhhmm[.ss]从左至右分别是月份,日期,小时,分钟,可选的世纪和年,以及可选的秒
-d, --date=字符串 使用指定字符串表示时间而非当前时间
(-d, --date=time 使用时间值 time 代替指定文件的戳记值.可以包含月份 名,时区名以及`am’和 `pm’等等)
mkdir 目录名 创建目录 默认权限755
-m 设置权限
-p 创建多级目录
(-p, --parents 为所给出的目录建立丢失了的父目录)
rmdir 删除空目录。如果[目录]由多个路径名组成,从最后一个路径名开始依次删除,如果所给出的目录不为空,则报错,删除非空目录可以用rm -r
-p [目录] 递归删除空目录,当子目录删除后其父目录为空时,父目录一并被删除(如果你在某上一级目录中执行的操作的话,你在的这一级空目录不会被删除,递归到这停止)
cp 源文件|目录 目标文件|目录 复制文件或目录
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
-r -R (recursive)递归复制
-l (link)不复制只链接文件 硬链接
-f, --force 在覆盖目标文件前不给提示要求用户确认
-i,–interactive(交互的,互动的) 在覆盖目标文件前给出提示要求确认
install 复制文件和设置属性
install 和cp差不多 但比cp还多一个-m选项
-m, --mode=模式 自行设置权限模式(像chmod)
例:install -m 744 a.txt /opt
mv 源文件|目录 目标文件|目录 改名,移动
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
源可以有多个 [root@localhost opt]# mv a.txt b.txt module
-f, --force 覆盖前不询问
-i, --interactive 覆盖前询问
-n, --no-clobber 不覆盖已存在文件
如果指定了-i、-f、-n 中的多个,仅最后一个生效。
-u, --update move only when the SOURCE file is newer than the destination file or when the destination file is missing
rm 删除文件或目录
-f, --force ignore nonexistent files and arguments, never prompt
-i prompt before every removal
-r, -R, --recursive remove directories and their contents recursively
这类比前面的选项就好了
file du tree ln 直接上使用的例子:
file 文件名 查询文件类型
du 文件|目录(s) 查看文件目录磁盘占用量
du 查看当前目录的磁盘占用量
tree 目录 以树状图逐级列出目录的内容
tree 当前目录的树状图
ln 源文件 链接文件 创建硬链接
ln -s 源文件 链接文件 创建软链接 (符号链接)
stat 显示文件或文件系统状态
stat [选项] 文件|目录
-f 显示文件或目录所在文件系统的状态信息
-t 简明形式显示
例:
[root@localhost spark-local]# stat README.md
文件:"README.md"
大小:4488  块:16 IO 块:4096 普通文件
设备:802h/2050d Inode:6419561 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 1000/ a2416) Gid:( 1000/ a2416)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2021-10-18 23:06:59.978664827 +0800
最近更改:2020-06-06 21:34:17.000000000 +0800
最近改动:2021-10-10 19:09:47.293271005 +0800
创建时间:- 
scp 安全复制(远程文件复制程序)
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 … [[user@]host2:]file2 这用法看这很乱,看下面的例子。
-r 递归复制整个目录。
例:scp -r /opt/module/jdk a2416@192.168.1.111:/opt/module
// a2416是用户名,目标主机上的用户,192.168.1.111是目标主机
这个例子是是将本主机的文件jdk传给192.168.1.111。scp还可以将其他主机的文件传给自己,或将其他主机的文件传给其他主机,就和cp命令类似,就是在写参数地址时要加上用户和主机,有权限就行。
还有个rcp 没用过
rsync (remote sync)是一个文件传输程序,能够有效的远程更新
(sync是一个将缓冲文件写入磁盘中的命令。如果学Hadoop或spark或其他的需要同步文件等操作的,会做一个集群分发脚本xsync)
-v, --verbose 显示复制过程
-a,–archive 存档模式; = -rlptgoD // 下面是rlptgoD 一个-a选项就够用了
-r, --recursive recurse into directories 递归复制
-l, --links copy symlinks as symlinks 将符号链接复制为符号链接
-p, --perms preserve permissions 保留权限
-t, --times preserve modification times 保留修改时间
-g, --group preserve group 保留组
-o, --owner preserve owner (super-user only) 保留所有者(仅限超级用户)
-D same as --devices --specials 保留设备信息
例:rsync -av hadoop-3.1.3/ a2416@hadoop103:/opt/module/hadoop-3.1.3/
cat [选项]… [文件]… // 只读
-b, --number-nonblank 对非空输出行编号
-E, --show-ends 在每行结束处显示"$"
-n, --number 对输出的所有行编号
-s, --squeeze-blank 不输出多行空行 (多行空格替换为一行空格)
more 分页显示文本文件
less 回卷显示文本文件
more less 区别用法详细看这:
head 显示文件前若干行 默认10行
-n K 显示前K行
-n -K 显示除了最后K行以外的所有内容
-c K 显示前K字节
-v 显示文件头
tail 显示文件最后若干行 默认10行
使用方法类比head
grep 查找符合条件的字符串
grep [选项]… 查找模式 [文件]…
-i, --ignore-case 忽略大小写
-n, --line-number 输出的同时打印行号
-H, --with-filename 为每一匹配项打印文件名
例:grep -n ‘ss’ a.txt 在a.txt文件中搜索匹配‘ss’字符串并加上行号
gerp ‘ss’ a* .txt 查找所有以a开头的txt文件里的’ss‘字符串
history | grep ls 查找历史命令中的ls命令(history命令和 管道符| 下面写)
find 列出所有符合条件的文件
基础用法:
find 文件名
不基础用法:
find --help 值得你拥有(使用find时选项很重要,需要详细了解的可以去看help命令文档)
cal 显示日历信息 了解了解练着玩玩,还挺好玩的
用法:cal [选项] [[[日] 月] 年]
选项:
-1, --one 只显示当前月份(默认)
-3, --three 显示上个月、当月和下个月
-s, --sunday 周日作为一周第一天
-m, --monday 周一用为一周第一天
-j, --julian 输出儒略日(儒略日是一种不记年·月,只记日的历法)
-y, --year 输出整年
date 超级用户可以显示和设置系统日期和时间 一般用户可以显示日期和时间
-d, --date=STRING display time described by STRING, not ‘now’ 显示字符串时间
-r, --reference=文件 显示文件指定文件的最后修改时间
-s, --set=STRING set time described by STRING 设置时间
date 显示日期和时间
date +‘%m’ 显示月份 // 指定格式输出 显示时间是可以使用时间域
date “+%Y-%m-%d %H:%M:%S”(功能描述:显示年月日时分秒)
date -s 20201103 设置日期为2020年11月03日
clockdiff 主机之间测量时钟差
例:
[root@localhost ~]# clockdiff 192.168.219.100
..
host=192.168.219.100 rtt=562(280)ms/0ms delta=18ms/18ms Tue Oct 19 22:03:18 2021
sleep 暂停指定时间
'm’表示分钟,'h’表示小时,'d’表示天。给定两个或多个参数,暂停时间为参数值的和。
例:sleep 20 暂停20秒
sleep 2h 暂停2小时
> 输出重定向 : 会将原来的文件的内容覆盖
>> 追加: 不会覆盖原来文件的内容,而是追加到文件的尾部。
例: history>a.txt cal>>a.txt
| 管道符
“|”左边命令的输出就会作为“|”右边命令的输入,此命令可连续使用,第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。
例:
[root@localhost ~]# ls | grep b
b.txt
b.txt.zip
例子中ls命令列出当前目录下文件和目录通过管道符传给grep命令进行筛选查找名称包括’b’的文件或目录
xargs(英文全拼: eXtended ARGuments)xargs 作用有很多,详细去看Linux xargs 命令和这xargs 命令教程
在这只说它的一个作用,将左侧命令的输出作为右边命令的参数(对我现在刚入门的水平来说,我觉着这个命令简直了,真的很有用)
例:
[root@localhost a]# find *c*
abc.txt
c
ffc
[root@localhost a]# find *c* | xargs rm -rf
找到所有包含’c’的文件或文件夹全部删掉
source 在当前shell环境中从指定文件读入和执行命令
例:source /etc/profile
history 查看命令历史记录
-c 删除所有条目从而清空历史列表。
例:history 查看所有历史命令
history 10 查看最近10条命令
history -c 清空命令历史记录
fc 从历史列表中列出或者重新编辑并执行命令
-l 列出行而不编辑
-n 列举时省略行号
-r 反转行的顺序(最新行在前)
fc 详细看这:Linux_fc命令用法_-s选项
alias 定义或显示别名
用法:alias 别名=命令
例:alias lsl=‘ls -l’ 定义别名ok // 可以看看自己的已定义的别名,里面可能有个alias ll=‘ls -l --color=auto’
(修改根目录下的.bashrc文件可以永久定义别名)
alias 查看所有已定义的别名
unalias 取消别名
例:unalias lsl
export 显示或设置环境变量
-n 删除指定的环境变量
-p 列出所有的环境变量
例:export -p 列出所有环境变量
export NIHAO=2 设置环境变量NIHAO的值为2
export -n NIHAO 删除环境变量NIHAO
// 一开始学Linux时配置环境变量时,比如jdk,都会用到export,打开profile文件,然后加入 export PATH="$PATH:/opt/jdk/bin"
set 显示和设置shell变量
set A 10
unset 删除变量或函数
unset A
以上三个命令在shell编程时常用
env 查看和设置环境变量
passwd 给用户指定或者修改密码
-d 删除用户密码
例:passwd lala 给lala设置密码
passwd -d lala 删除lala的密码
useradd 创建用户 // 创建的用户是锁定的,需要用passwd设置密码后使用
还有个adduser 和它用法一样
例:useradd lala 创建一个lala用户 // 打开/home 然后会看到一个叫lala的文件夹
usermod 修改用户
-g, --gid GROUP 强制使用 GROUP 为新主组
例:user -g mm lala 将lala修改到mm组
userdel 删除用户
-r, --remove 删除主目录和邮件池
-f, --force 强制删除
groupadd 创建组群
例:groupadd mm 新建mm组
groupmod 修改组群
groupdel 删除组
gpasswd 设置组密码或向组中添加或删除用户
以上都是useradd、usermod、groupadd、groupmod、gpasswd的基础用法
用户和组的操作详细看这:
groups 显示指定用户的组
id 显示用户的uid gid 选项有-u -G -g
例:
[root@localhost home]# id lala
uid=1008(lala) gid=1008(lala) 组=1008(lala)
su 切换其他用户
例:su lala 切换到lala用户
sudo 以另一个用户执行命令
菜鸟教程是这么说的:Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。
也就是说临时赋予当前用户root权限
比如我们现在不是超级用户,需要编辑某个只有root才有权限编辑的文件,就可以使用sudo,比如:
sudo vim profile
w 详细查询已登录当前计算机的用户
who 显示已登录当前计算机的用户的简单信息
whoami 显示与当前的有效 用户ID相关联的用户名
logname 显示当前用户的登录名称
users 用单独的一行显示出当前登录的用户
last 显示近期用户登录情况
lastb 列出登录系统失败的用户信息
lastlog 查看用户上次登录的时间
chmod 改变文件和目录的访问权限
-R, --recursive 递归改变目录及其所有子目录的文件的权限
例:chmod -R 744 a 递归改变文件夹a的权限
权限操作详细看这:
chown 更改文件和目录的用户所有者和组所有者
-R 递归将下级的所有文件和目录一起更改
例: chown -R lala a 将文件夹及其下级目录的用户所有者改为lala
chown .lala a 将文件a的组改为lala
chown :lala a 将文件a的组改为lala
chgrp 更改文件或目录的所属组
例:chgrp lala a
getfacl 查看文件的ACL
例:
[root@localhost ~]# getfacl a
# file: a
# owner: lala
# group: lala
user::rwx
group::r--
other::r--
还有setfacl和chacl命令,–help 值得你拥有
lsattr -a -R -v 可以执行试试
接下来是几个压缩和解压缩命令
tar 将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件。
例:tar 常用的两种:
tar -zcvf a.tar.gz a1.txt 将a1.txt压缩为a.tar.gz
tar -zxvf a.tar.gz [目录] 将a.tar.gz解压到[目录]下(缺省目录的话就是解压到当前目录;a.tar.gz文件可以通过 目录/a.tar.gz确定,不一定是在a.tar.gz的父目录下解压,啊,应该不用我说吧,多嘴了)
gzip 压缩或解压缩gzip文件
例:gzip b.txt 压缩b.txt文件
gzip -d b.txt.gz 解压b.txt.gz文件
gunzip 解药gzip文件
例:gunzip b.txt.gz
zip 压缩zip文件
例:zip b.txt.zip b.txt 将文件b.txt压缩为b.txt.zip
unzip 解压缩zip文件
例:unzip b.txt.zip 解压b.txt.zip文件
压缩解压,查看压缩文件等更多操作看这:
rpm RedHat Package Manager(RedHat 软件包管理工具)
例:rpm -i XXX.rpm 安装XXX.rpm
yum 管理器
例:yum install XXX 安装XXX
rpm yum详细看这
Ubuntu用的是apt
ps 报告当前进程的快照。显示有关选择活动进程的信息。如果你想要重复更新选择和显示的信息,使用top代替。
常用形式:ps -aux
top 显示Linux进程。top程序提供了一个运行系统的动态实时视图。 它可以显示系统摘要信息,以及当前由Linux内核管理的进程或线程列表。 显示的系统摘要信息的类型以及为进程显示的信息的类型、顺序和大小都是用户可配置的,并且该配置可以在重启时保持不变。
kill 终止进程 通过进程号杀死进程
-9 强制终止
例:kill -9 1000
killall 通过进程名称杀死进程
-u 杀死指定用户的进程
例:killall 进程名
killall -u lala 杀死用户lala的进程
ntsysv 配置服务在系统启动时自启
chkconfig 为系统服务更新和查询运行级别信息
用法:chkconfig [--list] [--type <type>] [name]
chkconfig --add <name>
chkconfig --del <name>
chkconfig --override <name>
chkconfig [--level <levels>] [--type <type>] <name> <on|off|reset|resetpriorities>
例:chkconfig --list 查看不同运行级别下个服务开机启动情况
centos7里chkconfig有变动,在这就不深究了,可以执行下面的
systemctl list-unit-files 列出 systemd 服务
systemctl list-dependencies [target] 查看在具体 target 启用的服务
service 运行System V init脚本
选项: --status-all 查看系统中所有服务现在的运行状态
start 启动服务
stop 停止服务
restart 重启服务
status 查看状态
reload 重新载入服务配置
例:service iptables start 启动防火墙
注意:centos7中 service和iptables都有所变动,centos7中使用 systemctl 和 firewalld
firewalld具体看这:
systemctl 查询或发送控制命令到systemd管理器。
例:systemctl restart firewalld 重启防火墙
crontab 针对个人用户维护crontab文件
-e edit user’s crontab 编辑用户的crontab
-l list user’s crontab 列出用户的crontab
-r delete user’s crontab 删除用户的crontab
crontab具体操作看这
ifconfig 显示和配置网络接口
ifdown <设备名> 关闭网络接口
例:ifdown ens33
ifup 开启网络接口
例:ifup ens33
ping 测试与目标计算机中间的连通性
例:ping www.baidu.com
ping 192.168.1.100
mtr 进行网络诊断
例:mtr 192.168.1.100
netstat 查看系统网络情况
常用选项例子:netstat -anp | more
netstat -tulnp
netstat详细看这:
ip 显示/操作路由、设备、策略路由和隧道
例:ip address 查看网卡协议地址
ip address show ens33 查看网卡ens33
setup 文本模式系统配置工具
nmap详细看这:
ssh 远程登录主机
还有一些试着玩玩的命令:
lsmod 显示内核中模块的状态
lscpu 显示CPU信息
nproc 显示当前进程可用CPU数
lspci 显示所有PCI设备
lsscsi 显示SCSI设备
lsusb 显示USB设备
dmidecode 查看服务器型号,主板序列号,系统系列号,内存信息等
arch 显示计算机主机的体系结构
sestatus 查看当前SELinux状态
lsblk 显示块设备
time ls /root 查看执行ls /root命令的资源使用时间
uptime 显示系统已经运行的时间
ipcs 提供IPC设备信息
ssh-keygen 创建ssh密钥
sshagent 存储用于公钥验证的私钥
ssh-add 添加RSA或DSA身份的认证代理
ssh-keyscan 收集主机公钥
echo 在显示器上显示文字
printf 格式打印数据
clear 清屏 快捷键Ctrl+L 也行
type 显示命令类型
mysql -uroot -p 登录mysql数据库
hostname 显示或修改计算机主机名
本文除参考命令帮助文档外,还参考了《Linux命令应用大词典》於岳编著