Linux基础及命令复习
目录
- 简介--是什么;特点;应用场景;常见版本
- Linux安装部署--VMware虚拟机配置;Xshell、Xftp、finalShell远程工具
- VMware虚拟机安装中的常见问题
- 虚拟机网络配置
- 远程工具的使用
- Linux的目录结构
- Linux根目录下的常见目录及作用
- 常用Linux命令
- 帮助类命令man
- ★文件目录类命令 pwd ls cd mkdir rmdir touch cp rm mv cat more less head tail echo >覆盖和>>追加 ln创建链接和软连接 history
- ★文件权限类命令 chmod chown chgrp
- 文件属性信息解读
- chmod chown chgrp
- ★压缩和解压缩命令 gzip/gunzip zip/unzip tar
- ★VI和VIM编辑器
- ★搜索查找类命令 find grep |
- 进程线程类命令 ps kill
- 其他Linux命令
- 开关机/服务类命令 sync poweroff shutdown service systemctl chkconfig
- 时间日期类命令 date
- 用户管理命令 useradd passwd id su userdel who sudo
- 组管理类命令 groupadd groupdel usermod
- 磁盘分区类命令 df du fdisk mount/umount
- 系统定时任务命令 crontab
简介–是什么;特点;应用场景;常见版本
一、是什么
Linux,全称GNU/Linux,其内核由林纳斯·本纳第克特·托瓦兹在赫尔辛基大学上学时出于个人爱好而编写的操作系统内核,于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一套免费使用和自由传播的类Unix操作系统,它是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
二、特点
-
1.一切皆文件 系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件,每个文件都有确定的用途
-
2.开源免费 用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变,这让Linux吸收了无数程序员的精华,不断壮大。
-
3.兼容POSIX.0标准 许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,完全兼容POSIX.0标准使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。
-
4.良好的图形用户界面 Linux同时具有字符界面和图形界面。在字符界面通过指令来进行操作。它同时也提供了类似Windows图形界面,用户可以使用鼠标对其进行操作。
-
5.多用户和多任务 Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现代电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。
-
6.支持多平台 Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。2001年1月份发布的Linux 2.4版内核已经能够完全支持Intel64位芯片架构。同时Linux也支持多处理器技术。多个处理器同时工作,使系统性能大大提高。
三、应用场景
Linux是一款开源、高效、稳定、安全漏洞少的操作系统,对程序员来说,其主要应用领域为服务端,是一款非常优秀的服务端操作系统。今天各种场合都有使用各种Linux发行版,从嵌入式设备到超级计算机,并且在服务器领域确定了地位,通常服务器使用组合:LAMP(Linux + Apache + MySQL + PHP);LNMP( Linux + Nginx+ MySQL + PHP )。PC端Windows和服务端Linux对比:
四、常见版本
严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核。各不同版本Linux,都是基于相同的内核版本,只是用的内核版本可能有高有低,同时各厂家自己加了自己有特点的工具,还有某些文件位置不一样,不同版本的Linux相同度可以达90%
RedHat家族
- Redhat企业版: 这个需要授权费,主要用在高要求的服务器商用系统
- CentOS:CentOS全名为“社区企业操作系统”,CentOS社区将Red hat的网站上的所有源代码下载下来,进行重新编译。
- Fedara:被红帽公司定位为新技术的实验场地,许多新的技术都会在 FC 中检验
- 其他 :Scientific Linux 、Oracle Linux
Debian 家族
- Debian:运行起来极其稳定,这使得它非常适合用于服务器,Debian这款操作系统无疑并不适合新手用户,而是适合系统管理员和高级用户。
- Ubuntu:Debian的一款衍生版,也是当今最受欢迎的免费操作系统,是一个以桌面应用为主的Linux操作系统
- 其他基于Debian的版本有:Linux Mint、Knoppix、MEPIS、sidux、CrunchBang Linux、Chromium OS、Google Chrome OS
SUSE家族
- SUSE:是欧洲大陆最流行的LINUX起源于德国,于2003年末被Novell收购
- SUSE Linux :针对个人用户,可以免费下载
- SUSE Linux Enterprise Server
- SUSE Linux Enterprise Desktop
- SUSE Manager
- SUSE Studio
Gentoo家族
- Gentoo:是Linux世界最年轻的发行版本,正因为年轻,所以能吸取在她之前的所有发行版本的优点
- Gentoo Linux
- Sabayon Linux
- Calculate Linux
- Funtoo Linux
Linux安装部署–VMware虚拟机配置;Xshell、Xftp、finalShell远程工具
VMware虚拟机安装中的常见问题
一、VMware的安装
安装前,先检查BIOS中是否开启了虚拟化支持。打开任务管理器,查看性能,CPU部分,虚拟化处于“已启用”状态
如果没有开启,则需要进入BIOS系统,将 Virtualization Technology 改为Enalble,不同品牌的电脑进入BIOS的方式都不同,可以根据电脑品牌型号搜索对应的进入方式
二、VMware安装Linux
过程中要设置超级管理员root用户的密码,配置完成,点击重启
然后创建用于第一次登陆系统的普通用户账号,这里绝对不可以使用root作为用户名
设置普通账户密码:
进入系统后,点击关机按钮,找到用户,选择注销
点击未列出,输入超级管理员的账号密码,以超级管理员身份登录,前面的用户设置重复一遍后,即可进入系统
如果需要关机,一定要先将虚拟机关机或者挂起后,再关闭VMware,然后关闭windows
要想让鼠标从VMware的 虚拟中脱离出来,需要按快捷键 ctrl+alt
三、 VMware常见问题
问题1 启动VM报0xc0000005,这是与windows Hyper-V服务冲突造成的
1 关闭以下服务
2 以管理员方式运行以下命令
bcdedit /set hypervisorlaunchtype off
3 重启电脑
问题2 启动VMware蓝屏问题
1 打开控制面板,点击卸载程序
2 点击启用或者关闭Windows功能
高版本的windows在不同的位置:
3 勾选如下两个选项
虚拟机网络配置
一、虚拟机网络配置
1.查看网络信息 在VMware中查看当前虚拟机的联网模式
模式1 仅主机模式 特点:虚拟机只能和宿主机之间实现通信 缺点:只有宿主机和虚拟机之前能通信,虚拟机联网需要做更多的配置
模式2 桥接模式 特点:宿主机和虚拟机,都是由局域网路由(DHCP)进行IP的分配;宿主机和本地的虚拟机之间可以进行通信;局域网内其他机器也可以与虚拟机进行通信
缺点:虚拟机会占用大量的IP,局域网内如果机器太多,或者虚拟机太多,那么会出现大量的IP冲突
模式3 NAT模式 特点:宿主机和其他机器的IP由局域网路由进行IP的分配,虚拟机的IP通过VMnet8虚拟交换机进行分配;宿主机和本地的虚拟机之间可以进行通信;不会占用宿主机所在路由IP,不会造成IP冲突
缺点:局域网内的机器无法与其他机器上的虚拟机进行通信
- 关于模式的选择
- 什么时候选择NAT模式?
- 在教室内,因为大量同学使用同一个路由,避免大量的IP冲突
- 我们在学习阶段,主要满足我们自己的计算机(宿主机)和本地虚拟机之间的通信以及虚拟机的联网
- 什么时候选择桥接模式?
- 自己独立的路由,想在局域网内实现虚拟机和其他计算机之间的通信
- 未来如何选择
- 未来这些问题会由运维人员来处理
- 未来我们使用的服务器不会在本地,使用远程服务器,自然也不需要我们来处理这种问题
- 什么时候选择NAT模式?
虚拟机地址可以通过
ip addr show
命令查看,如果使用的是net模式联网,那么输入命令后找到ess33,其中inet后跟着的就是虚拟机ip地址,注意如果虚拟机没有配置静态ip,每次重新启动虚拟机后虚拟机的ip地址是会变的。
远程工具的使用
一、Xshell
Linux一般作为服务器使用,服务器一般都放在机房,不可能是你身边的Linux服务器,这时候我们需要一些工具来连接远程的Linux服务器来进行操作,xshell就是一种远程连接工具,其他Windows上常见的远程登录客户端有 SecureCRT, Putty,SSHSecure Shell,等
Linux系统中是通过SSH服务 实现的远程登录功能,默认ssh服务的端口号是22
xshell连接虚拟机如果比较慢
修改/etc/ssh 目录下的配置文件 sshd_config 命令 vim/etc/ssh/sshd_config
在sshd_config 115行,将 UseDNS前面的#去掉,然后将值改为no
重启虚拟机,应该就能很快连接上
UseDNS 是 SSH 服务中的一个配置选项。默认情况下,SSH 在客户端连接时,会尝试通过反向解析(reverse DNS lookup)将客户端的 IP 地址解析为主机名,然后再检查该主机名是否匹配已知的 IP 地址。此功能的目的是为了提供额外的安全性,确保连接的主机名和 IP 地址一致。
通过禁用 UseDNS 配置,减少了 SSH 连接过程中多余的 DNS 解析操作,消除了潜在的延迟原因,因此可以显著提升连接速度。这一设置对大多数应用场景都安全且高效,尤其是在无需通过反向解析验证客户端身份的环境中。
二、Xftp
通过Xshell可以连接远程Linux服务器,并通过命令操作远程虚拟机,但是Xshell无法完成较大的文件上传和下载,此时需要Xftp来完成。安装过程和Xshell基本一致。安装完成后,可以通过XShell来开启Xftp,然后执行文件上传下载操作
三、finalShell
finalShell是一款国产的服务器远程连接工具,集成了命令操作和文件上传功能,基础功能基本免费
Linux的目录结构
Linux常见的目录结构,不同版本的Linux目录结构可能略有不同
以Centos7的文件目录结构来介绍。打开主文件夹时,是根据当前登录的用户不同来进入其对应的"家"目录(命令行里用~
表示)。
这个"家"目录在哪呢?点击"其他位置",点击"计算机"来到根目录(命令行里用/
表示),即linux里的"我的计算机",就可以看到root目录,这个就是刚刚的"家目录",因为我们是以超级管理员的方式登录的,所以这个对应其"家目录"。
如果是普通用户,就是在根目录下的home目录里,里面有一些默认的文件夹,其目的是希望给非技术开发人员先打个样,让他们以这个格式存放自己的文件。
Linux根目录下的常见目录及作用
接下来挨个认识一下每个目录。
一、命令相关目录
/bin ★(/usr/bin,/usr/local/bin) /bin 是 Binary 的缩写(历史原因,以前的命令都是二进制文件,而非现在的c、shell等写好的脚本命令),最早存放的是二进制形式的基本命令文件。现在这里存放的是一些系统级别的基本可执行命令,例如 cd、ls、cp 等。Linux默认的环境变量已经包含该路径,所以这些命令对所有用户可用,且系统引导时也依赖于此目录。
后面做后端开发时也知道,bin目录下一般放的是脚本命令,比如一些基本的:启动、停止。 可以通过 echo $PATH 查看系统环境变量中是否包含该路径。
/sbin (/usr/sbin, /usr/local/sbin) s就是Super User的意思,/sbin 存放的是系统管理员专用的管理命令,例如 reboot、fsck、iptables 等。这些命令通常需要 root 权限才能执行。以上几个目录,任何命令在任意目录下都可执行命令
二、用户文件存放目录
/home ★存放普通用户的“家”目录,每个用户在此目录下有一个以用户名命名的文件夹,用于保存用户的个人文件和配置。
/root ★系统管理员(超级用户)的“家”目录,与 /home 下的普通用户目录类似,但用于 root 用户。
命令行里用
~
表示"家"目录,里用/
表示根目录
/opt ★/opt 是可选软件的安装目录。主要用于手动安装的第三方软件或程序,例如 JDK、Tomcat 等。该目录通常默认是空的。这个和"家"目录是最常用的两个目录。
/usr ★/usr 是 Unix System Resources 的缩写,存放用户的应用程序和相关文件。它类似于 Windows 的 “Program Files” 目录。
/usr/local ★/usr/local 是 /usr 的子目录,用于存放通过源码编译方式安装的程序,以免与系统自带的软件冲突。
三、系统文件相关目录
/etc ★存放系统的配置文件和子目录。在开发里也经常见到,类似“环境变量”的意思,是 “Editable Text Configuration” 的缩写。常见的服务配置文件(如 my.cnf、nginx.conf)通常位于此处。
/boot ★存放系统启动所需的文件,例如内核(vmlinuz)、初始化镜像(initrd.img)以及引导加载程序(如 GRUB)的配置文件。
/dev ★/dev 是 Device 的缩写。它是 Linux 中的设备文件目录,系统中所有硬件设备(如硬盘、光驱、终端)都以文件形式表示,例如 /dev/sda 表示磁盘。
/proc /proc 是一个虚拟文件系统,存放系统内核和进程的运行时信息,例如 /proc/cpuinfo(CPU 信息)。该目录内容由内核动态生成,用户通常通过读取它来获取系统状态。
/sys /sys 是 Linux 2.6 及之后版本引入的虚拟文件系统,配合 /proc 提供更为结构化的设备和内核信息,主要用于硬件和内核模块的管理。
四、依赖文件
/lib 和 /lib64 /lib 存放基本的共享库(类似于 Windows 的 DLL 文件),是系统启动和运行时不可或缺的依赖。存放一些依赖文件,比如gcc、java、python、kernel。 /lib64 是 64 位系统中专用的共享库目录。
五、挂载相关文件
/media ★/media 是系统用于挂载外部存储设备(如 U 盘、光盘)的目录。设备插入时会动态创建挂载点。
/mnt ★/mnt 是供用户临时挂载其他文件系统的目录,例如挂载网络存储或物理设备。
六、其他
/run 在linux上公布了对外的服务时,会在其中产生对应的文件。/run 存放系统启动后动态生成的运行时数据,例如进程的 PID 文件和服务的 socket 文件。
/srv /srv 是 service 的缩写,该目录存放一些服务启动之后需要提取的数据。存放系统提供的网络服务相关数据,例如 FTP 的文件或 HTTP 的网页资源。
/tmp 存放临时文件,系统和应用程序运行时常在此目录创建临时数据。系统重启后,/tmp 通常会被清空。
/var ★/var 存放动态变化的文件,例如日志(/var/log)、缓存(/var/cache)和 spool 文件(如打印任务)。我们习惯将那些经常被修改的目录放在这个目录下。比如各种日志文件。
/lost+found 每个 Linux 文件系统的根目录下都会有 lost+found 目录,用于存放文件系统检查(fsck)时恢复的孤立文件。这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
常用Linux命令
帮助类命令man
1.man
获取帮助信息
语法: man [命令或配置文件]
(功能描述:获得帮助信息)
比如查看ls命令的帮助信息 man ls
显示说明
信息 | 功能 |
---|---|
NAME | 命令的名称和单行描述 |
SYNOPSIS | 怎样使用命令 |
DESCRIPTION | 命令功能的深入讨论 |
EXAMPLES | 怎样使用命令的例子 |
SEE ALSO | 相关主题(通常是手册页) |
2.help
只获得shell内置命令的帮助信息
基本语法:help 命令
(功能描述:获得shell内置命令的帮助信息)
比如查看cd命令的帮助信息 help cd
我的评价是都不如用chat,观感比较差
★文件目录类命令 pwd ls cd mkdir rmdir touch cp rm mv cat more less head tail echo >覆盖和>>追加 ln创建链接和软连接 history
1.pwd
(print working directory ) 打印当前工作目录的绝对路径
2.ls
(list) 列出目录内容
基本语法 ls [选项] [目录或是文件]
选项说明
选项 | 功能 |
---|---|
-a | 全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用) |
-l | 长数据串列出,包含文件的属性与权限等等数据;(常用) |
每行列出的信息依次是: 文件类型与权限 链接数 文件属主 文件属组 文件大小用Byte来表示 建立或最近修改的(月、日、时间) 名字
[root@centos100 ~]# ls -al
总用量 80
dr-xr-x---. 15 root root 4096 11月 7 19:08 .
dr-xr-xr-x. 17 root root 224 11月 3 20:18 ..
-rw-------. 1 root root 1533 11月 3 20:19 anaconda-ks.cfg
-rw-------. 1 root root 1996 11月 7 18:54 .bash_history
-rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
drwx------. 15 root root 4096 11月 6 14:03 .cache
drwxr-xr-x. 16 root root 4096 11月 6 17:00 .config
-rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
drwx------. 3 root root 25 11月 3 20:25 .dbus
-rw-------. 1 root root 16 11月 3 20:28 .esd_auth
-rw-------. 1 root root 1550 11月 7 19:04 .ICEauthority
-rw-r--r--. 1 root root 1581 11月 3 20:25 initial-setup-ks.cfg
drwx------. 3 root root 19 11月 3 20:28 .local
drwx------. 5 root root 66 11月 3 20:29 .mozilla
-rw-r--r--. 1 root root 6939 11月 6 15:35 smartd1.conf
-rw-r--r--. 1 root root 6792 11月 6 15:48 smartd.conf
-rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
-rw-------. 1 root root 4518 11月 7 19:08 .viminfo
-rw-------. 1 root root 165 11月 7 18:55 .Xauthority
ls -l
与ll
效果一样
“总用量”指的是当前目录中每个文件的元信息和目录的元数据,以块数(blocks) 为单位。块的默认大小通常是 512 字节。如果想递归计算当前目录下的所有文件和子目录的实际数据大小可以使用
du
命令,例如du -sh .
,这会显示当前目录的总大小并以可读格式(如 KB、MB)显示。
3.cd
(Change Directory)切换路径
基本语法 cd [参数]
参数说明
参数 | 功能 |
---|---|
cd 绝对路径 | 切换路径 |
cd 相对路径 | 切换路径 |
cd ~或者cd | 回到自己的家目录 |
cd - | 回到上一次所在目录 |
cd .. | 回到当前目录的上一级目录 |
cd -P | 跳转到实际物理路径,而非快捷方式路径 |
cd / | 回到系统根目录 |
4.mkdir
(Make directory) 建立目录
基本语法 mkdir [选项] 要创建的目录
选项说明
选项 | 功能 |
---|---|
-p | 创建多层目录 |
创建一个多级目录
[root@centos100 ~]# mkdir -p xiyou/qujing/meihouwang
5.rmdir
(Remove directory) 删除目录
基本语法 rmdir 要删除的空目录
rmdir
命令只能删除指定路径中最后一级目录,而且这个目录必须是空的。如果需要删除非空目录及其中的内容,应该用rm -r
或rm -rf
命令。
6.touch
创建空文件
基本语法 touch 文件名称
如果指定的文件已经存在,touch 不会改变文件内容,而是更新文件的访问时间和修改时间。
7.cp
复制文件或目录。支持简单的文件复制和递归复制整个目录。
基本语法 cp [选项] source dest
(将 source(源文件或目录)复制到 dest(目标文件或目录)),如果目标位置已经存在相同名称的文件或目录,默认会一个个提示是否覆盖(可通过选项强制覆盖),通过y或n进行选择。
选项说明
选项 | 功能 |
---|---|
-r | 递归复制整个文件夹 |
-i | 覆盖文件前提示用户确认 |
-f | 强制复制,覆盖目标文件无提示 |
-p | 保留文件属性(如时间戳、权限) |
-u | 需要同步文件内容时使用,仅在源文件比目标文件更新时才进行复制 |
cp
的默认别名为cp -i
,那就是说cp
本身就是自带覆盖提醒,就算我们加上-f
的选项,它还是会优先匹配-i
的选项。那么这个时候可以使用\cp
,因为\cp
会绕过任何可能的别名,命令会直接调用系统的原始cp
命令,那么也就相当于没有-i
了,即会强制复制。不建议删除默认的cp
的别名,Linux中最忌讳的就是删除文件了,如果取消-i的选项,那么以后默认使用cp
命令,
8.rm
移除文件或者目录
基本语法 rm [选项] deleteFile
选项说明
选项 | 功能 |
---|---|
-r | 递归删除目录所有内容 |
-f | 强制删除,不提示用户进行确认 |
-v | 显示指令的详细执行过程 |
9.mv
移动文件与目录或重命名
基本语法 重命名:mv oldNameFile newNameFile
移动文件:mv /temp/movefile /targetFolder
mv 默认会递归地移动整个文件夹及其所有内容(包括子文件夹和文件)到目标位置。不需要额外的选项指定递归操作。默认情况下不会提示用户。如果目标位置已存在,会覆盖已有的文件或目录,且不会有警告提示。
选项说明
选项 | 功能 |
---|---|
-i | 覆盖时提示 |
-n | 不覆盖已有文件 |
-f | 强制覆盖(忽略提示) |
10.cat
查看文件内容
基本语法 cat [选项] 文件
查看文件内容,从第一行开始显示
一般查看比较小的文件,一屏幕能显示全的
选项说明
选项 | 功能描述 |
---|---|
- n | 显示所有行的行号,包括空行 |
11.more
文件分屏查看器
基本语法 more 要查看的文件
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键,详见操作说明。
操作说明
操作 | 功能说明 |
---|---|
空白键 (space) | 代表向下翻一页; |
Enter | 代表向下翻『一行』; |
q | 代表立刻离开 more ,不再显示该文件内容。 |
Ctrl+F | 向下滚动一屏 |
Ctrl+B | 返回上一屏 |
= | 输出当前行的行号 |
:f | 输出文件名和当前行的行号 |
12.less
分屏显示文件内容
基本语法 less 要查看的文件
less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
操作说明
操作 | 功能说明 |
---|---|
空白键 | 向下翻动一页; |
[pagedown] | 向下翻动一页 |
[pageup] | 向上翻动一页; |
/字串 | 从当前位置向下查找字串。按 / 键后输入要查找的字符串,按 Enter 开始搜索。如果找到匹配项,会高亮显示,并定位到匹配内容。按 n:查找下一个匹配项。按 N:查找上一个匹配项。; |
?字串 | 从当前位置向上查找字串。按 ? 键后输入要查找的字符串,按 Enter 开始搜索。如果找到匹配项,会高亮显示,并定位到匹配内容。按 n:查找上一个匹配项。按 N:查找下一个匹配项。 |
q | 离开 less 这个程序; |
13.head
显示文件头部内容
基本语法 head 文件
(功能描述:查看文件头10行内容)
head -n 5 文件
(功能描述:查看文件头5行内容,5可以是任意行数)
14.tail
输出文件尾部内容
基本语法 tail 文件
(功能描述:查看文件后10行内容)
tail -n 5 文件
(功能描述:查看文件后5行内容,5可以是任意行数)
tail -f 文件
(功能描述:实时追踪该文档的所有更新)
我在centOS测试发现
tail -f
不能追踪我vim修改某个文件的更新,但是tail -F
就可以,不清楚原因。
15.echo
打印信息
基本语法 echo [选项] [输出内容]
相当于Bash里的System.out.println();
选项说明
选项 | 功能 |
---|---|
-e | 启用反斜杠转义字符(例如 \n、\t) |
-n | 不自动换行(输出完毕后不换行) |
控制字符 | 作用 |
---|---|
\\ | 输出\本身 |
\n | 换行符 |
\t | 制表符,也就是Tab键 |
name="Alice"
echo "Hello, $name" # 输出:Hello, Alice
echo 'Hello, $name' # 输出:Hello, $nameecho "hello\tworld" # hello\tworld
echo -e "hello\tworld" # hello world$ echo $PATH # 打印环境变量
printf
更加灵活和强大。printf
支持更多的格式化选项,比如控制输出宽度、精度等,而echo
主要用于简单的输出。
16.> 覆盖和>>追加
>
(覆盖写)和 >>
(追加写)都是用于重定向输出到文件的符号
ls -l>houge.txt # 将ls查看信息覆盖写入到文件中
ls -l>>houge.txt # 将ls查看信息追加到文件中
echo hello>>houge.txt # 采用echo将hello单词追加到文件中
17.ln
创建链接和软连接
ln 可以创建两种类型的链接:硬链接(hard link)和符号链接(symbolic link,也称软连接)
a.硬链接是指不同的文件名指向同一个磁盘上的数据块(inode)。硬链接本质上是多个文件名共享相同的 inode,文件的数据内容不会重复存储。所有的硬链接共享同一个 inode,因此它们是完全相等的。
创建硬链接的语法:ln <源文件> <目标文件>
ln file1.txt file2.txt
这个命令会创建一个硬链接 file2.txt,指向 file1.txt 的 inode。file2.txt 和 file1.txt 是同一个文件,只是不同的名字。
如果你修改 file1.txt 或 file2.txt,实际上修改的是同一个文件。
如果删除 file1.txt 或 file2.txt 中的任何一个文件,另一个文件依然存在,并且文件内容不会丢失,直到所有硬链接都被删除。
注意:硬链接不能跨越不同的文件系统;不能对目录创建硬链接(除了root用户)。
b.符号链接类似于 Windows 系统中的快捷方式。它是一个特殊的文件,指向另一个文件或目录。符号链接有自己的 inode 和内容,它们存储的是目标文件或目录的路径,而不是实际数据。符号链接可以跨文件系统,并且可以指向目录。
创建符号链接的语法:ln -s <源文件或目录> <目标链接>
ln -s /path/to/original_file.txt symlink.txt
rm -rf symlink.txt # 删除软连接
cd -P 软连接目录 # 如果软连接是个目录 可以通过-P 进入实际物理路径
# 也可以通过`ll`或者`readlink 软连接` 查看器真实路径
这个命令会创建一个名为 symlink.txt 的符号链接,指向 /path/to/original_file.txt。
symlink.txt 只包含一个指向 original_file.txt 的路径,不会存储实际内容。你可以通过 symlink.txt 访问 original_file.txt。
注意:如果目标文件被删除,符号链接会变成"死链接"(dangling link),即指向一个不存在的文件或目录;符号链接可以跨越不同的文件系统,并且可以指向目录。
在当前目录测试创造某个txt的连接去另外一个目录发现,不能直接使用当前文件的相对路径,用绝对路径就可以了,不知道为什么。猜测是因为符号链接的相对路径是基于链接文件位置的,所以最好用绝对路径吧。
18.history
查看历史命令
基本语法 history
(功能描述:查看已经执行过历史命令)
/root/.bash_history文件存放的就是历史命令
less /root/.bash_history
★文件权限类命令 chmod chown chgrp
文件属性信息解读
上图d表示这是一个目录;后面 9 个字符:文件权限。这部分分为 3 组,每组 3 个字符,分别表示所有者、所属组和其他用户的权限。 所有者权限 (rwx),可读、写与执行,对目录来说,x 权限表示可以进入该目录(cd 命令)。所属组权限 (r-x)
r:可读。-:不可写。x:可执行(可进入目录)。其他用户权限 (r-x)r:可读。-:不可写。x:可执行(可进入目录)。
(1) 0首位表示类型 在Linux中第一个字符代表这个文件是目录、文件或链接文件等等
符号 | 对应文件类型 |
---|---|
- | 代表文件 |
d | d 代表目录 |
l | 链接文档(link file); |
b 表示块设备文件。c 表示字符设备文件。p 表示命名管道。s 表示套接字。
(2)第1-3位确定属主(该文件的所有者)拥有该文件的权限。U →User
(3)第4-6位确定属组(所有者的同组用户)拥有该文件的权限,G→Group
(4)第7-9位确定其他用户拥有该文件的权限 , O →Other
rwx作用到目录和文件的不同含义
作用到文件
[ r ]代表可读(read): 可以读取,查看
[ w ]代表可写(write): 可以修改,但是不能删除该文件,对该文件所在的目录有写权限,才能删除.
[ x ]代表可执行(execute):可以被系统执行
作用到目录
[ r ]代表可读(read): 可以读取,ls查看目录内容
[ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录
[ x ]代表可执行(execute):可以进入该目录
实操案例
# 查看文件权限信息
[root@centos100 ~]# ll
总用量 104
-rw-------. 1 root root 1248 1月 8 17:36 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 1月 12 14:02 qujing
lrwxrwxrwx. 1 root root 20 1月 12 14:32 houzi -> xiyou/qujing/houge.tx
如果查看到是文件:链接数指的是硬链接个数
如果查看的是文件夹:链接数指的是子文件夹个数
chmod chown chgrp
1.chmod
改变文件权限
第一种方式变更权限 chmod [{ugoa}{+-=}{rwx}] 文件或目录
u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)
第二种方式变更权限 chmod [mode=421 ] [文件或目录]
r=4 w=2 x=1 rwx=4+2+1=7
实操案例
# 修改文件使所有用户类别具有执行权限
chmod +x houge.txt# 修改文件使其所属组用户具有执行权限
chmod g+x houge.txt# 修改文件所属主用户执行权限,并使其他用户具有执行权限
chmod u-x,o+x houge.txt# 修改文件,赋予所有人(u, g, o)读取权限
chmod a+r houge.txt# 采用数字的方式,设置文件所有者、所属组、其他用户都具有可读可写可执行权限
chmod 777 houge.txt# 设置文件所有者具有可读写权限,所属组具有只读权限,其他用户没有任何权限
chmod 640 houge.txt# 修改整个文件夹及其子目录、文件,使所有者、所属组和其他用户都具有可读写执行权限
# -R 递归
chmod -R 777 xiyou/# 递归移除所有人对文件夹及其内容的写权限
chmod -R a-w xiyou/
配合其他命令使用的场景
# 查找所有 `.sh` 脚本文件并赋予执行权限
find /path/to/scripts -type f -name "*.sh" -exec chmod +x {} \;# 批量修改某目录下的文件权限,只赋予可读权限
chmod 444 /path/to/files/*# 修改文件权限时配合 `ls` 验证效果
chmod 600 sensitive_data.txt && ls -l sensitive_data.txt
特殊权限修改(高级用法)
# 赋予文件粘滞位权限,只允许文件的拥有者删除
chmod +t shared_folder# 设置文件的 SUID 位,允许执行该文件时以文件所有者身份运行
chmod u+s program_binary# 设置文件的 SGID 位,允许组用户运行该文件时继承所属组权限
chmod g+s shared_script.sh
2.chown
改变所有者
基本语法 chown [选项] [最终用户] [文件或目录]
(功能描述:改变文件或者目录的所有者)
实操案例
# 修改文件所有者
[root@centos100 ~]# chown atguigu houge.txt
[root@centos100 ~]# ls -al
-rwxrwxrwx. 1 atguigu root 551 5月 23 13:02 houge.txt# 递归改变文件所有者和所有组
[root@centos100 xiyou]# chown -R atguigu:atguigu xiyou/
3.chgrp
改变所属组
基本语法 chgrp [最终用户组] [文件或目录]
(功能描述:改变文件或者目录的所属组)
★压缩和解压缩命令 gzip/gunzip zip/unzip tar
功能 | gzip/gunzip | zip/unzip | tar |
---|---|---|---|
压缩单个文件 | 支持 | 支持 | 支持 |
压缩目录 | 不支持 | 支持 | 支持 |
解压缩操作 | 支持 | 支持 | 支持 |
是否保留源文件 | 不保留 | 保留 | 保留 |
跨平台兼容性 | Linux专用 | Windows/Linux通用 | Linux专用 |
操作复杂度 | 简单 | 简单 | 较复杂 |
1.gzip/gunzip
命令
压缩:gzip 文件
将文件压缩为 .gz 格式。
压缩:gunzip 文件.gz
解压缩 .gz 格式的文件。
经验:只能压缩文件,无法直接压缩目录。压缩时不保留原文件,解压后不保留压缩文件。
# 压缩文件
[root@centos100 ~]# ls
houge.txt
[root@centos100 ~]# gzip houge.txt
[root@centos100 ~]# ls
houge.txt.gz# 解压缩文件
[root@centos100 ~]# gunzip houge.txt.gz
[root@centos100 ~]# ls
houge.txt
优点:简单高效,适合单文件的压缩与解压。
限制:不能处理目录;压缩或解压后原文件会被替换。
2.zip/unzip
命令
压缩:zip [选项] 压缩包名.zip 要压缩的内容
压缩文件或目录,生成 .zip 格式压缩包。
解压:unzip [选项] 压缩包名.zip
解压 .zip 格式压缩包。
zip选项 | 功能 |
---|---|
-r | 递归压缩目录(默认不递归) |
unzip选项 | 功能 |
---|---|
-d<目录> | 指定解压后文件的存放目录 |
经验:跨平台:zip/unzip 命令在 Windows 和 Linux 系统上通用。保留原文件:压缩或解压后不会删除源文件。
如果 zip 在不加 -r 选项的情况下尝试压缩某个目录,它的默认行为是 只添加目录的元信息(即目录本身),而不会压缩目录中的内容。压后会看到一个空的目录
# 压缩文件
[root@centos100 opt]# touch bailongma.txt
[root@centos100 ~]# zip houma.zip houge.txt bailongma.txt
adding: houge.txt (stored 0%)
adding: bailongma.txt (stored 0%)
[root@centos100 opt]# ls
houge.txt bailongma.txt houma.zip# 解压文件
[root@centos100 ~]# unzip houma.zip
Archive: houma.zip
extracting: houge.txt
extracting: bailongma.txt
[root@centos100 ~]# ls
houge.txt bailongma.txt houma.zip# 解压到指定目录
[root@centos100 ~]# unzip houma.zip -d /opt
[root@centos100 ~]# ls /opt/
houge.txt bailongma.txt
优点:支持文件和目录的压缩,支持跨平台,保留源文件。
限制:压缩率不如 gzip。
3.tar
命令
压缩:tar [选项] 压缩包名.tar.gz 要打包的内容
打包多个文件或目录,生成 .tar.gz 格式文件。tar 默认是递归压缩目录的。
解压:tar [选项] 压缩包名.tar.gz
解压 .tar.gz 格式文件。
选项 | 功能 |
---|---|
-z | 打包同时压缩 |
-c | 产生.tar打包文件 |
-C | 指定解压目录 |
-v | 显示详细信息 |
-f | 指定压缩后的文件名 |
-x | 解包.tar文件 |
经验:tar 通常与 gzip 配合使用,生成 .tar.gz 压缩包。支持大文件、目录和多文件打包压缩。
# 压缩多个文件
[root@centos100 opt]# tar -zcvf houma.tar.gz houge.txt bailongma.txt
houge.txt
bailongma.txt
[root@centos100 opt]# ls
houma.tar.gz houge.txt bailongma.txt# 压缩目录
[root@centos100 ~]# tar -zcvf xiyou.tar.gz xiyou/
xiyou/
xiyou/mingjie/
xiyou/qujing/
xiyou/qujing/houge.txt# 解压到当前目录
[root@centos100 ~]# tar -zxvf houma.tar.gz# 解压到指定目录
[root@centos100 ~]# tar -zxvf xiyou.tar.gz -C /opt
[root@centos100 ~]# ll /opt/
优点:高效、灵活,适合大文件和目录的压缩与解压。
限制:命令相对复杂。
★VI和VIM编辑器
1.什么是VI和VIM编辑器
vi是Unix和类Unix操作系统中出现的通用的文本编辑器。vim是从vi发展出来的一个性能更强大的文本编辑器,可以主动的以字体颜色辨别语法的正确性,方便程序设计,vim和vi编辑器完全兼容。使用:vi xxx文件
或者vim xxx文件
2.VIM的一般模式(默认模式)
在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、贴上』来处理你的文件数据。
1.删除和复制操作(部分)
操作 | 描述 |
---|---|
dd | 删除当前行 |
dnd | 删除n行 |
u | 撤销上一步 |
x / X | 删除光标所在字符 |
yy /Y | 复制当前行 |
p | 粘贴复制或删除的内容 |
dw | 删除一个词 |
yw | 复制一个词 |
2.光标移动操作(部分)
操作 | 描述 |
---|---|
gg | 移动到文件的第一行 |
G | 移动到文件的最后一行 |
数字+G | 移动到目标行 |
^ | 移动到当前行的第一个非空字符 |
$ | 移动到当前行的行尾 |
0 | 移动到当前行的行首 |
ZZ | 如果没有修改直接退出,否则保存后退出 |
3.VIM的编辑模式
按下『i, o,a, r』等任何一个字母或其大写之后才会进入编辑模式。分别对应的编辑模式如下(大部分情况下也就是用个i,感觉也不需要去记其他的)
按键 | 模式类型 | 操作描述 |
---|---|---|
i | 插入模式 | 在光标 前面 插入文本。 |
I | 插入模式 | 移动到当前行的 第一个非空字符 并插入文本。 |
o | 插入模式 | 在当前行的 下一行 新建行并插入文本。 |
O | 插入模式 | 在当前行的 上一行 新建行并插入文本。 |
a | 插入模式 | 在光标 后面 插入文本。 |
A | 插入模式 | 移动到当前行的行尾,追加文本。 |
r | 替换单个字符模式 | 替换光标所在单个字符,操作完成后返回一般模式。 |
R | 连续替换模式 | 连续替换字符,直到按 Esc 退出。 |
通常在 Linux 中,按下这些按键时,在画面的左下方会出现『INSERT 或 REPLACE 』的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下『Esc』这个按键即可退出编辑模式。
4.VIM的命令模式
可以进行存盘、退出、显示行号、搜索、批量替换等操作。要在一般模式下输入" / “或 " : " 或者”?"可进入命令模式,当命令执行前按esc或者命令执行完毕,自动回到一般模式
4.1 文件操作命令
命令 | 描述 |
---|---|
:w | 保存当前文件 |
:w filename | 另存为指定文件名 |
:q | 退出(如果有修改会报错) |
:q! | 强制退出(不保存修改) |
:wq 或 :x | 保存文件并退出 |
:r filename | 读取文件内容并插入到当前光标位置 |
:! command | 执行外部系统命令,如 :!ls |
4.2 显示和行号操作
命令 | 描述 |
---|---|
:set nu | 显示行号 |
:set nonu | 取消显示行号(默认) |
:set ruler | 在右下角显示光标的行号和列号 (默认) |
:set noruler | 取消在右下角显示光标的行号和列号 |
:set list | 显示不可见字符(如换行符、制表符) |
:set nolist | 关闭不可见字符显示(默认) |
4.3 搜索操作
命令 | 描述 |
---|---|
/pattern | 向下搜索指定的字符串(pattern 可以是 字符串 或 正则表达式)。 |
?pattern | 向上搜索指定的字符串(pattern 可以是 字符串 或 正则表达式)。 |
n | 跳到下一个匹配的搜索结果。 |
N | 跳到上一个匹配的搜索结果。 |
:noh | 关闭高亮显示的搜索结果。 |
4.4 批量替换操作
命令 | 描述 |
---|---|
:s/old/new/ | 替换当前行第一个出现的 old 为 new 。 |
:s/old/new/g | 替换当前行所有出现的 old 为 new 。 |
:%s/old/new/g | 替换整个文件中所有的 old 为 new 。 |
:%s/old/new/gc | 替换整个文件中所有的 old 为 new (需确认)。 |
:10,20s/old/new/g | 替换第 10 行到第 20 行中的 old 为 new 。 |
4.5 文件导航与跳转
命令 | 描述 |
---|---|
:n | 跳到下一个打开的文件(vim可以一次性打开多个文件:vim file1.txt file2.txt file3.txt ,:args 命令可以查看当前的文件列表。也可以在 VIM 运行时,通过 :args file1.txt file2.txt file3.txt 命令加载新的文件列表。) |
:prev | 跳到上一个打开的文件 |
:first | 跳到文件的第一行 |
:last | 跳到文件的最后一行 |
:line_number | 跳到指定行,如 :10 跳到第 10 行。 |
4.6 缓冲区和窗口操作
命令 | 描述 |
---|---|
:ls 或 :buffers | 列出当前打开的所有缓冲区文件 |
:b next | 切换到下一个缓冲区文件 |
:b prev | 切换到上一个缓冲区文件 |
:split | 水平分割窗口 |
:vsplit | 垂直分割窗口 |
:q | 关闭当前窗口 |
Ctrl-w | 在分割的窗口之间切换 |
参数列表中的文件:
vim file1.txt file2.txt file3.txt
缓冲区 中的文件可能:是来自参数列表中的文件。也可能是手动打开的、并不在参数列表中的文件。
4.7 其他实用命令
命令 | 描述 |
---|---|
:syntax on | 开启语法高亮显示 |
:syntax off | 关闭语法高亮显示 |
:set tabstop=4 | 设置制表符宽度为 4 个空格 |
:set paste | 开启粘贴模式,防止自动缩进干扰 |
:set nopaste | 关闭粘贴模式(默认) |
:!command | 执行外部系统命令,如 :!ls |
VIM 默认启用了 自动缩进(Auto Indentation) 和其他格式化功能。当你在插入模式下粘贴内容时,VIM 会试图对每一行进行自动缩进,这会导致文本的格式被破坏。粘贴模式会 关闭 自动缩进、自动格式化等功能。粘贴内容时,文本会以 原始格式 直接插入到文件中。
★搜索查找类命令 find grep |
1.find
查找文件或者目录
基本语法 find [搜索范围] [选项]
find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端。
选项 | 功能 |
---|---|
-name <模式> | 按文件名模式查找文件,支持通配符 *, ? 等 |
-iname <模式> | 忽略大小写,按文件名模式查找文件 |
-user<用户名> | 查找指定用户拥有的文件或目录 |
-group <组名> | 查找指定用户组拥有的文件或目录 |
-size<文件大小> | 按照指定的文件大小查找文件,+表示大于,-表示小于,=表示等于 |
-type <类型> | 按文件类型查找:f 文件,d 目录,l 符号链接等 |
-mtime/-atime <n> | 按修改时间/访问时间查找文件:+n 表示大于或等于 n 天,-n 表示最近 n 天内,n表示正好n天 |
-perm <权限> | 查找具有指定权限的文件 |
-exec <命令> | 对找到的文件执行指定操作,通常与 {} 配合 |
-maxdepth/-mindepth <n> | 限制查找的目录深度/最小目录深度 |
实操案例
# 查找 `atguigu` 用户的文件
find /opt -user atguigu# 查找最近 2 小时内修改过的文件
find /tmp -mmin -120# 查找 30 天前访问过的文件
find /backup -atime +30# 忽略大小写:在 `docs/` 目录下查找文件名包含 "README" 的文件
find docs/ -iname "*readme*"# 查找 `xiyou/` 中文件名以 `.sh` 结尾且小于 10 KB 的文件
find xiyou/ -name "*.sh" -size -10k# 查找 `tmp/` 中所有 `.log` 文件并删除
find /tmp -name "*.log" -exec rm -f {} \;# 查找 `/var` 中大于 1 GB 的文件并显示详细信息
find /var -size +1G -exec ls -lh {} \;# 仅查找当前目录(不进入子目录)中的 `.conf` 文件
find . -maxdepth 1 -name "*.conf"# 从第 2 层开始查找文件名包含 `backup` 的目录
find /data -mindepth 2 -type d -name "*backup*"# 查找符号链接文件
find /usr -type l# 查找空文件或空目录
find /var -type f -empty
find /var -type d -empty# 查找 inode 号为 12345 的文件
find / -inum 12345
2.grep
过滤查找及 |
管道符
grep 的源文件范围是一个目录时,它会递归查找 目录下所有文件的内容(如果加上 -r 选项)。如果要查找的是文件名,而不是文件内容,推荐使用 find。当然如果文件范围在当前目录,并不涉及递归子目录,可以使用 ls 与 grep 配合。如果需要结合 文件名和文件内容:可以通过 find 和 grep 的组合完成(下面案例有)。
grep
用于在文本中查找匹配的行并输出,可以结合多种选项定制查找行为。基本语法: grep [选项] "查找内容" [源文件]
管道符 |
:将前一个命令的输出传递给后一个命令作为输入
选项 | 功能 |
---|---|
-n | 显示匹配内容及对应的行号。 |
-i | 忽略大小写匹配。 |
-l | 只显示匹配的文件名,而不显示具体匹配内容,如果在多个文件中查找某个模式时使用 |
-r | 递归搜索指定目录下的所有文件及子目录中的文件。 |
-v | 反向匹配(显示不包含指定内容的行)。 |
-c | 统计匹配的行数。 |
-o | 仅显示匹配的内容部分。 |
-w | 仅匹配整个单词。 |
-A <行数> | 显示匹配行及其后 <行数> 行内容。 |
-B <行数> | 显示匹配行及其前 <行数> 行内容。 |
-C <行数> | 显示匹配行及前后 <行数> 行内容。 |
--color=auto | 高亮显示匹配的内容(大多数系统默认开启)。 |
-E | 默认grep使用基本正则表达式,而 -E 开启扩展正则表达式,允许使用更复杂的正则表达式语法。 |
实操案例
# 1. 基本查找
# 查找文件中包含 "test" 的行
grep "test" example.txt# 查找文件中包含 "error" 的行,忽略大小写
grep -i "error" logs.txt# 查找文件中包含 "success" 的行,同时显示行号
grep -n "success" output.txt# 2. 统计和过滤
# 统计文件中包含 "TODO" 的行数
grep -c "TODO" code.py# 查找不包含 "DEBUG" 的行(反向匹配)
grep -v "DEBUG" logs.txt# 查找文件中包含完整单词 "main" 的行
grep -w "main" program.c# 3. 上下文查找
# 查找包含 "error" 的行,并显示后 3 行内容
grep -A 3 "error" logs.txt# 查找包含 "warning" 的行,并显示前 2 行内容
grep -B 2 "warning" logs.txt# 查找包含 "test" 的行,并显示前后 5 行内容
grep -C 5 "test" example.txt# 4. 配合管道符 |
# 列出当前目录中包含 "test" 的文件或目录
ls | grep "test"# 当前目录下,文件名以 ".txt" 结尾的文件
ls | grep "\.txt$"# 查找当前登录用户并高亮显示
who | grep --color=auto "$USER"# 显示当前系统的进程信息,并过滤出包含 "bash" 的进程
ps aux | grep "bash"# 5. 使用正则表达式查找多种模式
# 查找包含 "error" 或 "fail" 的行
grep -E "error|fail" logs.txt# 查找包含以 "start" 开头或以 "end" 结尾的行
grep -E "^start|end$" example.txt# 6. 从多个文件查找
# 在多个文件中查找内容包含 "main" 的文件名
grep -l "main" *.c# 查找目录下所有文件的内容中包含 "TODO" 的行
grep -r "TODO" /path/to/dir# 7. 组合find
# 在目录及其子目录下,文件名包含 "main" 的文件
find /path/to/dir | grep "main"# 查找文件名包含 "main" 且内容包含 "TODO" 的文件
find /path/to/dir -name "*main*" -exec grep -l "TODO" {} \;
进程线程类命令 ps kill
1.ps
(process status 进程状态)查看当前系统进程状态
基本语法示例 ps -aux | grep xxx
显示所有用户的所有进程,包括无终端的后台进程。
ps -ef | grep xxx
显示进程的详细信息以及父进程和子进程之间的关系。
选项 | 功能 |
---|---|
-a | 选择所有进程 |
-u | 显示所有用户的所有进程 |
-x | 显示没有终端的进程 |
-e | 显示系统中所有进程(等价于 -A) |
-f | 全格式显示进程信息,包括用户、PID、PPID、启动时间、命令等 |
H | 显示线程信息,每个线程都会以单独的行显示 |
-o | 自定义输出格式,可以按需要指定列,例如 pid, tid, %cpu, %mem 等 |
–sort | 按指定的字段排序,例如按 CPU 使用率 --sort=-%cpu 或内存使用率 --sort=-%mem 排序 |
-L | 显示线程列表,通常与 pid 结合使用 |
功能说明
# (1)ps -aux显示信息说明
USER:该进程是由哪个用户产生的
PID:进程的ID号
%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源;
%MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源;
VSZ:该进程占用虚拟内存的大小,单位KB;
RSS:该进程占用实际物理内存的大小,单位KB;
TTY:该进程是在哪个终端中运行的。其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端。pts/0-255代表虚拟终端(如 SSH 连接)。
STAT:进程状态。常见的状态有:R:运行、S:睡眠、T:停止状态、s:包含子进程、+:位于后台
START:该进程的启动时间
TIME:该进程占用CPU的运算时间,注意不是系统时间
COMMAND:产生此进程的命令名# (2)ps -ef显示信息说明
UID:程所属用户的ID
PID:进程ID
PPID:父进程ID
C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
STIME:进程启动的时间
TTY:进程所在的终端名称
TIME:进程累计占用的 CPU 时间
CMD:启动进程所用的命令和参数
使用经验:
# 查看高资源占用的进程
ps -aux --sort=-%cpu | head# 查看某个用户的进程
ps -u 用户名# 查看特定进程的父进程 ID (PPID)
ps -ef | grep 进程名# 持续动态查看进程
推荐使用 top 或 htop 命令,动态显示 CPU 和内存占用
实操案例
# 1.使用top命令查看占用cpu的情况,可以查看是哪一个进程占用cpu较高,比如进程为:30978
top# 2.查看当前进程的线程信息
# 命令指定了要打印的内容 pid:进程id;tid:进程中的线程id; %cpu:使用率
ps H -eo pid,tid,%cpu | grep 30978# 3.假如在进程30978中的线程30979占用cpu较高。把这个线程id转换为16进制才行,因为通常在日志中展示的都是16进制的线程id名称
printf “%x\n” 30979 # 输出7903# 4. 可以根据线程 id 在有问题的线程里,进一步定位到问题代码的源码行号
# 执行之前学习过的命令jstack 30978 此处是进程id,获得整个进程的线程堆栈。
# 在输出中搜索 0x78d3(线程ID的16进制表示)。这会定位到占用CPU的线程的堆栈信息,从而找到相关的代码逻辑问题。
2.kill
终止进程
kill [选项] 进程号
通过进程号杀死进程默认发送 SIGTERM 信号(编号 15),要求进程正常退出。如果进程无法响应(如挂起),需要使用 -9 强制终止。
killall 进程名称
通过进程名称杀死进程,也支持通配符
选项 | 功能 |
---|---|
-9 | 表示强制终止进程(发送 SIGKILL 信号) |
-15 | 发送 SIGTERM,请求进程正常退出(默认信号) |
-l | 显示所有支持的信号列表 |
-s | 指定要发送的信号类型 |
# 根据进程号终止进程,强制终止进程号为 5102 的进程
kill -9 5102# 通过进程名称杀死进程,杀死所有名为 firefox 的进程
killall firefox# 查看支持的信号,列出所有信号名称及对应编号。例如,-9 对应 SIGKILL,-15 对应 SIGTERM
kill -l# 指定信号类型,发送 SIGTERM 信号(等效于 kill 5102)
kill -s SIGTERM 5102
其他Linux命令
开关机/服务类命令 sync poweroff shutdown service systemctl chkconfig
1.开关机类命令
一般Linux不会经常进行关机操作,正确的关机流程为: sync>shutdown> reboot >poweroff
sync
将内存中的数据同步到硬盘中
poweroff
关闭系统, 等同于shutdown -h now
reboot
重启系统,等同于shutdown -r now
shutdown[选项] 时间
选项 | 功能 |
---|---|
-h | -h=halt关机 |
-r | -r=reboot重启 |
注意事项。Linux系统中为了提高磁盘读写效率,对磁盘采取了"预读迟写"操作方式,当用户保存文件时,Linux核心并不一定对保存的数据立刻写入物理磁盘,而是将数据保存在缓冲区中,等缓冲区写满时再写入磁盘,这种方式可以极大的提高磁盘写入数据的效率.同时也带来了安全隐患. 如果数据还未写入磁盘时,系统掉电或者出现其他严重的问题造成宕机,可能会造成数据的丢失.使用
sync
指令可以立即将缓冲区的数据写入磁盘
2.临时开关服务命令
centos6:
service 服务名 start
开启服务
service 服务名 stop
关闭服务
service 服务名 restart
重启服务
service 服务名 status
查看服务状态
centos7:
systemctl start 服务名
开启服务
systemctl stop 服务名
关闭服务
systemctl restart 服务名
重启服务
systemctl status 服务名
查看服务
systemctl --type service
查看正在运行的服务
# 实操
# 1 查看网络服务状态
systemctl status network.service # .service后缀可以省略不写
# 2 关闭服务
systemctl stop network.service
# 3 启动服务
systemctl start network.service
# 查看所有服务
systemctl --type service
3.永久开关服务命令
centos6:
chkconfig
查看所有服务自启配置
chkconfig 服务名 off
关闭服务自启
chkconfig 服务名 on
开启服务自启
chkconfig 服务名 --list
查看服务开机启动状态
centos7:
systemctl enable 服务名
打开自启
systemctl disable 服务名
关闭自启
systemctl is-enabled 服务名
查看服务是否自启
systemctl list-unit-files
查看所有服务自启配置
# 实操
# 1 关闭防火墙自动启动
systemctl status firewalld 查看防火墙
systemctl disable firewalld 关闭防火墙自启# 2 开启防火墙自启
systemctl enable firewalld# 3 查看防火墙是否自启
systemctl is-enabled firewalld# 4 关闭网络管理器服务
systemctl status NetworkManager.service # 查看服务
systemctl stop NetworkManager # 停止服务
systemctl is-enabled NetworkManager # 查看自启动
systemctl disable NetworkManager # 关闭自启动
Linux系统有7种运行级别(runlevel):常用的是级别3和5(CentOS7中只有两个级别了:3和5)
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS),不支持网络
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
时间日期类命令 date
1.date显示当前时间
(1)date
显示当前时间
(2)date +%Y
显示当前年份
(3)date +%m
显示当前月份
(4)date +%d
显示当前是哪一天
(5)date "+%Y-%m-%d %H:%M:%S"
显示年月日时分秒
[root@localhost root01]# date
2024年 12月 19日 星期四 15:48:55 CST
[root@localhost root01]# date +%Y%m%d
20241219
[root@localhost root01]# date "+%Y-%m-%d %H:%M:%S"
2024-12-19 15:49:21
2.date显示非当前时间
(1)date -d '1 days ago'
显示前一天时间
(2)date -d '-1 days ago'
显示明天时间
[root@localhost root01]# date -d '1 days ago'
2024年 12月 18日 星期三 15:52:20 CST
[root@localhost root01]# date -d '-1 days ago'
2024年 12月 20日 星期五 15:52:31 CST
3.date设置系统时间
date -s 字符串时间
设置系统当前时间
用户管理命令 useradd passwd id su userdel who sudo
1.useradd添加新用户
useradd 用户名
添加新用户
useradd -g 组名 用户名
添加新用户到某个组
2.passwd设置用户密码
passwd 用户名
设置用户密码
3.id查看用户是否存在
id 用户名
4.cat /etc/passwd 查看创建的所有用户
cat /etc/passwd
即使你的虚拟机只有两个普通用户,操作系统在安装时会默认创建许多系统用户和服务用户以支持各种功能。不同的发行版和安装选项会影响这些用户的数量。
可以通过用户的 UID(用户 ID)来区分:
UID < 1000:通常是系统用户。
UID >= 1000:通常是普通用户(root 用户的 UID 是 0)。
运行以下命令查看用户和 UID:awk -F: '{print $1, $3}' /etc/passwd
用以下命令过滤普通用户:awk -F: '$3 >= 1000 && $3 < 65534 {print $1}' /etc/passwd
5.su(switch user )切换用户
su 用户名称
(功能描述:切换用户,只能获得用户的执行权限,不能获得环境变量)
su - 用户名称
(功能描述:切换到用户并获得该用户的环境变量及执行权限)
exit
回退到上一个用户
在 Linux 的命令行提示符
[root@localhost home]#
中,每个字段代表的信息如下:
1.root:当前登录的用户名称。在这个例子中,root 表示当前用户是超级用户(管理员用户)。
2.@:分隔用户和主机名的符号。
3.localhost:主机名,表示当前系统的名称。localhost 是默认的主机名,通常表示本地计算机。如果你更改了主机名(例如通过 hostnamectl set-hostname),这里会显示新的主机名。
4.home:当前工作目录的路径的最后一部分。在这个例子中,home 是完整路径 /home 的最后一部分。
5.#:提示符,表示用户的权限级别。# 表示当前是 超级用户(root 权限)。如果是普通用户,提示符会显示 $。
6.userdel删除用户
userdel 用户名
删除用户但保存用户主目录
userdel -r 用户名
用户和用户主目录,都删除
7.who 查看登录用户信息
whoami
显示自身用户名称
who am i
显示登录用户的用户名
8.sudo 设置普通用户具有root权限
基本语法 sudo 命令
需要设置普通用户具有 root 权限的相关操作,在/etc/sudoers文件中添加用户权限
vi /etc/sudoers # 修改配置文件
#修改 /etc/sudoers 文件,找到下面一行(101行),在root下面添加一行,如下
user1 ALL=(ALL) ALL。
#其中,第一个ALL表示用户user1可以从任何终端(主机)使用sudo;
#括号里的ALL表示可以以任何用户(通常是 root)的身份来执行命令;
#最后一个ALL表示可以执行所有命令。#现在user1可以使用sudo了,比如在/opt目录下创建一个文件夹
sudo mkdir module#如果只想让用户user1能够使用sudo来执行特定的命令,比如/usr/bin/apt - get update(这是一个软件更新命令)
#可以添加user1 ALL=(ALL) /usr/bin/apt - get update。
#这样,用户user1在使用sudo时,就只能执行apt - get update这个命令。
最小权限原则:在授予普通用户sudo权限时,应该遵循最小权限原则。只给用户执行他们工作所需的特定命令的sudo权限,而不是不加限制地授予所有命令的权限。这样可以减少因为用户误操作或者恶意操作导致系统受损的风险。
默认情况下,sudo会要求用户输入自己的密码(不是 root 密码)来验证身份。这是为了确保使用sudo权限的是授权的用户。在高安全要求的环境中,可以通过配置/etc/sudoers文件来调整密码验证的策略,如设置不需要密码验证(不过这种方式有安全风险)或者增加密码复杂度要求等。
组管理类命令 groupadd groupdel usermod
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
1.groupadd新增组
groupadd 组名
2.groupdel删除组
groupdel 组名
3.查看创建了那些组
cat /etc/group
4.usermod 修改用户
usermod -g 用户组 用户名
-g : 修改用户的初始登录组,指定的用户组必须已存在
将用户 tangseng 加入到 xitianqujing 用户组中: usermod -g xitianqujing tangseng
5./etc/group 文件格式补充说明
/etc/group 文件中,每一行代表一个用户组,格式如下:
组名:x:组ID:组内用户列表
6.初始组与附加组
初始组:用户登录时默认所属的组,通过 usermod -g
修改。
附加组:用户可同时属于多个组,附加组可通过 usermod -G
添加,需注意多个组之间以逗号分隔。
7.其他组管理命令
gpasswd
:用于管理组密码和组内成员权限。
id 用户名
:查看指定用户的组信息,包括用户 ID、所属组 ID 等。
groups 用户名
:查看用户所属的所有组。
磁盘分区类命令 df du fdisk mount/umount
1.df (disk free 空余硬盘)查看磁盘空间使用情况
df 选项
列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况
选项 | 说明 |
---|---|
-h | 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示; |
-T | 显示文件系统类型(如 ext4、xfs 等); |
-i | 显示 inode 信息,而非磁盘容量信息; |
-a | 列出所有文件系统,包括大小为 0 的伪文件系统; |
df
显示的信息是基于文件系统级别的,不能用于查看单个文件或目录的磁盘使用情况。如果想查看某个目录的具体磁盘使用情况,可以使用du
命令
2.du 命令:检查文件或目录的磁盘使用情况
用于查看文件或目录的磁盘使用情况,特别适合用于分析单个文件或目录的占用空间。
du [选项] [文件或目录]
如果未指定文件或目录,则默认对当前目录及其子目录进行扫描,并列出每个目录的磁盘使用情况。
选项 | 说明 |
---|---|
-h | 以人性化的格式显示(如 GBytes、MBytes、KBytes); |
-s | 显示总计信息,不显示子目录的使用情况; |
-a | 显示每个文件和目录的磁盘使用情况,而不仅是目录; |
-c | 显示总计(结合 -s 使用); |
-d | 指定目录的深度(如 -d 1 只显示一级子目录); |
-x | 仅显示当前文件系统的信息,忽略挂载点; |
# 使用 du 和 sort 组合,将目录按磁盘使用量从大到小排序:
du -h /path/to/directory | sort -hr# 结合 head 查看占用前十最大的文件或目录
du -ah /path/to/directory | sort -hr | head -n 10
du 显示的是实际磁盘占用,而非文件的逻辑大小(文件的实际占用空间可能由于文件系统的块大小而有所增加)。
如果需要分析跨文件系统的磁盘占用情况,请注意使用 -x 限制结果仅限当前文件系统。
3.fdisk 查看分区
fdisk -l
查看磁盘分区详情,该命令必须在root用户下才能使用
选项 | 功能 |
---|---|
-l | 显示所有硬盘的分区列表 |
4.mount/umount 挂载/卸载
对于Linux用户来讲,不论有几个分区,分别分给哪一个目录使用,它总归就是一个根目录、一个独立且唯一的文件结构。
Linux中每个分区都是用来组成整个文件系统的一部分,它在用一种叫做“挂载”的处理方法,它整个文件系统中包含了一整套的文件和目录,并将一个分区和一个目录联系起来,要载入的那个分区将使它的存储空间在这个目录下获得。
(1)挂载前准备(必须要有光盘或者已经连接镜像文件)
基本语法
mount [-t vfstype] [-o options] device dir
(功能描述:挂载设备)
umount 设备文件名或挂载点
(功能描述:卸载设备)
参数说明
参数 | 功能 |
---|---|
-t vfstype | 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有: 1)光盘或光盘镜像:iso9660 2)DOS fat16文件系统:msdos 3) Windows 9x fat32文件系统:vfat 4) Windows NT ntfs文件系统:ntfs 5)Mount Windows文件网络共享:smbfs 6) UNIX (LINUX) 文件网络共享:nfs |
-o options | 主要用来描述设备或档案的挂接方式。常用的参数有: loop:用来把一个文件当成硬盘分区挂接上系统 ro:采用只读方式挂接设备 rw:采用读写方式挂接设备 iocharset:指定访问文件系统所用字符集 |
device | 要挂接(mount)的设备 |
dir | 设备在系统上的挂接点(mount point) |
实操案例
# (1)挂载光盘镜像文件
mkdir /mnt/cdrom/ #建立挂载点
mount -t iso9660 /dev/cdrom /mnt/cdrom/ #设备/dev/cdrom挂载到/mnt/cdrom中
ll /mnt/cdrom/# (2)卸载光盘镜像文件
umount /mnt/cdrom# (3)设置开机自动挂载
vi /etc/fstab
# 添加红框中内容,保存退出
系统定时任务命令 crontab
1.crond服务管理
systemctl restart crond
重新启动crond服务
2.crontab 定时任务设置
crontab [选项]
选项说明
选项 | 功能 |
---|---|
-e | 编辑crontab定时任务 |
-l | 查询crontab任务 |
-f | 删除当前用户所有的crontab任务 |
(1)进入crontab编辑界面。会打开vim编辑你的工作,通过 "* " 定义任务周期。
crontab -e
项目 | 选项 | 范围 |
---|---|---|
第一个“ *” | 一小时当中的第几分钟 | 0-59 |
第二个“ *” | 一天当中的第几小时 | 0-23 |
第三个“ *” | 一个月当中的第几天 | 1-31 |
第四个“ *” | 一年当中的第几月 | 1-12 |
第五个“ *” | 一周当中的星期几 | 0-7(0和7都代表星期日) |
2)每个星号上可以使用的特殊符号
特殊符号 | 含义 |
---|---|
* | 代表任何时间。比如第一个“ *”就代表一小时中每分钟都执行一次的意思。 |
, | 代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令 |
- | 代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令 |
*/n | 代表每隔多久执行一次。比如“ */10 命令”,代表每隔10分钟就执行一遍命令 |
(3)特定时间执行命令
时间 | 含义 |
---|---|
45 22 * * * 命令 | 在22点45分执行命令 |
0 17 * * 1 命令 | 每周1 的17点0分执行命令 |
0 5 1,15 * * 命令 | 每月1号和15号的凌晨5点0分执行命令 |
40 4 * * 1-5 命令 | 每周一到周五的凌晨4点40分执行命令 |
*/10 4 * * * 命令 | 每天的凌晨4点,每隔10分钟执行一次命令 |
0 0 1,15 * 1 命令(错误案例) | 每月1号和15号,每周1的0点0分都会执行命令。 |
注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。
实参案例
(1)每隔1分钟,向/root/bailongma.txt文件中添加一一些内容
*/1 * * * * /bin/echo ”11” >> /root/bailongma.txt
命令部分完结,借鉴自*尚硅谷2024最新Linux零基础教程(linux快速入门,上手开发)*