【Linux 常用命令】

来自Wikioe
Eijux讨论 | 贡献2021年11月26日 (五) 02:15的版本 →‎su
跳到导航 跳到搜索


系统版本

  1. 查看系统的发行版本:
    cat /etc/redhat-release
    CentOS Linux release 7.6.1810 (Core)
    
  2. 查看系统的内核版本:
    uname -r
    5.2.8-1.el7.elrepo.x86_64
    

用户身份切换

由于安全考虑,我们都是使用一般帐号登陆系统的,等有需要进行系统维护或软件更新时才转为 root 的身份来动作。

让一般用户切换到 root 主要有两种方式:

  1. “su -”:直接将身份变成 root 即可。
    • 这个指令需要 root 的密码;
  2. “sudo 指令”:以 root 身份执行指令(而不直接切换到 root)。
    • 并非所有用户都能使用该命令,需要事先设置。

su

su 可以进行任何身份的切换:

[root@study ~]# su [-lm] [-c 指令] [username]
选项与参数:
-   :单纯使用 - ,如“su -”代表使用 login-shell 的变量文件读取方式来登陆系统;
      若使用者名称没有加上去,则代表切换为 root 的身份。
-l  :与 - 类似,但后面需要加欲切换的使用者帐号!也是 login-shell 的方式。
-m  :-m 与 -p 是一样的,表示“使用目前的环境设置,而不读取新使用者的配置文件”
-c  :仅进行一次指令,所以 -c 后面可以加上指令
  • “-”的作用:(涉及 login-shell 与 non-login shell 的变量读取方法)
    1. 不使用“-”:读取的变量设置方式为 non-login shell 的方式,很多原本的变量不会被改变;
    2. 使用“-”:读取的变量设置方式为 login-shell 的方式,连同 PATH / USER / MAIL 等变量都转成新使用者的环境;
    即:“若要完整的切换到新使用者的环境,必须要使用“su - username”或“su -l username””。(如果不指定 username,则切换到 root)
  • 如果仅想要执行一次 root 的指令,可以利用“su - -c "指令串"”的方式来处理。
  • 使用 root 切换成为任何用户时,并不需要输入该用户的密码;
    普通用户切换到其他用户,则需要其他用户的密码。
  • 可用“exit”推出 su 的环境。

sudo

systemctl

systemctl 是 CentOS 7 的服务管理工具中主要的工具,它融合之前 service 和 chkconfig 的功能于一体。

常用命令:

# 启动一个服务:
systemctl start firewalld.service
# 关闭一个服务:
systemctl stop firewalld.service
# 重启一个服务:
systemctl restart firewalld.service
# 显示一个服务的状态:
systemctl status firewalld.service

# 在开机时启用一个服务:
systemctl enable firewalld.service
# 在开机时禁用一个服务:
systemctl disable firewalld.service
# 查看服务是否开机启动:
systemctl is-enabled firewalld.service

# 查看已启动的服务列表:
systemctl list-unit-files|grep enabled
# 查看启动失败的服务列表:
systemctl --failed

防火墙

  1. firewalld 的基本使用:
    # 启动
    systemctl start firewalld
    # 关闭
    systemctl stop firewalld
    # 查看状态
    systemctl status firewalld
    
    # 开机禁用
    systemctl disable firewalld
    # 开机启用
    systemctl enable firewalld
    
    • (“firewalld”或“firewalld.service”)
  2. 配置 firewalld-cmd:
    # 查看版本: 
    firewall-cmd --version
    # 查看帮助: 
    firewall-cmd --help
    # 显示状态: 
    firewall-cmd --state
    # 重新载入防火墙配置
    firewall-cmd --reload
    
    # 添加端口
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    # 删除端口
    firewall-cmd --zone= public --remove-port=80/tcp --permanent
    # 查看端口
    firewall-cmd --zone= public --query-port=80/tcp
    # 查看所有打开的端口: 
    firewall-cmd --zone=public --list-ports
    
    # 查看区域信息:  
    firewall-cmd --get-active-zones
    # 查看指定接口所属区域: 
    firewall-cmd --get-zone-of-interface=eth0
    
    # 拒绝所有包:
    firewall-cmd --panic-on
    # 取消拒绝状态: 
    firewall-cmd --panic-off
    # 查看是否拒绝: 
    firewall-cmd --query-panic
    
    • “--permanent”:永久生效,没有此参数重启后失效。


