【Linux 常用命令】

来自Wikioe
跳到导航 跳到搜索


系统版本

  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

命令用法:

[root@study ~]# sudo [-b] [-u 新使用者帐号]
选项与参数:
-b  :将后续的指令放到背景中让系统自行执行,而不与目前的 shell 产生影响
-u  :后面可以接欲切换的使用者,若无此项则代表切换身份为 root 。


因为 sudo 的执行是这样的流程:

  1. 当使用者执行 sudo 时,系统于 /etc/sudoers 文件中搜寻该使用者是否有执行 sudo 的权限;
  2. 若使用者具有可执行 sudo 的权限后,便让使用者“输入使用者自己的密码”来确认;
  3. 若密码输入成功,便开始进行 sudo 后续接的指令(但 root 执行 sudo 时,不需要输入密码);
  4. 若欲切换的身份与执行者身份相同,那也不需要输入密码。

所以:

并非所有人都能够执行 sudo,而是仅有规范到 /etc/sudoers 内的用户才能够执行 sudo 这个指令


visudo 与 /etc/sudoers

除了 root 之外的其他帐号,若想要使用 sudo 执行属于 root 的权限指令,则 root 需要先使用 visudo 去修改 /etc/sudoers ,让该帐号能够使用全部或部分的 root 指令功能。

“/etc/sudoers”的数据格式:

    使用者帐号    登陆者的来源主机名称=(可切换的身份)  可下达的指令
      root             ALL=(ALL)               ALL

visudo 的设置方式:

  1. 单一使用者可进行 root 所有指令,与 sudoers 文件语法:
    [root@study ~]# visudo
    ....(前面省略)....
    root    ALL=(ALL)       ALL  <==找到这一行,大约在 98 行左右
    vbird1  ALL=(ALL)       ALL  <==这一行是你要新增的!
    ....(下面省略)....
    
  2. 利用 wheel 群组,以及免密码的功能处理 visudo:
    [root@study ~]# visudo
    ....(前面省略)....
    %wheel     ALL=(ALL)    ALL <==大约在 106 行左右,请将这行的 # 拿掉!
    ....(中间省略)....
    %wheel     ALL=(ALL)   NOPASSWD: ALL <==大约在 109 行左右,请将这行的 # 拿掉!
    ....(下面省略)....
    
    [root@study ~]# usermod -a -G wheel pro1 <==将 pro1 加入 wheel 的支持
    
    • 在最左边加上“%”,表示后面接的是一个“群组”;
    • 右边的“NOPASSWD ”,表示免除密码输入;
    如上,加入 wheel 这个群组的使用者(pro1),就能够使用 sudo 切换任何身份来操作任何指令。
  3. 有限制的指令操作:
    [root@study ~]# visudo
    myuser1      ALL=(root)    /usr/bin/passwd, !/usr/bin/passwd root
    
    • 最后指令务必用绝对路径;
    • “!指令”表示“不可执行”该指令;
  4. 通过别名创建 visudo:
    [root@study ~]# visudo
    User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2
    Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
    ADMPW   ALL=(root)  ADMPWCOM
    
    • 这个帐号名称一定要使用大写字符来处理,包括“Cmnd_Alias”(命令别名)、“Host_Alias”(来源主机名称别名),都需要使用大写字符的;
  5. sudo 的时间间隔问题:
    • 两次执行 sudo 的间隔在五分钟内,那么再次执行 sudo 时就不需要再次输入密码;
  6. sudo 搭配 su 的使用方式:
    [root@study ~]# visudo
    User_Alias  ADMINS = pro1, pro2, pro3, myuser1
    ADMINS ALL=(root)  /bin/su -
    
    如上,用户可以:使用“用户自己的密码”来切换到 root。
  • 因为 /etc/sudoers 是有设置语法的,如果设置错误那会造成无法使用 sudo 指令的不良后果。因此才会使用 visudo 去修改。
  • 使用 visudo 需要 root 用户。

init

在 Unix 年代,启动系统服务的管理方式被称为 SysV 的 init 脚本程序的处理方式:
   即系统核心第一支调用的程序是 init , 然后 init 去唤起所有的系统所需要的服务,不论是本机服务还是网络服务。

