查看“【Linux 常用命令】”的源代码
←
【Linux 常用命令】
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Linux]] == 系统版本 == # 查看系统的发行版本: #: <syntaxhighlight lang="bash" highlight=""> cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) </syntaxhighlight> # 查看系统的内核版本: #: <syntaxhighlight lang="bash" highlight=""> uname -r 5.2.8-1.el7.elrepo.x86_64 </syntaxhighlight> == 用户身份切换 == 由于安全考虑,我们都是使用一般帐号登陆系统的,等有需要进行系统维护或软件更新时才转为 root 的身份来动作。 让一般用户切换到 root 主要有两种方式: # “su -”:直接将身份变成 root 即可。 #* 这个指令需要 root 的密码; # “sudo 指令”:以 root 身份执行指令(而不直接切换到 root)。 #* 并非所有用户都能使用该命令,需要事先设置。 === su === su 可以进行任何身份的切换: <syntaxhighlight lang="bash" highlight=""> [root@study ~]# su [-lm] [-c 指令] [username] 选项与参数: - :单纯使用 - ,如“su -”代表使用 login-shell 的变量文件读取方式来登陆系统; 若使用者名称没有加上去,则代表切换为 root 的身份。 -l :与 - 类似,但后面需要加欲切换的使用者帐号!也是 login-shell 的方式。 -m :-m 与 -p 是一样的,表示“使用目前的环境设置,而不读取新使用者的配置文件” -c :仅进行一次指令,所以 -c 后面可以加上指令 </syntaxhighlight> * “-”的作用:(涉及 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 === 命令用法: <syntaxhighlight lang="bash" highlight=""> [root@study ~]# sudo [-b] [-u 新使用者帐号] 选项与参数: -b :将后续的指令放到背景中让系统自行执行,而不与目前的 shell 产生影响 -u :后面可以接欲切换的使用者,若无此项则代表切换身份为 root 。 </syntaxhighlight> 因为 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 文件语法: #: <syntaxhighlight lang="bash" highlight=""> [root@study ~]# visudo ....(前面省略).... root ALL=(ALL) ALL <==找到这一行,大约在 98 行左右 vbird1 ALL=(ALL) ALL <==这一行是你要新增的! ....(下面省略).... </syntaxhighlight> # 利用 wheel 群组,以及免密码的功能处理 visudo: #: <syntaxhighlight lang="bash" highlight=""> [root@study ~]# visudo ....(前面省略).... %wheel ALL=(ALL) ALL <==大约在 106 行左右,请将这行的 # 拿掉! ....(中间省略).... %wheel ALL=(ALL) NOPASSWD: ALL <==大约在 109 行左右,请将这行的 # 拿掉! ....(下面省略).... [root@study ~]# usermod -a -G wheel pro1 <==将 pro1 加入 wheel 的支持 </syntaxhighlight> #* 在最左边加上“'''%'''”,表示后面接的是一个“群组”; #* 右边的“'''NOPASSWD '''”,表示免除密码输入; #: 如上,加入 wheel 这个群组的使用者(pro1),就能够使用 sudo 切换任何身份来操作任何指令。 # 有限制的指令操作: #: <syntaxhighlight lang="bash" highlight=""> [root@study ~]# visudo myuser1 ALL=(root) /usr/bin/passwd, !/usr/bin/passwd root </syntaxhighlight> #* 最后指令务必用绝对路径; #* “!指令”表示“不可执行”该指令; # 通过别名创建 visudo: #: <syntaxhighlight lang="bash" highlight=""> [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 </syntaxhighlight> #* 这个帐号名称一定要使用大写字符来处理,包括“Cmnd_Alias”(命令别名)、“Host_Alias”(来源主机名称别名),都需要使用大写字符的; # sudo 的时间间隔问题: #* 两次执行 sudo 的间隔在五分钟内,那么再次执行 sudo 时就不需要再次输入密码; # sudo 搭配 su 的使用方式: #: <syntaxhighlight lang="bash" highlight=""> [root@study ~]# visudo User_Alias ADMINS = pro1, pro2, pro3, myuser1 ADMINS ALL=(root) /bin/su - </syntaxhighlight> #: 如上,用户可以:使用“用户自己的密码”来切换到 root。 * 因为 /etc/sudoers 是有设置语法的,如果设置错误那会造成无法使用 sudo 指令的不良后果。因此才会使用 visudo 去修改。 * 使用 visudo 需要 root 用户。 == init == 在 Unix 年代,启动系统服务的管理方式被称为 SysV 的 '''init''' 脚本程序的处理方式: 即系统核心第一支调用的程序是 init , 然后 init 去唤起所有的系统所需要的服务,不论是本机服务还是网络服务。 所有的服务启动脚本通通放置于 '''/etc/init.d/''' 下面,基本上都是使用 bash shell script 所写成的脚本程序。 init 管理时 daemon 的处理方式: : <syntaxhighlight lang="bash" highlight=""> # 启动: /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 </syntaxhighlight> * 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”】 # '''管理单一服务''': #: <syntaxhighlight lang="bash" highlight=""> # 启动一个服务: 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> </syntaxhighlight> #* deamon 的运行状态: #*# active (running):正有一只或多只程序正在系统中执行。 #*# active (exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。 #*# active (waiting):正在执行当中,不过还再等待其他的事件才能继续处理。 #*# inactive:这个服务目前没有运行。 #* deamon 的默认状态: #*# enabled:这个 daemon 将在开机时被执行 #*# disabled:这个 daemon 在开机时不会被执行 #*# static:这个 daemon 不可以自己启动(enable 不可),不过可能会被其他的 enabled 的服务来唤醒(相依属性的服务) #*# mask:这个 daemon 无论如何都无法被启动!因为已经被强制注销 (非删除)。可通过 systemctl unmask 方式改回原本状态 # '''查看所有服务''': #: <syntaxhighlight lang="bash" highlight=""> # 等效与“systemctl list-unit” systemctl #(依据 TYPE)列出当前启动的 unit:(若使用了“--all”才会显示没启动的) systemctl list-unit [--type=TYPE] [--all] # 列出 /usr/lib/systemd/system/ 内的所有文件:(即,列出所有已安装的 unit) systemctl list-unit-files # 查看启动失败的服务列表:【???不确定】 systemctl --failed </syntaxhighlight> #: 示例: #:: <syntaxhighlight lang="bash" highlight=""> # 列出系统上面有启动的 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 </syntaxhighlight> # '''管理不同的操作环境(target unit)''': #: <syntaxhighlight lang="bash" highlight=""> # 列出跟操作界面比较有关的 target 项目 systemctl list-units --type=target --all </syntaxhighlight> #* 在 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): #*: <syntaxhighlight lang="bash" highlight=""> # 取得目前的 target systemctl get-default # 设置后面接的 target 成为默认的操作模式 systemctl set-default <unit.target> # 切换到后面接的模式 systemctl isolate <unit.target> </syntaxhighlight> #*: 示例: #*:: <syntaxhighlight lang="bash" highlight=""> # 在不重新开机的情况下,将目前的操作环境改为纯文本模式,关掉图形界面 [root@study ~]# systemctl isolate multi-user.target # 重新取得图形界面呢 [root@study ~]# systemctl isolate graphical.target </syntaxhighlight> #* 在正常的切换情况下,使用上述 '''isolate''' 的方式即可。不过为了方便起见,systemd 也提供了数个简单的指令给我们切换操作模式之用: #*: <syntaxhighlight lang="bash" highlight=""> # 系统关机 systemctl poweroff # 重新开机 systemctl reboot # 进入暂停模式 systemctl suspend # 进入休眠模式 systemctl hibernate # 强制进入救援模式 systemctl rescue # 强制进入紧急救援模式 systemctl emergency </syntaxhighlight> #** suspend:暂停模式会将系统的状态数据保存到内存中,然后关闭掉大部分的系统硬件,当然,并没有实际关机喔!当使用者按下唤醒机器的按钮,系统数据会重内存中回复,然后重新驱动被大部分关闭的硬件,就开始正常运行!【唤醒的速度较快】 #** hibernate:休眠模式则是将系统状态保存到硬盘当中,保存完毕后,将计算机关机。当使用者尝试唤醒系统时,系统会开始正常运行,然后将保存在硬盘中的系统状态恢复回来。【因为数据是由硬盘读出,因此唤醒的性能与你的硬盘速度有关】 # 分析各服务之间的相依性: #: <syntaxhighlight lang="bash" highlight=""> # 分析各服务之间的相依性:(“--reverse”用于反向追踪) systemctl list-dependencies [<unit>] [--reverse] </syntaxhighlight> #* 如果不指定 <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 来管理: : <syntaxhighlight lang="bash" highlight=""> [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. </syntaxhighlight> 这样很清楚的就能够知道正在监听本机服务需求的 socket file 所在的文件名位置。 == '''防火墙''' == # firewalld 的基本使用: #: <syntaxhighlight lang="bash" highlight=""> # 启动 systemctl start firewalld # 关闭 systemctl stop firewalld # 查看状态 systemctl status firewalld # 开机禁用 systemctl disable firewalld # 开机启用 systemctl enable firewalld </syntaxhighlight> #*(“firewalld”或“firewalld.service”) # 配置 firewalld-cmd: #: <syntaxhighlight lang="bash" highlight="8,11,17"> # 查看版本: 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 </syntaxhighlight> #* “--permanent”:永久生效,没有此参数重启后失效。 == 日志 == 日志管理工具 '''journalctl''' 是 CentOS 7 上专有的日志管理工具,该工具是从 message 这个文件里读取信息。 Systemd 统一管理所有 Unit 的启动日志。 带来的好处就是:可以只用 journalctl 一个命令,查看所有日志('''内核日志'''和'''应用日志''')。 日志的配置文件是:'''/etc/systemd/journald.conf''' == 文件(夹)命令 == 文件夹常用的命令:查看信息('''ls''')、复制('''cp''')、移动('''mv''')、删除('''rm''')、创建/修改文件('''touch''') === ls === ls 用于查看文件(夹)的信息 默认显示的只有:非隐藏文件的文件名、以文件名进行排序及文件名代表的颜色显示 选项与参数: : <syntaxhighlight lang="bash" highlight=""> [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) </syntaxhighlight> === cp === cp 这个指令除了单纯的复制之外,还可以创建链接文件(“快捷方式”),比对两文件的新旧而予以更新,以及复制整个目录等等的功能。 选项与参数: : <syntaxhighlight lang="bash" highlight=""> [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 等也复制了。 最后需要注意的,如果来源文件有两个以上,则最后一个目的文件一定要是“目录”才行! </syntaxhighlight> * 不同身份者执行这个指令会有不同的结果产生,尤其是那个“-a”,“-p”的选项,对于不同身份来说,差异则非常的大。 * 由于 cp 有种种的文件属性与权限的特性,所以,在复制时,你必须要清楚的了解到: ** 是否需要完整的保留来源文件的信息? ** 来源文件是否为链接文件 (symbolic link file)? ** 来源文件是否为特殊的文件,例如 FIFO, socket 等? ** 来源文件是否为目录? === mv === mv 用于移动文件与目录,或更名 选项与参数: : <syntaxhighlight lang="bash" highlight=""> [root@study ~]# mv [-fiu] source destination [root@study ~]# mv [options] source1 source2 source3 .... directory 选项与参数: -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖; -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖! -u :若目标文件已经存在,且 source 比较新,才会更新 (update) </syntaxhighlight> === rm === rm 用于移除文件或目录 选项与参数: : <syntaxhighlight lang="bash" highlight=""> [root@study ~]# rm [-fir] 文件或目录 选项与参数: -f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息; -i :互动模式,在删除前会询问使用者是否动作 -r :递回删除啊!最常用在目录的删除了!【这是非常危险的选项!!!】 </syntaxhighlight> rm 使用示例:[https://blog.csdn.net/taiyang1987912/article/details/41488395 linux shell下除了某个文件外的其他文件全部删除的命令] == 网络命令 == '''Netstat''' 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。 利用 netstat 指令可让你得知整个 Linux 系统的网络情况。 常见参数: : <syntaxhighlight lang="bash" highlight=""> -a (all)显示所有选项,默认不显示 LISTEN 相关 -t (tcp)仅显示 tcp 相关选项 -u (udp)仅显示 udp 相关选项 -n 拒绝显示别名,能显示数字的全部转化成数字 -l 仅列出有在 Listen (监听) 的服务状态 -p 显示建立相关链接的程序名 -r 显示路由信息,路由表 -e 显示扩展信息,例如uid等 -s 按各个协议进行统计 -c 每隔一个固定时间,执行该netstat命令。 </syntaxhighlight> * LISTEN 和 LISTENING 的状态只有用“-a”或者“-l”才能看到。 常用命令: # '''列出所有端口(包括监听和未监听的)''': #: <syntaxhighlight lang="bash" highlight=""> # 列出所有端口 netstat -a # 列出所有 tcp 端口 netstat -at # 列出所有 udp 端口 netstat -au </syntaxhighlight> # '''列出所有处于监听状态的 Sockets''': #: <syntaxhighlight lang="bash" highlight=""> # 只显示监听端口 netstat -l # 只列出所有监听 tcp 端口 netstat -lt # 只列出所有监听 udp 端口 netstat -lu # 只列出所有监听 UNIX 端口 netstat -lx </syntaxhighlight> # '''显示每个协议的统计信息''': #: <syntaxhighlight lang="bash" highlight=""> # 显示所有端口的统计信息 netstat -s # 显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su </syntaxhighlight> # '''显示 PID 和进程名称''': #: <syntaxhighlight lang="bash" highlight=""> netstat -p </syntaxhighlight> # '''输出时不显示主机,端口和用户名(host, port,user)''': #: <syntaxhighlight lang="bash" highlight=""> # 不想让主机,端口和用户名显示,使用“netstat -n”。将会使用数字代替那些名称。 netstat -an # 如果只是不想让这三个名称中的一个被显示,使用以下命令 netsat -a --numeric-ports netsat -a --numeric-hosts netsat -a --numeric-users </syntaxhighlight> # '''持续输出 netstat 信息''': #: <syntaxhighlight lang="bash" highlight=""> netstat -c </syntaxhighlight> #* (将每隔一秒输出网络信息) # '''找出程序运行的端口''': #: <syntaxhighlight lang="bash" highlight=""> # 找出程序运行的端口 netstat -ap | grep ssh # 找出运行在指定端口的进程 netstat -an | grep ':80' </syntaxhighlight> #* 并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。 # '''显示网络接口列表''': #: <syntaxhighlight lang="bash" highlight=""> # 显示网络接口列表 netstat -i # 显示网络接口列表,及详细信息(类似 ifconfig) netstat -ie </syntaxhighlight> # '''IP 和 TCP 分析''': #: <syntaxhighlight lang="bash" highlight=""> …… </syntaxhighlight> #* 参考:[https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316661.HTML Linux netstat命令详解] === “-bash: netstat: command not found” === CentOS 7 最小化安装默认没有 net-tools,需要手动安装: : <syntaxhighlight lang="bash" highlight=""> yum -y install net-tools </syntaxhighlight> == 通道命令 == == 软件安装 == === 查看已安装的软件 === # '''rpm''' : #: <syntaxhighlight lang="bash" highlight=""> # 列出所有安装 rpm -qa # 查找指定软件包 rpm -qa | grep <软件或者包的名字> </syntaxhighlight> # '''deb''': #: <syntaxhighlight lang="bash" highlight=""> # 列出所有安装 dpkg -l # 查找指定软件包 dpkg -l | grep <软件或者包的名字> </syntaxhighlight> # '''yum''': #: <syntaxhighlight lang="bash" highlight=""> # 列出所有安装 yum list installed # 查找指定软件包 yum list installed | grep <软件或者包的名字> </syntaxhighlight> # '''pip''': #: <syntaxhighlight lang="bash" highlight=""> pip list </syntaxhighlight> # '''snap''': #: <syntaxhighlight lang="bash" highlight=""> # 列出所有安装 snap list # 查找指定软件包 sudo list | grep <软件或者包的名字> </syntaxhighlight> # 如果是以'''源码包编译安装'''的,只能看可执行文件是否存在了。 #* 如果是以 root 用户安装的,可执行程序通常都在 /sbin:/usr/bin 目录下; 示例: : <syntaxhighlight lang="bash" highlight=""> yum list installed | grep openssl openssl.x86_64 1:1.0.2k-8.el7 @anaconda </syntaxhighlight> == 压缩/解压 == Linux 下常见的压缩包格式有 5 种: zip、tar.gz、tar.bz2、tar.xz、tar.Z; * 其中:tar 是种打包格式,gz / bz2 后缀才是指代压缩方式(gzip / bzip2); * 压缩率一般来说:tar.bz2 > tar.gz > zip > tar;压缩率越高,压缩以及解压的时间也就越长。 === 支持的格式 === {| class="wikitable" ! 格式 !! 命令 |- ! colspan="2" | 常用格式 |- | '''.zip''' | <syntaxhighlight lang="bash" highlight=""> 解压:unzip FileName.zip 压缩:zip FileName.zip DirName </syntaxhighlight> |- | '''.tar ''' | <syntaxhighlight lang="bash" highlight=""> 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName </syntaxhighlight> * 注意:tar 是打包,不是压缩 |- | '''.gz''' | <syntaxhighlight lang="bash" highlight=""> 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName </syntaxhighlight> |- | '''.tar.gz'''和'''.tgz''' | <syntaxhighlight lang="bash" highlight=""> 解压:tar zxvf FileName.tar.gz 压缩:tar zcvf FileName.tar.gz DirName </syntaxhighlight> |- | '''.bz2''' | <syntaxhighlight lang="bash" highlight=""> 解压1:bzip2 -d FileName.bz2 解压2:bunzip2 FileName.bz2 压缩: bzip2 -z FileName </syntaxhighlight> |- | '''.tar.bz2''' | <syntaxhighlight lang="bash" highlight=""> 解压:tar jxvf FileName.tar.bz2 压缩:tar jcvf FileName.tar.bz2 DirName </syntaxhighlight> |- | '''.bz''' | <syntaxhighlight lang="bash" highlight=""> 解压1:bzip2 -d FileName.bz 解压2:bunzip2 FileName.bz </syntaxhighlight> |- | '''.tar.bz''' | <syntaxhighlight lang="bash" highlight=""> 解压:tar jxvf FileName.tar.bz </syntaxhighlight> |- | '''.Z''' | <syntaxhighlight lang="bash" highlight=""> 解压:uncompress FileName.Z 压缩:compress FileName </syntaxhighlight> |- | '''.tar.Z''' | <syntaxhighlight lang="bash" highlight=""> 解压:tar Zxvf FileName.tar.Z 压缩:tar Zcvf FileName.tar.Z DirName </syntaxhighlight> * 注意:“Z”是大写; |- ! colspan="2" | 其他格式 |- | '''.rar''' | <syntaxhighlight lang="bash" highlight=""> 解压:rar x FileName.rar 压缩:rar a FileName.rar DirName </syntaxhighlight> |- | '''.lha''' | <syntaxhighlight lang="bash" highlight=""> 解压:lha -e FileName.lha 压缩:lha -a FileName.lha FileName </syntaxhighlight> |- | '''.rpm''' | <syntaxhighlight lang="bash" highlight=""> 解包:rpm2cpio FileName.rpm | cpio -div </syntaxhighlight> |- | '''.deb''' | <syntaxhighlight lang="bash" highlight=""> 解包:ar p FileName.deb data.tar.gz | tar zxf - </syntaxhighlight> |} === tar === 常用参数说明: {| class="wikitable" style="width:50%;" ! style="width:3%;" | ! style="width:20%;" | 参数 ! style="width:77%;" | 描述 |- | rowspan="5" | 操作类型 | '''-c''' || 建立压缩档案 |- | '''-x''' || 解压 |- | -t || 查看内容 <syntaxhighlight lang="bash" highlight=""> # 查看test包中有哪些文件,但不解压 tar -tvf test.tar </syntaxhighlight> |- | -r || 向压缩归档文件末尾追加文件 <syntaxhighlight lang="bash" highlight=""> # 在test.tar包中增加文件 tar -rf test.tar testfile </syntaxhighlight> * 只针对tar包 |- | -u || 更新原压缩包中的文件 <syntaxhighlight lang="bash" highlight=""> # 更新压缩包中的test文件 tar -uf test.tar --add-file=test </syntaxhighlight> |- | rowspan="3" | 文件格式 | '''-z''' || 有 gzip 属性的(g'''z'''ip 格式,以“.tar.gz”/“.tgz”为扩展名) |- | '''-j''' || 有 bzip2 属性的(以“.tar.bz2”/“.tar.bz”为扩展名) |- | -Z || 有 compress 属性的(以“.Z”为扩展名) |- | rowspan="3" | 其他参数 | '''-v''' || 显示详细过程 |- | '''-f''' || 指定档案名字 * 这个参数是'''必须的'''; * 这个参数'''必须是最后一个参数''',后面只能接档案名。 |- | -O || 将文件解开到标准输出 |- | rowspan="6" | 可选参数 |- | --add-file || 向包中添加文件 <syntaxhighlight lang="bash" highlight=""> # 更新压缩包中的test文件 tar -uf test.tar --add-file=test </syntaxhighlight> * 只针对tar包 |- | --delete || 删除包中文件 <syntaxhighlight lang="bash" highlight=""> # 从test.tar中删除test1文件 tar --delete -f test.tar test1 </syntaxhighlight> |- | --exclude || 排除文件 <syntaxhighlight lang="bash" highlight=""> #打包test目录下所有文件,排除以.log结尾的文件 tar -zcvf test.tar.gz --exclude=test/*.log test/* </syntaxhighlight> |- | --remove-files || 移除源文件 <syntaxhighlight lang="bash" highlight=""> # 压缩后删除源文件 tar -zcvf test.tar.gz test.log --remove-files </syntaxhighlight> |- | --strip-components || 去除目录 <syntaxhighlight lang="bash" highlight=""> # 解压时去掉一层目录 tar -xvf test.tar.gz --strip-components=1 </syntaxhighlight> |} * 关于 tar 的详细命令可以使用以下命令获取: *: <syntaxhighlight lang="bash" highlight=""> tar --help </syntaxhighlight> * 事实上, 从 1.15 版本开始 '''tar 解压时可以自动识别压缩的格式''',故不需人为区分压缩格式就能正确解压: *: <syntaxhighlight lang="bash" highlight=""> tar -xvf filename.tar.gz tar -xvf filename.tar.bz2 tar -xvf filename.tar.xz tar -xvf filename.tar.Z </syntaxhighlight> === zip/unzip === zip 和 unzip 命令主要用于处理zip包。 参数说明: {| class="wikitable" style="width:50%;" ! style="width:20%;" | 参数 ! style="width:80%;" | 描述 |- ! colspan="2" | 压缩 |- | -d || 从压缩文件内删除指定的文件。 |- | -f || 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。 |- | -j || 只保存文件名称及其内容,而不存放任何目录名称。 |- | '''-r''' || '''递归处理''',将指定目录下的所有文件和子目录一并处理。 |- | -u || 更换较新的文件到压缩文件内。 |- | '''-v''' || 显示指令执行过程或显示版本信息。 |- | -y || 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。 |- | - <压缩效率> || 压缩效率是一个介于 '''1-9''' 的数值。 |- ! colspan="2" | 解压 |- | '''-l''' || 显示压缩文件内所包含的文件 |- | -j || 只保存文件名称及其内容,而不存放任何目录名称。 |- | -o || 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该 |- | '''-v''' || 显示指令执行过程或显示版本信息。 |- | '''-d''' || '''指定解压目录''',目录不存在会创建 |} 示例: # 压缩: #: <syntaxhighlight lang="bash" highlight=""> #打包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 </syntaxhighlight> # 解压: #: <syntaxhighlight lang="bash" highlight=""> # 查看压缩包中的文件信息 # 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 </syntaxhighlight> === gzip === tar命令带有 -z 参数,并且打包成 tar.gz 文件时,便调用 gzip 进行了压缩。 * gzip对文本的压缩率约有 60%~70%,压缩包文件常以 gz 为后缀。 参数说明: {| class="wikitable" ! 参数 !! 描述 |- | -k || 保留源文件 |- | -d || 解开压缩文件 |- | -r || 递归处理,将指定目录下的所有文件及子目录一并处理 |- | -v || 显示指令执行过程 |} 示例: <syntaxhighlight lang="bash" highlight=""> # 使用 -k 参数保留源文件 # 1、对当前目录下所有文件进行压缩,每个文件一个gz包 gzip -k ./* # 2、递归压缩 gzip -rkv ./* # 解压 gzip -dv test.gz </syntaxhighlight> === bzip2 === tar 命令使用 '''-j''' 参数将文件打包为 tar.bz2 时,便调用了 bzip2 进行压缩。 * bzip2 压缩或解压后,'''会将源文件删除'''。 示例:如果需要保留源文件,可使用 '''-k''' 参数 <syntaxhighlight lang="bash" highlight=""> # 压缩test文件 bzip2 -zk test # 解压 bzip2 -dk test.bz2 </syntaxhighlight> === rar/unrar === rar 和 unrar 命令并非 linux 发行版自带命令,需要另外安装。 示例: <syntaxhighlight lang="bash" highlight=""> # 压缩:将test文件压缩为test.tar rar a test.tar test # 解压 test.tar rar e test.rar # 解压 test.tar unrar x test.rar </syntaxhighlight> == 其他命令 == {| class="wikitable" ! 命令 !! 说明 |- | start X | 进入图形界面 |- | shutdown -h now | 立即关机 # poweroff 关机(poweroff -f 强制关机) |- | shutdown -r now | 立即重启 |- | logout | 注销 |- | man 命令 | 显示命令的用法 |- | history | 显示命令历史记录 # history 5:显示最近使用的5个历史命令 执行历史命令: # !5:执行历史编号为5的命令 # !ls:执行最后一次以ls开头的命令 |- | env | 显示当前系统的环境变量 |- | | |} * “tab”键:双击命令提示,单机补全(当前目录下有的)文件名称。 === 超级管理员 === 当前用户下使用超级管理员(root): <syntaxhighlight lang="bash"> su - root </syntaxhighlight> === 关机 === # shutdown -h now # poweroff Note: # 用poweroff,三个机器(问题与系统无关,centos、Debian、suse)都出现了 #: <syntaxhighlight lang="bash"> “System has not been booted with systemd as init system (PID 1). Can't operate.” </syntaxhighlight> #: 需要“sudo poweroff -f”才能关键 === 清屏 === 在windows的DOS操作界面里面,清屏的命令是cls,那么在linux 里面的清屏命令是什么呢? # '''clear''':这个命令将会刷新屏幕,本质上只是'''让终端显示页向后翻了一页''',如果向上滚动屏幕还可以看到之前的操作信息。 # '''Ctrl+l'''(小写的L):这是一个清屏的快捷键,工作中用得最多的一种清屏方式。【效果同 '''clear'''】。 # '''reset''':这个命令将'''完全刷新终端屏幕''',之前的终端输入操作信息将都会被清空,这样虽然比较清爽,但整个命令过程速度有点慢,使用较少。 #* 值得一提的是 reset 命令在你的终端控制错乱时非常有用。 #*: 如:“输入字符不出现在光标的位置的情况。还有当你敲击回车键时,新提示符并没有出现在新行上,而是出现在老提示符的前面”。此时reset命令就能用来修正这些问题。 # '''printf "\033c"''':这个命令它才是'''真正的清空了终端屏幕''',它的功能跟 DOS 里 CMD.EXE 提供的 CLS 效果很相似。 ==== 关于“printf "\033c"” ==== 这个命令究竟是做什么的?它的工作原理是什么? <pre> \033 == \x1B == 27 == ESC </pre> 即这个命令变成了 <ESC>c,它是 VT-XXX 中表示“Full Reset (RIS)”的转义码。<br/> 它的另一种实现方式也可以这样: : 键盘上:“Ctrl+v--->Esc-->输入c再回加”。 #(现今我们使用的所有的终端都是VT兼容的) # 但如果你发现自己使用的是一个非常奇怪的终端(如putty),那这个命令可能用不了。 * printf 是 bash 里内置的命令,内置命令的优先级比其它可执行文件要高。 ==== 为命令设置快捷方式 ==== 在 PATH 路径下,如 /usr/bin/ 目录下。新建一个名为 '''cls''' 的文件,加上执行权限,写入如入内容: <syntaxhighlight lang="bash"> [root@iZbp168 bin]# vim cls #!/bin/bash # printf "\033c" </syntaxhighlight> 这样每次需要清屏的时候,只需要输入cls命令就可以了。
返回至“
【Linux 常用命令】
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息