文件(夹)命令

文件夹常用的命令:查看信息(ls)、复制(cp)、移动(mv)、删除(rm)、创建/修改文件(touch

ls

ls 用于查看文件(夹)的信息

默认显示的只有:非隐藏文件的文件名、以文件名进行排序及文件名代表的颜色显示

选项与参数:

[root@study ~]# ls [-aAdfFhilnrRSt] 文件名或目录名称..
[root@study ~]# ls [--color={never,auto,always}] 文件名或目录名称..
[root@study ~]# ls [--full-time] 文件名或目录名称..
选项与参数:
-a  :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
-A  :全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录
-d  :仅列出目录本身,而不是列出目录内的文件数据(常用)
-f  :直接列出结果,而不进行排序 (ls 默认会以文件名排序!)
-F  :根据文件、目录等信息,给予附加数据结构,例如:
      *:代表可可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
-h  :将文件大小以人类较易读的方式(例如 GB, KB 等等)列出来;
-i  :列出 inode 号码,inode 的意义下一章将会介绍;
-l  :长数据串行出,包含文件的属性与权限等等数据;(常用)
-n  :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在帐号管理提到!)
-r  :将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小;
-R  :连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来;
-S  :以文件大小大小排序,而不是用文件名排序;
-t  :依时间排序,而不是用文件名。
--color=never  :不要依据文件特性给予颜色显示;
--color=always :显示颜色
--color=auto   :让系统自行依据设置来判断是否给予颜色
--full-time    :以完整时间模式 (包含年、月、日、时、分) 输出
--time={atime,ctime} :输出 access 时间或改变权限属性时间(ctime)而非内容变更时间(modification time)

cp

cp 这个指令除了单纯的复制之外,还可以创建链接文件(“快捷方式”),比对两文件的新旧而予以更新,以及复制整个目录等等的功能。

选项与参数:

[root@study ~]# cp [-adfilprsu] 来源文件(source) 目标文件(destination)
[root@study ~]# cp [options] source1 source2 source3 .... directory
选项与参数:
-a  :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明;(常用)
-d  :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;
-f  :为强制(force)的意思,若目标文件已经存在且无法打开,则移除后再尝试一次;
-i  :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l  :进行硬式链接(hard link)的链接文件创建,而非复制文件本身;
-p  :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r  :递回持续复制,用于目录的复制行为;(常用)
-s  :复制成为符号链接文件 (symbolic link),亦即“捷径”文件;
-u  :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制。
--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了。

最后需要注意的,如果来源文件有两个以上,则最后一个目的文件一定要是“目录”才行!
  • 不同身份者执行这个指令会有不同的结果产生,尤其是那个“-a”,“-p”的选项,对于不同身份来说,差异则非常的大。
  • 由于 cp 有种种的文件属性与权限的特性,所以,在复制时,你必须要清楚的了解到:
    • 是否需要完整的保留来源文件的信息?
    • 来源文件是否为链接文件 (symbolic link file)?
    • 来源文件是否为特殊的文件,例如 FIFO, socket 等?
    • 来源文件是否为目录?

mv

mv 用于移动文件与目录,或更名

选项与参数:

[root@study ~]# mv [-fiu] source destination
[root@study ~]# mv [options] source1 source2 source3 .... directory
选项与参数:
-f  :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i  :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u  :若目标文件已经存在,且 source 比较新,才会更新 (update)

rm

rm 用于移除文件或目录

选项与参数:

[root@study ~]# rm [-fir] 文件或目录
选项与参数:
-f  :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;
-i  :互动模式,在删除前会询问使用者是否动作
-r  :递回删除啊!最常用在目录的删除了!【这是非常危险的选项!!!】


rm 使用示例:linux shell下除了某个文件外的其他文件全部删除的命令

通道命令

压缩/解压

Linux 下常见的压缩包格式有 5 种: zip、tar.gz、tar.bz2、tar.xz、tar.Z;

  • 其中:tar 是种打包格式,gz / bz2 后缀才是指代压缩方式(gzip / bzip2);
  • 压缩率一般来说:tar.bz2 > tar.gz > zip > tar;压缩率越高,压缩以及解压的时间也就越长。

支持的格式