所有的服务启动脚本通通放置于 /etc/init.d/ 下面,基本上都是使用 bash shell script 所写成的脚本程序。

init 管理时 daemon 的处理方式:

# 启动:
/etc/init.d/daemon start
# 关闭:
/etc/init.d/daemon stop
# 重新启动:
/etc/init.d/daemon restart
# 状态:
/etc/init.d/daemon status

# 默认启动: 
chkconfig daemon on
# 默认不启动: 
chkconfig daemon off
# 查看默认为启动否:
chkconfig --list daemon
  • init 重要的指令包括:daemon 本身自己的脚本(/etc/init.d/daemon)、xinetd 这个特殊的总管程序 (super daemon)、设置默认开机启动的 chkconfig,以及会影响到执行等级的 init N 等。
  • 虽然 CentOS 7 已经不使用 init 来管理服务了,不过因为考虑到某些脚本没有办法直接塞入 systemd 的处理,因此这些脚本还是被保留下来。

systemd

从 CentOS 7.x 以后,Red Hat 系列的 distribution 放弃沿用多年的 System V (Unix 的一个版本)开机启动服务的流程,就是前一小节提到的 init 启动脚本的方法, 改用 systemd 这个启动服务管理机制。

systemd 的特点:
* 平行处理所有服务,加速开机流程;
* 一经要求就回应的 on-demand 启动方式
* 服务相依性的自我检查
* 依 daemon 功能分类
* 将多个 daemons 集合成为一个群组
* 向下相容旧有的 init 服务脚本(不过 systemd 也是有些地方无法完全取代 init 的)

systemd 是可以相容于 init 的启动脚本的,因此,旧的 init 启动脚本也能够通过 systemd 来管理,只是更进阶的 systemd 功能就没有办法支持就是了。

systemd 将过去所谓的 daemon (守护进程,可视为 Service)执行脚本通通称为一个服务单位(unit),而每种服务单位依据功能来区分时,就分类为不同的类型(type)

  • 类型(type)包括:service(一般服务),socket(数据监听与交换),target(执行环境),path(特定文件或目录),snapshot(存储系统状态的快照),timer(循环执行的服务) 等。

执行脚本的配置文件目录:

  1. /usr/lib/systemd/system/:每个服务最主要的启动脚本设置;
    • 有点类似以前的 /etc/init.d 下面的文件。
  2. /run/systemd/system/:系统执行过程中所产生的服务脚本;
    • 这些脚本的优先序要比 /usr/lib/systemd/system/ 高。
  3. /etc/systemd/system/:管理员依据主机系统的需求所创建的执行脚本;
    • 其实这个目录有点像以前 /etc/rc.d/rc5.d/Sxx 之类的功能。
    • 执行优先序又比 /run/systemd/system/ 高。
也就是说:
   1、到底系统开机会不会执行某些服务其实是看 /etc/systemd/system/ 下面的设置,所以该目录下面就是一大堆链接文件,仅是链接到正确的执行脚本配置文件而已。
   2、而实际执行的 systemd 启动脚本配置文件,其实都是放置在 /usr/lib/systemd/system/ 下面。

因此:
   如果你想要想要看执行脚本设置,或修改某个服务启动的设置,应该到 /usr/lib/systemd/system/ 下面去查阅、修改。

systemctl

systemd 这个启动服务的机制,主要是通过一只名为 systemctl 的指令来处理。

 (跟以前 systemV 需要 service / chkconfig / setup / init 等指令来协助不同,
  systemd 就是仅有 systemctl 这个指令来处理,所以全部的行为都得要使用 systemctl )

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

