【Linux 常用命令】
系统版本
- 查看系统的发行版本:
cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core)
- 查看系统的内核版本:
uname -r 5.2.8-1.el7.elrepo.x86_64
用户身份切换
由于安全考虑,我们都是使用一般帐号登陆系统的,等有需要进行系统维护或软件更新时才转为 root 的身份来动作。
让一般用户切换到 root 主要有两种方式:
- “su -”:直接将身份变成 root 即可。
- 这个指令需要 root 的密码;
- “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 的变量读取方法)
- 不使用“-”:读取的变量设置方式为 non-login shell 的方式,很多原本的变量不会被改变;
- 使用“-”:读取的变量设置方式为 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 的执行是这样的流程:
- 当使用者执行 sudo 时,系统于 /etc/sudoers 文件中搜寻该使用者是否有执行 sudo 的权限;
- 若使用者具有可执行 sudo 的权限后,便让使用者“输入使用者自己的密码”来确认;
- 若密码输入成功,便开始进行 sudo 后续接的指令(但 root 执行 sudo 时,不需要输入密码);
- 若欲切换的身份与执行者身份相同,那也不需要输入密码。
所以:
并非所有人都能够执行 sudo,而是仅有规范到 /etc/sudoers 内的用户才能够执行 sudo 这个指令。
visudo 与 /etc/sudoers
除了 root 之外的其他帐号,若想要使用 sudo 执行属于 root 的权限指令,则 root 需要先使用 visudo 去修改 /etc/sudoers ,让该帐号能够使用全部或部分的 root 指令功能。 “/etc/sudoers”的数据格式: 使用者帐号 登陆者的来源主机名称=(可切换的身份) 可下达的指令 root ALL=(ALL) ALL
visudo 的设置方式:
- 单一使用者可进行 root 所有指令,与 sudoers 文件语法:
[root@study ~]# visudo ....(前面省略).... root ALL=(ALL) ALL <==找到这一行,大约在 98 行左右 vbird1 ALL=(ALL) ALL <==这一行是你要新增的! ....(下面省略)....
- 利用 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 切换任何身份来操作任何指令。
- 有限制的指令操作:
[root@study ~]# visudo myuser1 ALL=(root) /usr/bin/passwd, !/usr/bin/passwd root
- 最后指令务必用绝对路径;
- “!指令”表示“不可执行”该指令;
- 通过别名创建 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”(来源主机名称别名),都需要使用大写字符的;
- sudo 的时间间隔问题:
- 两次执行 sudo 的间隔在五分钟内,那么再次执行 sudo 时就不需要再次输入密码;
- 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(循环执行的服务) 等。
执行脚本的配置文件目录:
- /usr/lib/systemd/system/:每个服务最主要的启动脚本设置;
- 有点类似以前的 /etc/init.d 下面的文件。
- /run/systemd/system/:系统执行过程中所产生的服务脚本;
- 这些脚本的优先序要比 /usr/lib/systemd/system/ 高。
- /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”】
- 管理单一服务:
# 启动一个服务: 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 的运行状态:
- active (running):正有一只或多只程序正在系统中执行。
- active (exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。
- active (waiting):正在执行当中,不过还再等待其他的事件才能继续处理。
- inactive:这个服务目前没有运行。
- deamon 的默认状态:
- enabled:这个 daemon 将在开机时被执行
- disabled:这个 daemon 在开机时不会被执行
- static:这个 daemon 不可以自己启动(enable 不可),不过可能会被其他的 enabled 的服务来唤醒(相依属性的服务)
- mask:这个 daemon 无论如何都无法被启动!因为已经被强制注销 (非删除)。可通过 systemctl unmask 方式改回原本状态
- 查看所有服务:
# 等效与“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
- 管理不同的操作环境(target unit):
# 列出跟操作界面比较有关的 target 项目 systemctl list-units --type=target --all
- 在 CentOS 7.1 的默认情况下,就有 26 个 target unit。跟操作界面相关性比较高的 target 主要有下面几个
- graphical.target:就是文字加上图形界面,这个项目已经包含了下面的 multi-user.target 项目!
- multi-user.target:纯文本模式!
- rescue.target:在无法使用 root 登陆的情况下,systemd 在开机时会多加一个额外的暂时系统,与你原本的系统无关。这时你可以取得 root 的权限来维护你的系统。但是这是额外系统,因此可能需要动到 chroot 的方式来取得你原有的系统!
- emergency.target:紧急处理系统的错误,还是需要使用 root 登陆的情况,在无法使用 rescue.target 时,可以尝试使用这种模式!
- shutdown.target:就是关机的流程。
- 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:休眠模式则是将系统状态保存到硬盘当中,保存完毕后,将计算机关机。当使用者尝试唤醒系统时,系统会开始正常运行,然后将保存在硬盘中的系统状态恢复回来。【因为数据是由硬盘读出,因此唤醒的性能与你的硬盘速度有关】
- 分析各服务之间的相依性:
# 分析各服务之间的相依性:(“--reverse”用于反向追踪) systemctl list-dependencies [<unit>] [--reverse]
- 如果不指定 <unit>,则分析当前的 target( default.target)。
与 systemd 的 daemon 运行过程相关的目录
比较重要的 systemd 启动脚本配置文件在 /usr/lib/systemd/system/,/etc/systemd/system/ 目录下。
相关目录:
- /usr/lib/systemd/system/:使用 CentOS 官方提供的软件安装后,默认的启动脚本配置文件都放在这里。
- 这里的数据尽量不要修改。
- 要修改时,请到 /etc/systemd/system 下面修改较佳!
- 这里的数据尽量不要修改。
- /run/systemd/system/:系统执行过程中所产生的服务脚本。
- 这些脚本的优先序要比 /usr/lib/systemd/system/ 高!
- /etc/systemd/system/:管理员依据主机系统的需求所创建的执行脚本。
- 其实这个目录有点像以前 /etc/rc.d/rc5.d/Sxx 之类的功能。
- 执行优先序又比 /run/systemd/system/ 高喔!
- /etc/sysconfig/*:几乎所有的服务都会将初始化的一些选项设置写入到这个目录下。
- 举例来说,mandb 所要更新的 man page 索引中,需要加入的参数就写入到此目录下的 man-db 当中。而网络的设置则写在 /etc/sysconfig/network-scripts/ 这个目录内。所以,这个目录内的文件也是挺重要的;
- /var/lib/:一些会产生数据的服务都会将他的数据写入到 /var/lib/ 目录中。
- 举例来说,数据库管理系统 Mariadb 的数据库默认就是写入 /var/lib/mysql/ 这个目录下啦!
- /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 所在的文件名位置。
防火墙
- firewalld 的基本使用:
# 启动 systemctl start firewalld # 关闭 systemctl stop firewalld # 查看状态 systemctl status firewalld # 开机禁用 systemctl disable firewalld # 开机启用 systemctl enable firewalld
- (“firewalld”或“firewalld.service”)
- 配置 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”才能看到。
常用命令:
- 列出所有端口(包括监听和未监听的):
# 列出所有端口 netstat -a # 列出所有 tcp 端口 netstat -at # 列出所有 udp 端口 netstat -au
- 列出所有处于监听状态的 Sockets:
# 只显示监听端口 netstat -l # 只列出所有监听 tcp 端口 netstat -lt # 只列出所有监听 udp 端口 netstat -lu # 只列出所有监听 UNIX 端口 netstat -lx
- 显示每个协议的统计信息:
# 显示所有端口的统计信息 netstat -s # 显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su
- 显示 PID 和进程名称:
netstat -p
- 输出时不显示主机,端口和用户名(host, port,user):
# 不想让主机,端口和用户名显示,使用“netstat -n”。将会使用数字代替那些名称。 netstat -an # 如果只是不想让这三个名称中的一个被显示,使用以下命令 netsat -a --numeric-ports netsat -a --numeric-hosts netsat -a --numeric-users
- 持续输出 netstat 信息:
netstat -c
- (将每隔一秒输出网络信息)
- 找出程序运行的端口:
# 找出程序运行的端口 netstat -ap | grep ssh # 找出运行在指定端口的进程 netstat -an | grep ':80'
- 并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
- 显示网络接口列表:
# 显示网络接口列表 netstat -i # 显示网络接口列表,及详细信息(类似 ifconfig) netstat -ie
- IP 和 TCP 分析:
……
“-bash: netstat: command not found”
CentOS 7 最小化安装默认没有 net-tools,需要手动安装:
yum -y install net-tools
通道命令
软件安装
查看已安装的软件
- rpm :
# 列出所有安装 rpm -qa # 查找指定软件包 rpm -qa | grep <软件或者包的名字>
- deb:
# 列出所有安装 dpkg -l # 查找指定软件包 dpkg -l | grep <软件或者包的名字>
- yum:
# 列出所有安装 yum list installed # 查找指定软件包 yum list installed | grep <软件或者包的名字>
- pip:
pip list
- snap:
# 列出所有安装 snap list # 查找指定软件包 sudo list | grep <软件或者包的名字>
- 如果是以源码包编译安装的,只能看可执行文件是否存在了。
- 如果是以 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
|
.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
|
其他格式 | |
.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
| |
-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
| |
--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 | 指定解压目录,目录不存在会创建 |
示例:
- 压缩:
#打包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
- 解压:
# 查看压缩包中的文件信息 # 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 | 立即关机
|
shutdown -r now | 立即重启 |
logout | 注销 |
man 命令 | 显示命令的用法 |
history | 显示命令历史记录
执行历史命令:
|
env | 显示当前系统的环境变量 |
- “tab”键:双击命令提示,单机补全(当前目录下有的)文件名称。
超级管理员
当前用户下使用超级管理员(root):
su - root
关机
- shutdown -h now
- poweroff
Note:
- 用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 里面的清屏命令是什么呢?
- clear:这个命令将会刷新屏幕,本质上只是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之前的操作信息。
- Ctrl+l(小写的L):这是一个清屏的快捷键,工作中用得最多的一种清屏方式。【效果同 clear】。
- reset:这个命令将完全刷新终端屏幕,之前的终端输入操作信息将都会被清空,这样虽然比较清爽,但整个命令过程速度有点慢,使用较少。
- 值得一提的是 reset 命令在你的终端控制错乱时非常有用。
- 如:“输入字符不出现在光标的位置的情况。还有当你敲击回车键时,新提示符并没有出现在新行上,而是出现在老提示符的前面”。此时reset命令就能用来修正这些问题。
- 值得一提的是 reset 命令在你的终端控制错乱时非常有用。
- printf "\033c":这个命令它才是真正的清空了终端屏幕,它的功能跟 DOS 里 CMD.EXE 提供的 CLS 效果很相似。
关于“printf "\033c"”
这个命令究竟是做什么的?它的工作原理是什么?
\033 == \x1B == 27 == ESC
即这个命令变成了 <ESC>c,它是 VT-XXX 中表示“Full Reset (RIS)”的转义码。
它的另一种实现方式也可以这样:
- 键盘上:“Ctrl+v--->Esc-->输入c再回加”。
- (现今我们使用的所有的终端都是VT兼容的)
- 但如果你发现自己使用的是一个非常奇怪的终端(如putty),那这个命令可能用不了。
- printf 是 bash 里内置的命令,内置命令的优先级比其它可执行文件要高。
为命令设置快捷方式
在 PATH 路径下,如 /usr/bin/ 目录下。新建一个名为 cls 的文件,加上执行权限,写入如入内容:
[root@iZbp168 bin]# vim cls
#!/bin/bash
#
printf "\033c"
这样每次需要清屏的时候,只需要输入cls命令就可以了。