格式 命令
常用格式
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
  • 注意:tar 是打包,不是压缩
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz.tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
.tar.bz
解压:tar jxvf FileName.tar.bz
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
  • 注意:“Z”是大写;
其他格式
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
.lha
解压:lha -e FileName.lha
压缩:lha -a FileName.lha FileName
.rpm
解包:rpm2cpio FileName.rpm | cpio -div
.deb
解包:ar p FileName.deb data.tar.gz | tar zxf -

tar

常用参数说明:

参数 描述
操作类型 -c 建立压缩档案
-x 解压
-t 查看内容
# 查看test包中有哪些文件,但不解压
tar -tvf test.tar
-r 向压缩归档文件末尾追加文件
# 在test.tar包中增加文件
tar -rf test.tar testfile
  • 只针对tar包
-u 更新原压缩包中的文件
# 更新压缩包中的test文件
tar -uf test.tar --add-file=test
文件格式 -z 有 gzip 属性的(gzip 格式,以“.tar.gz”/“.tgz”为扩展名)
-j 有 bzip2 属性的(以“.tar.bz2”/“.tar.bz”为扩展名)
-Z 有 compress 属性的(以“.Z”为扩展名)
其他参数 -v 显示详细过程
-f 指定档案名字
  • 这个参数是必须的
  • 这个参数必须是最后一个参数,后面只能接档案名。
-O 将文件解开到标准输出
可选参数
--add-file 向包中添加文件
# 更新压缩包中的test文件
tar -uf test.tar --add-file=test
  • 只针对tar包