【以下,“服务”:即“服务单位(unit)”,如“firewalld.service”】

  1. 管理单一服务
    # 启动一个服务:
    systemctl start <unit>
    # 关闭一个服务:
    systemctl stop <unit>
    # 重启一个服务:
    systemctl restart <unit>
    # 重载一个服务的配置:(不关闭后面 unit 的情况下,重新加载配置文件,让设置生效)
    systemctl status <unit>
    
    # 在开机时启用一个服务:
    systemctl enable <unit>
    # 在开机时禁用一个服务:
    systemctl disable <unit>
    # 查看服务是否开机启动:
    systemctl is-enabled <unit>
    # 查看服务是否正在运行:
    systemctl is-enabled <unit>
    
    # 显示一个服务的状态:(是否正在执行、是否开机启动、登录信息等)
    systemctl status <unit>
    
    # 强制注销服务:(需要先 stop?)(注销后无法被唤醒,除非 unmask)
    systemctl mask <unit>
    # 取消注销服务:
    systemctl unmask <unit>
    
    • deamon 的运行状态:
      1. active (running):正有一只或多只程序正在系统中执行。
      2. active (exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。
      3. active (waiting):正在执行当中,不过还再等待其他的事件才能继续处理。
      4. inactive:这个服务目前没有运行。
    • deamon 的默认状态:
      1. enabled:这个 daemon 将在开机时被执行
      2. disabled:这个 daemon 在开机时不会被执行
      3. static:这个 daemon 不可以自己启动(enable 不可),不过可能会被其他的 enabled 的服务来唤醒(相依属性的服务)
      4. mask:这个 daemon 无论如何都无法被启动!因为已经被强制注销 (非删除)。可通过 systemctl unmask 方式改回原本状态
  2. 查看所有服务
    # 等效与“systemctl list-unit”
    systemctl
    
    #(依据 TYPE)列出当前启动的 unit:(若使用了“--all”才会显示没启动的)
    systemctl list-unit [--type=TYPE] [--all]
    
    # 列出 /usr/lib/systemd/system/ 内的所有文件:(即,列出所有已安装的 unit)
    systemctl list-unit-files 
    
    
    # 查看启动失败的服务列表:【???不确定】
    systemctl --failed
    
    示例:
    # 列出系统上面有启动的 unit
    [root@study ~]# systemctl
    # 或者:
    [root@study ~]# systemctl list-unit
    
    # 列出 *.service 类型的服务
    [root@study ~]# systemctl list-units --type=service --all
    
    # 查询系统上是否有以 cpu 为名的服务
    [root@study ~]# systemctl list-units --type=service --all | grep cpu
    
  3. 管理不同的操作环境(target unit)
    # 列出跟操作界面比较有关的 target 项目
    systemctl list-units --type=target --all
    
    • 在 CentOS 7.1 的默认情况下,就有 26 个 target unit。跟操作界面相关性比较高的 target 主要有下面几个
      1. graphical.target:就是文字加上图形界面,这个项目已经包含了下面的 multi-user.target 项目!
      2. multi-user.target:纯文本模式!
      3. rescue.target:在无法使用 root 登陆的情况下,systemd 在开机时会多加一个额外的暂时系统,与你原本的系统无关。这时你可以取得 root 的权限来维护你的系统。但是这是额外系统,因此可能需要动到 chroot 的方式来取得你原有的系统!
      4. emergency.target:紧急处理系统的错误,还是需要使用 root 登陆的情况,在无法使用 rescue.target 时,可以尝试使用这种模式!
      5. shutdown.target:就是关机的流程。
      6. getty.target:可以设置你需要几个 tty 之类的,如果想要降低 tty 的项目,可以修改这个东西的配置文件!
      • 正常的模式是 multi-user.target 以及 graphical.target 两个,救援方面的模式主要是 rescue.target 以及更严重的 emergency.target。如果要修改可提供登陆的 tty 数量,则修改 getty.target 项目。
    • 获取目前的模式(target unit):
      # 取得目前的 target 
      systemctl get-default
      
      # 设置后面接的 target 成为默认的操作模式
      systemctl set-default <unit.target>
      
      # 切换到后面接的模式
      systemctl isolate <unit.target>
      
      示例:
      # 在不重新开机的情况下,将目前的操作环境改为纯文本模式,关掉图形界面
      [root@study ~]# systemctl isolate multi-user.target
      
      # 重新取得图形界面呢
      [root@study ~]# systemctl isolate graphical.target
      
    • 在正常的切换情况下,使用上述 isolate 的方式即可。不过为了方便起见,systemd 也提供了数个简单的指令给我们切换操作模式之用:
      # 系统关机
      systemctl poweroff
      
      # 重新开机
      systemctl reboot
      
      # 进入暂停模式
      systemctl suspend
      
      # 进入休眠模式
      systemctl hibernate
      
      # 强制进入救援模式
      systemctl rescue
      
      # 强制进入紧急救援模式
      systemctl emergency
      
      • suspend:暂停模式会将系统的状态数据保存到内存中,然后关闭掉大部分的系统硬件,当然,并没有实际关机喔!当使用者按下唤醒机器的按钮,系统数据会重内存中回复,然后重新驱动被大部分关闭的硬件,就开始正常运行!【唤醒的速度较快】
      • hibernate:休眠模式则是将系统状态保存到硬盘当中,保存完毕后,将计算机关机。当使用者尝试唤醒系统时,系统会开始正常运行,然后将保存在硬盘中的系统状态恢复回来。【因为数据是由硬盘读出,因此唤醒的性能与你的硬盘速度有关】
  4. 分析各服务之间的相依性:
    # 分析各服务之间的相依性:(“--reverse”用于反向追踪)
    systemctl list-dependencies [<unit>] [--reverse]
    
    • 如果不指定 <unit>,则分析当前的 target( default.target)。


与 systemd 的 daemon 运行过程相关的目录

比较重要的 systemd 启动脚本配置文件在 /usr/lib/systemd/system/,/etc/systemd/system/ 目录下。

相关目录:

  1. /usr/lib/systemd/system/:使用 CentOS 官方提供的软件安装后,默认的启动脚本配置文件都放在这里。
    • 这里的数据尽量不要修改。
      要修改时,请到 /etc/systemd/system 下面修改较佳!
  2. /run/systemd/system/:系统执行过程中所产生的服务脚本。
    • 这些脚本的优先序要比 /usr/lib/systemd/system/ 高!
  3. /etc/systemd/system/:管理员依据主机系统的需求所创建的执行脚本。
    • 其实这个目录有点像以前 /etc/rc.d/rc5.d/Sxx 之类的功能。
    • 执行优先序又比 /run/systemd/system/ 高喔!
  4. /etc/sysconfig/*:几乎所有的服务都会将初始化的一些选项设置写入到这个目录下。
    举例来说,mandb 所要更新的 man page 索引中,需要加入的参数就写入到此目录下的 man-db 当中。而网络的设置则写在 /etc/sysconfig/network-scripts/ 这个目录内。所以,这个目录内的文件也是挺重要的;
  5. /var/lib/:一些会产生数据的服务都会将他的数据写入到 /var/lib/ 目录中。
    举例来说,数据库管理系统 Mariadb 的数据库默认就是写入 /var/lib/mysql/ 这个目录下啦!
  6. /run/:放置了好多 daemon 的暂存盘,包括 lock file 以及 PID file 等等。


我们知道 systemd 里头有很多的本机会用到的 socket 服务,里头可能会产生很多的 socket file。

那你怎么知道这些 socket file 放置在哪里呢? 很简单!还是通过 systemctl 来管理:

[root@study ~]# systemctl list-sockets
LISTEN                          UNIT                         ACTIVATES
/dev/initctl                    systemd-initctl.socket       systemd-initctl.service
/dev/log                        systemd-journald.socket      systemd-journald.service
/run/dmeventd-client            dm-event.socket              dm-event.service
/run/dmeventd-server            dm-event.socket              dm-event.service
/run/lvm/lvmetad.socket         lvm2-lvmetad.socket          lvm2-lvmetad.service
/run/systemd/journal/socket     systemd-journald.socket      systemd-journald.service
/run/systemd/journal/stdout     systemd-journald.socket      systemd-journald.service
/run/systemd/shutdownd          systemd-shutdownd.socket     systemd-shutdownd.service
/run/udev/control               systemd-udevd-control.socket systemd-udevd.service
/var/run/avahi-daemon/socket    avahi-daemon.socket          avahi-daemon.service
/var/run/cups/cups.sock         cups.socket                  cups.service
/var/run/dbus/system_bus_socket dbus.socket                  dbus.service
/var/run/rpcbind.sock           rpcbind.socket               rpcbind.service
@ISCSIADM_ABSTRACT_NAMESPACE    iscsid.socket                iscsid.service
@ISCSID_UIP_ABSTRACT_NAMESPACE  iscsiuio.socket              iscsiuio.service
kobject-uevent 1                systemd-udevd-kernel.socket  systemd-udevd.service

16 sockets listed.
Pass --all to see loaded but inactive sockets, too.

这样很清楚的就能够知道正在监听本机服务需求的 socket file 所在的文件名位置。

防火墙

  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”:永久生效,没有此参数重启后失效。

日志

日志管理工具 journalctl 是 CentOS 7 上专有的日志管理工具,该工具是从 message 这个文件里读取信息。

Systemd 统一管理所有 Unit 的启动日志。

带来的好处就是:可以只用 journalctl 一个命令,查看所有日志(内核日志应用日志)。

日志的配置文件是:/etc/systemd/journald.conf

文件(夹)命令

文件夹常用的命令:查看信息(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下除了某个文件外的其他文件全部删除的命令

网络命令

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

利用 netstat 指令可让你得知整个 Linux 系统的网络情况。

常见参数:

-a   (all)显示所有选项,默认不显示 LISTEN 相关
-t   (tcp)仅显示 tcp 相关选项
-u   (udp)仅显示 udp 相关选项
-n   拒绝显示别名,能显示数字的全部转化成数字
-l   仅列出有在 Listen (监听) 的服务状态

-p   显示建立相关链接的程序名
-r   显示路由信息,路由表
-e   显示扩展信息,例如uid等
-s   按各个协议进行统计
-c   每隔一个固定时间,执行该netstat命令。
  • LISTEN 和 LISTENING 的状态只有用“-a”或者“-l”才能看到。


常用命令:

  1. 列出所有端口(包括监听和未监听的)
    # 列出所有端口
    netstat -a
    
    # 列出所有 tcp 端口
    netstat -at
    
    # 列出所有 udp 端口
    netstat -au
    
  2. 列出所有处于监听状态的 Sockets
    # 只显示监听端口
    netstat -l
    
    # 只列出所有监听 tcp 端口
    netstat -lt
    
    # 只列出所有监听 udp 端口
    netstat -lu
    
    # 只列出所有监听 UNIX 端口
    netstat -lx
    
  3. 显示每个协议的统计信息
    # 显示所有端口的统计信息
    netstat -s
    
    # 显示 TCP 或 UDP 端口的统计信息
    netstat -st 或 -su
    
  4. 显示 PID 和进程名称
    netstat -p
    
  5. 输出时不显示主机,端口和用户名(host, port,user)
    # 不想让主机,端口和用户名显示,使用“netstat -n”。将会使用数字代替那些名称。
    netstat -an
    
    # 如果只是不想让这三个名称中的一个被显示,使用以下命令
    netsat -a --numeric-ports
    netsat -a --numeric-hosts
    netsat -a --numeric-users
    
  6. 持续输出 netstat 信息
    netstat -c
    
    • (将每隔一秒输出网络信息)
  7. 找出程序运行的端口
    # 找出程序运行的端口
    netstat -ap | grep ssh
    
    # 找出运行在指定端口的进程
    netstat -an | grep ':80'
    
    • 并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
  8. 显示网络接口列表
    # 显示网络接口列表
    netstat -i
    
    # 显示网络接口列表,及详细信息(类似 ifconfig)
    netstat -ie
    
  9. IP 和 TCP 分析
    ……
    

“-bash: netstat: command not found”

CentOS 7 最小化安装默认没有 net-tools,需要手动安装:

yum -y install net-tools

通道命令

软件安装

查看已安装的软件

  1. rpm
    # 列出所有安装
    rpm -qa
    
    # 查找指定软件包
    rpm -qa | grep <软件或者包的名字>
    
  2. deb
    # 列出所有安装
    dpkg -l
    
    # 查找指定软件包
    dpkg -l | grep <软件或者包的名字>
    
  3. yum
    # 列出所有安装
    yum list installed
    
    # 查找指定软件包
    yum list installed | grep <软件或者包的名字>
    
  4. pip
    pip list
    
  5. snap
    # 列出所有安装
    snap list
    
    # 查找指定软件包
    sudo list | grep <软件或者包的名字>
    
  6. 如果是以源码包编译安装的,只能看可执行文件是否存在了。
    • 如果是以 root 用户安装的,可执行程序通常都在 /sbin:/usr/bin 目录下;


示例:

yum list installed | grep openssl
openssl.x86_64 1:1.0.2k-8.el7 @anaconda

压缩/解压

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命令就可以了。