--delete 删除包中文件
# 从test.tar中删除test1文件
tar --delete -f test.tar test1
--exclude 排除文件
#打包test目录下所有文件,排除以.log结尾的文件
tar -zcvf test.tar.gz --exclude=test/*.log test/*
--remove-files 移除源文件
# 压缩后删除源文件
tar -zcvf test.tar.gz test.log --remove-files
--strip-components 去除目录
# 解压时去掉一层目录
tar -xvf test.tar.gz --strip-components=1
  • 关于 tar 的详细命令可以使用以下命令获取:
    tar --help
    
  • 事实上, 从 1.15 版本开始 tar 解压时可以自动识别压缩的格式,故不需人为区分压缩格式就能正确解压:
    tar -xvf filename.tar.gz
    tar -xvf filename.tar.bz2
    tar -xvf filename.tar.xz
    tar -xvf filename.tar.Z
    

zip/unzip

zip 和 unzip 命令主要用于处理zip包。

参数说明:

参数 描述
压缩
-d 从压缩文件内删除指定的文件。
-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
-j 只保存文件名称及其内容,而不存放任何目录名称。
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
-u 更换较新的文件到压缩文件内。
-v 显示指令执行过程或显示版本信息。
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
- <压缩效率> 压缩效率是一个介于 1-9 的数值。
解压
-l 显示压缩文件内所包含的文件
-j 只保存文件名称及其内容,而不存放任何目录名称。
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该
-v 显示指令执行过程或显示版本信息。
-d 指定解压目录,目录不存在会创建

示例:

  1. 压缩:
    #打包test目录下的文件
    zip -r test.zip test/ 
    #打包test目录下文件,且压缩包不带test目录
    zip -rj test.zip test/ 
    
    # 指定压缩率打包文件:数值(1-9)越大,压缩率越高,耗时越长
    zip -r8 test.zip test/* 
    
    # 打包符号链接文件
    zip -ry test.zip test
    
    # 向压缩包中增加或更新文件test2
    zip -u test.zip test2 
    
    # 压缩时加密,密码为66666
    zip -r test.zip test1 test -P 66666
    
    # 删除压缩包的特定文件 test
    zip -d test.zip test
    
  2. 解压:
    # 查看压缩包中的文件信息
    # 1、可以看到压缩包中的文件名,日期等信息
    unzip -l test.zip 
    # 2、查看更多信息,例如crc校验信息等
    unzip -v test.zip 
    
    # 解压压缩包,到dir目录
    unzip -o test.zip -d dir
    
    # 解压包中指定的文件(如果不知道需要解压的文件名,可先查看包中的文件)
    # 1、解压包中的 1.log 文件到 dir 目录
    unzip -o test.zip "1.log" -d dir 
    # 2、解压包中所有的 log 文件
    unzip -o tet.zip "*.log" -d dir  
    
    # 解压时去掉目录结构
    zip -oj test.zip -d ./temp
    
    # 解压jar包
    unzip -o java.jar -d dir
    

gzip

tar命令带有 -z 参数,并且打包成 tar.gz 文件时,便调用 gzip 进行了压缩。

  • gzip对文本的压缩率约有 60%~70%,压缩包文件常以 gz 为后缀。

参数说明:

参数 描述
-k 保留源文件
-d 解开压缩文件
-r 递归处理,将指定目录下的所有文件及子目录一并处理
-v 显示指令执行过程

示例:

# 使用 -k 参数保留源文件
# 1、对当前目录下所有文件进行压缩,每个文件一个gz包
gzip -k ./* 
# 2、递归压缩
gzip -rkv ./* 

# 解压
gzip -dv test.gz

bzip2

tar 命令使用 -j 参数将文件打包为 tar.bz2 时,便调用了 bzip2 进行压缩。

  • bzip2 压缩或解压后,会将源文件删除


示例:如果需要保留源文件,可使用 -k 参数

# 压缩test文件
bzip2 -zk test 

# 解压
bzip2 -dk test.bz2  

rar/unrar

rar 和 unrar 命令并非 linux 发行版自带命令,需要另外安装。


示例:

# 压缩:将test文件压缩为test.tar
rar a test.tar test 

# 解压 test.tar
rar e test.rar       
# 解压 test.tar
unrar x test.rar

其他命令

命令 说明
start X 进入图形界面
shutdown -h now 立即关机
  1. poweroff 关机(poweroff -f 强制关机)
shutdown -r now 立即重启
logout 注销
man 命令 显示命令的用法
history 显示命令历史记录
  1. history 5:显示最近使用的5个历史命令

执行历史命令:

  1. !5:执行历史编号为5的命令
  2. !ls:执行最后一次以ls开头的命令
env 显示当前系统的环境变量
  • “tab”键:双击命令提示,单机补全(当前目录下有的)文件名称。

超级管理员

当前用户下使用超级管理员(root):

su - root

关机

  1. shutdown -h now
  2. poweroff

Note:

  1. 用poweroff,三个机器(问题与系统无关,centos、Debian、suse)都出现了
    “System has not been booted with systemd as init system (PID 1). Can't operate.”
    
    需要“sudo poweroff -f”才能关键

清屏

在windows的DOS操作界面里面,清屏的命令是cls,那么在linux 里面的清屏命令是什么呢?

  1. clear:这个命令将会刷新屏幕,本质上只是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之前的操作信息。
  2. Ctrl+l(小写的L):这是一个清屏的快捷键,工作中用得最多的一种清屏方式。【效果同 clear】。
  3. reset:这个命令将完全刷新终端屏幕,之前的终端输入操作信息将都会被清空,这样虽然比较清爽,但整个命令过程速度有点慢,使用较少。
    • 值得一提的是 reset 命令在你的终端控制错乱时非常有用。
      如:“输入字符不出现在光标的位置的情况。还有当你敲击回车键时,新提示符并没有出现在新行上,而是出现在老提示符的前面”。此时reset命令就能用来修正这些问题。
  4. printf "\033c":这个命令它才是真正的清空了终端屏幕,它的功能跟 DOS 里 CMD.EXE 提供的 CLS 效果很相似。

关于“printf "\033c"”

这个命令究竟是做什么的?它的工作原理是什么?

	\033 == \x1B == 27 == ESC

即这个命令变成了 <ESC>c,它是 VT-XXX 中表示“Full Reset (RIS)”的转义码。
它的另一种实现方式也可以这样:

键盘上:“Ctrl+v--->Esc-->输入c再回加”。
  1. (现今我们使用的所有的终端都是VT兼容的)
  2. 但如果你发现自己使用的是一个非常奇怪的终端(如putty),那这个命令可能用不了。
  • printf 是 bash 里内置的命令,内置命令的优先级比其它可执行文件要高。

为命令设置快捷方式

在 PATH 路径下,如 /usr/bin/ 目录下。新建一个名为 cls 的文件,加上执行权限,写入如入内容:

[root@iZbp168 bin]# vim cls
#!/bin/bash
#
printf "\033c"

这样每次需要清屏的时候,只需要输入cls命令就可以了。