Linux基础小结
# Linux
# 常见目录说明
- /bin:存放二进制可执行文件(ls、cat、mkdir 等),常用命令一般都在这里;
- /sbin: 存放二进制可执行文件,只有 root 才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如
ifconfig
等; - /etc:存放系统管理和配置文件;
- /root:超级用户(系统管理员)的主目录;
- /home:存放所有用户文件的根目录,是用户主目录的基点,比如用户 user 的主目录就是 /home/user,可以用 ~user 表示;
- /dev:用于存放设备文件;
- /usr:用于存放系统应用程序;
- /lib 和/lib64:存放着和系统运行相关的库文件;
- /tmp:用于存放各种临时文件,是公用的临时文件存储点;
- /var:用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等)等;
- /opt:额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把 tomcat 等都安装到这里;
- /proc:虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息;
- /mnt:系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;
- /boot:存放用于系统引导时使用的各种文件;
- /lost+found:这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows 下叫什么.chk)就在这里。
# Linux 常用指令
# 文件和目录操作
# ls 指令
作用:列出当前工作目录下的所有文件/文件夹的名称
用法:ls [选项] [目录]
ls -l 路径(ll
):以详细列表的形式展示指定路径下的所有文件/文件夹名称
# cd 指令
作用:改变目录,进入用户输入的目录
用法:cd [目录]
示例:切换到 /usr/local
目录
cd /usr/local
# mkdir 指令
作用: 创建目录
用法:mkdir [选项] 目录
mkdir -p
+ 路径
:当一次性创建多层不存在的目录的时候,添加 -p
参数
# touch 指令
作用:创建文件
示例:在当前目录中创建一个名为 test.txt
的空文件
touch ./test.txt
# cp 指令
作用:复制文件或目录
用法:cp [选项] 被复制的文档路径 文档被复制到的路径
示例:
1、复制文件
将当前目录的 test.txt 文件复制到上个工作目录中
cp ./test.txt ../test.txt
2、复制文件夹
利用 -r
参数,将当前工作目录的 test 文件夹复制到上一个工作目录下
cp -r ./test ../test
# mv 指令
作用:移动文件或目录,也可以重命名文件或目录
用法:mv [选项] 源文件路径 需要保存的位置路径
注意:使用 mv 移动文件语法格式和移动文件夹相同,移动文件夹不需要加 -r
示例:
将当前目录中的 test.txt
文件移动到 /usr/local
目录中,并重命名为 new_test.txt
mv test.txt /usr/local/new_test.txt
# rm 指令
作用:删除文件或目录
用法:rm [选项] 文件或目录
选项:
-f
:force,强制删除,否则会每个文件都询问是否删除
-r
:表示递归,移除文件夹的时候需要使用
示例:
删除当前目录中的 test.txt
文件
rm test.txt
删除指定目录及其内的全部子文件,一并都强制删除
rm -rf Dir
# cat 指令
作用:
查看文件内容
对两个文件进行合并
用法:
cat 文件的路径
cat 待合并的文件路径1 待合并的文件路径2 …. 文件路径n > 合并之后的文件路径
示例:
查看当前目录中的 test.txt
文件的内容
cat test.txt
合并路径
cat ./test1.txt ./test2.txt > ./test3.txt
配合 grep
命令,搜索文件中 'msg' 内容,高亮显示
cat returnLog.log | grep 'msg'
# pwd 指令
作用:查看当前工作目录路径
用法:pwd
# chmod 指令
作用:
修改文件权限。
chmod 命令可以使用八进制数来指定权限。文件或目录的权限位是由 9 个权限位来控制,每三位为一组,它们分别是
- 文件所有者(User)的读、写、执行,
- 用户组(Group)的读、写、执行,
- 其它用户(Other)的读、写、执行。
用法:
chmod [选项] 权限 文件或目录
选项:
# | 权限 | rwx | 二进制 |
---|---|---|---|
7 | 读 + 写 + 执行 | rwx | 111 |
6 | 读 + 写 | rw- | 110 |
5 | 读 + 执行 | r-x | 101 |
4 | 只读 | r-- | 100 |
3 | 写 + 执行 | -wx | 011 |
2 | 只写 | -w- | 010 |
1 | 只执行 | --x | 001 |
0 | 无 | --- | 000 |
例如, 765 将这样解释:
- 所有者的权限用数字表达:属主的那三个权限位的数字加起来的总和。如 rwx ,也就是 4+2+1 ,应该是 7。
- 用户组的权限用数字表达:属组的那个权限位数字的相加的总和。如 rw- ,也就是 4+2+0 ,应该是 6。
- 其它用户的权限数字表达:其它用户权限位的数字相加的总和。如 r-x ,也就是 4+0+1 ,应该是 5。
示例:
# 将当前目录中的 test.txt 文件的权限设置为只读
chmod 444 test.txt
2
参考:
- Linux 用户和用户组管理 | 菜鸟教程 (runoob.com) (opens new window)
- Linux chmod 命令 | 菜鸟教程 (runoob.com) (opens new window)
# 系统信息和进程管理
# uname 指令
作用:查看系统信息
用法:uname [选项]
示例:
查看系统的操作系统名称和版本
uname -a
# top 指令
作用: 查看系统进程和资源占用情况
用法:top
# ps 指令
作用: 查看当前用户进程
用法:ps [选项]
示例:查看当前用户的所有进程
ps -ef
# kill 指令
作用:结束一个进程
用法:kill [选项] 进程号
示例:
结束进程号为 1234
的进程
kill 1234
# shutdown 指令
作用:关机或重启系统
用法:shutdown [选项]
示例:
将系统立即关机
shutdown -h now
将系统立即重启
shutdown -r now
# 网络操作
# ping 指令
作用:测试网络连接是否通畅
用法:ping [选项] 目标地址
示例:
测试目标地址 www.google.com
是否可达
ping www.google.com
# ifconfig 指令
作用: 查看网络接口信息
用法:ifconfig [选项]
示例:
查看当前系统中所有网络接口的信息
ifconfig -a
在较新版本的 Linux 发行版中,
ifconfig
命令可能已经不再预装,它已被ip
命令所取代。
# netstat 指令
作用: 查看网络连接状态
用法:netstat [选项]
示例:
查看当前系统中所有网络连接的状态
netstat -a
# wget 指令
作用: 下载文件
用法:wget [选项] URL
示例:
下载指定 URL 的文件并保存到当前目录中
wget https://example.com/file.zip
# scp 指令
作用: 在不同的主机之间拷贝文件
用法:scp [选项] 源文件 目标主机:目标路径
示例:
将当前目录中的 test.txt
文件拷贝到远程主机 example.com
的 /home/user
目录中
scp test.txt user@example.com:/home/user
# Telnet 指令
Telnet 是一种用于远程登录和管理网络设备的协议,同时也是基于这个协议的命令行工具。下面是一些常用的 Telnet 命令:
连接到远程主机:
telnet <host> <port>
1将
<host>
替换为要连接的远程主机的 IP 地址或主机名,将<port>
替换为要连接的端口号。例如,telnet example.com 23 将连接到 example.com 的 23 端口。发送命令或数据:
在 Telnet 连接建立后,你可以直接在命令行中输入命令或数据,并按 Enter 键发送给远程主机。例如,输入 ls 命令查看远程主机上的文件列表。
退出 Telnet 连接:
在 Telnet 连接中,你可以使用以下命令之一来退出:
- 输入 quit 或 exit 命令并按 Enter 键。
- 按下
Ctrl + ]
,然后输入 quit 命令并按 Enter 键。
注意,Telnet 是一种明文协议,数据在传输过程中不会被加密,因此不建议在不安全的网络环境中使用 Telnet。对于安全连接,建议使用 SSH(Secure Shell)协议来进行远程登录和管理。
# ip 命令
在较新版本的 Linux 发行版中,ifconfig
命令可能已经不再预装,它已被 ip
命令所取代。ip
命令是 iproute2
包的一部分,提供了更多的功能和更好的控制。如果你在尝试运行 ifconfig
命令时遇到了 "未找到命令" 的错误,这意味着你的系统中没有安装 ifconfig
。
要解决这个问题,你可以通过安装 net-tools
包来获取 ifconfig
命令。以下是在基于 RPM 的系统(如 CentOS、Fedora)上安装 net-tools
的步骤:
打开终端。
运行以下命令来安装
net-tools
包:sudo yum install net-tools
1如果你使用的是基于 Debian 的系统(如 Ubuntu),则可以使用以下命令安装:
sudo apt-get update sudo apt-get install net-tools
1
2安装完成后,你可以通过运行
ifconfig
来验证是否安装成功。
如果你不想安装 net-tools
包,你也可以选择使用 ip
命令来执行类似的任务。以下是一些常用的 ip
命令及其对应的 ifconfig
命令:
查看所有网络接口:
ip addr show
1或者
ifconfig -a
1查看特定网络接口的详细信息:
ip addr show eth0
1或者
ifconfig eth0
1启用网络接口:
ip link set eth0 up
1或者
ifconfig eth0 up
1禁用网络接口:
ip link set eth0 down
1或者
ifconfig eth0 down
1为网络接口设置 IP 地址:
ip addr add 192.168.1.100/24 dev eth0
1或者
ifconfig eth0 192.168.1.100 netmask 255.255.255.0
1
请注意,虽然 ip
命令的功能更加强大和灵活,但 ifconfig
命令在某些情况下可能更直观易用。如果你习惯了 ifconfig
的语法,安装 net-tools
包可以满足你的需求。如果你愿意接受现代 Linux 网络管理的最佳实践,学习和使用 ip
命令将是一个更好的选择。
# 压缩和解压缩
# tar 指令
作用: 压缩和解压缩文件和目录
用法:tar [选项] 文件或目录
选项:
压缩
-c
:创建新的 tar 归档文件。-z
:使用 gzip 压缩算法。-v
:显示详细信息。-f
:指定归档文件名。
解压
-x
:从 tar 归档文件中提取文件。-z
:使用 gzip 解压缩算法。-v
:显示详细信息。-f
:指定归档文件名。
示例:
# 将当前目录中的所有文件和目录压缩成一个名为 `archive.tar` 的文件
tar -cvf archive.tar *
# 压缩目录 "example" 成 tar.gz 压缩包
tar -czvf example.tar.gz example
# 解压缩文件
tar -xzvf 归档文件名.tar.gz
2
3
4
5
6
7
8
# gzip 指令
作用:压缩和解压缩文件
用法:gzip [选项] 文件
示例:
将当前目录中的 test.txt
文件压缩成一个名为 test.txt.gz
的压缩文件
gzip test.txt
# unzip 指令
作用:解压缩 zip 文件
用法:unzip [选项] 文件.zip
示例:
解压缩名为 archive.zip
的文件
unzip archive.zip
# 其他
# man 指令
作用: 查看指令的帮助手册
用法:man [指令]
示例:
查看 ls
命令的帮助手册
man ls
# history 指令
作用: 查看历史命令
用法:history [选项]
示例:
查看当前用户执行过的所有命令历史记录
history
# grep 指令
作用: 在文件中搜索指定字符串
用法:grep [选项] 字符串 文件
示例:
在当前目录中的所有文件中搜索包含字符串 example
的行
grep example *
# 输出重定向
作用:将一些命令的执行结果保存到文件中
用法:正常执行的指令 (> 或 >>) 文件的路径
>
:覆盖输出,会覆盖掉原先的文件内容>>
:追加输出,不会覆盖原始文件内容,会在原始内容末尾继续添加
示例:
使用覆盖重定向,将 ls -la
的执行结果,保存到当前目录下的 ls.txt
ls -la > ls.txt
使用追加重定向,将 ls -la
的执行结果追加到 ls.txt 中
ls -la >> ls.txt
# df 指令
作用:查看磁盘的空间
用法:df -h
-h
:表示以可读性较高的形式展示大小
# 部署时可能会用到
# grep 指令 ⭐️
grep
是一个在 Unix 和类 Unix 操作系统(如 Linux、macOS)以及某些其他操作系统上广泛使用的命令行工具,主要用于搜索文本文件中符合特定模式(通常是正则表达式)的行,并将匹配的行输出到标准输出(通常是终端)。它的全称是 "Global Regular Expression Print",即“全局正则表达式打印”。
基本语法:
grep [选项] [模式] [文件名]
选项:grep 提供了多种选项来调整搜索行为,例如:
-i
:忽略大小写匹配。-v
:反向选择,显示不匹配的行。-c
:仅输出匹配行的数量。-n
:在输出行前加上行号。-l
:列出匹配模式的文件名,而不是输出具体内容。-r
或-R
:递归地搜索目录下的所有文件。-e
:指定一个模式列表或一个单独的模式,用于支持多个模式或复杂的正则表达式。-w
:匹配整个单词,而不是作为单词一部分。
模式:这是要搜索的文本字符串或者正则表达式。比如,如果你想找出包含单词 "example" 的所有行,模式就是
"example"
。文件名:你想在哪些文件中执行搜索。可以是单个文件名,也可以是多个文件名,甚至可以是通配符来匹配一组文件。
正则表达式示例
^grep
:匹配所有以 "grep" 开头的行。grep$
:匹配所有以 "grep" 结尾的行。gr.p
:匹配任何包含 "gr" 后跟着一个任意字符,然后是 "p" 的行。.*grep
:匹配包含 "grep" 且前面有任意数量字符的行。
在实际使用中,grep
非常灵活且强大,不仅限于简单的文本搜索,还能结合管道(|
)和其他命令组合使用,实现复杂的文本处理任务。由于采用了 GNU 版本的 grep,在 Linux 系统中,egrep
和 fgrep
功能已经被集成到了 grep
命令中,通过相应的选项 -E
(等同于 egrep
,支持扩展正则表达式)和 -F
(等同于 fgrep
,模式视为固定字符串而非正则表达式)来调用。
写法示例
以下是一些 grep
命令的实用例子:
查找包含特定单词的行:
grep "example" file.txt
1这将在名为
file.txt
的文件中查找包含单词 "example" 的所有行并显示结果。忽略大小写匹配:
grep -i "Example" file.txt
1这会查找包含 "Example"(不论大小写)的所有行。
查找并显示行号:
grep -n "example" file.txt
1这会在输出匹配行的同时,显示每行在其所在文件中的行号。
查找并统计匹配行数:
grep -c "example" file.txt
1这只会输出包含 "example" 的行总数。
从多个文件中查找:
grep "example" file1.txt file2.txt file3.txt
1在多个文件中同时查找含有 "example" 的行。
递归查找目录下的所有文件:
grep -r "example" /path/to/directory
1在指定目录及其子目录下所有文件中查找包含 "example" 的行。
查找以特定字符开头或结尾的行:
grep "^example" file.txt # 查找以 "example" 开头的行 grep "example$" file.txt # 查找以 "example" 结尾的行
1
2使用正则表达式查找:
grep -E "[0-9]{3}-[0-9]{2}-[0-9]{4}" file.txt
1此命令会在
file.txt
中查找符合美国社会安全号码格式(例如 "123-45-6789")的行。这里的-E
表示启用扩展正则表达式。
# free -h 指令
作用:用于显示系统的内存使用情况。
total used free shared buff/cache available
Mem: 7.8G 3.9G 1.1G 254M 2.8G 3.3G
Swap: 2.0G 1.2G 830M
2
3
4
total
: 系统内存总量。used
: 已使用的内存量。free
: 可用的空闲内存量。shared
: 被共享的内存量。buff/cache
: 用于缓冲区和缓存的内存量。available
: 系统可用的内存量,它包括空闲内存、缓冲区和缓存的内存。
# nohup 指令
作用:用于在后台运行程序,并且不受终端关闭影响。它的作用是将程序的标准输出和标准错误输出重定向到一个名为 nohup.out
的文件中,这样即使终端关闭,程序仍然可以继续在后台运行。
例如:nohup java -jar /root/services/user-center-backend/target/user-center-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod &
java -jar /root/services/user-center-backend/target/user-center-0.0.1-SNAPSHOT.jar
: 这部分是运行 Java 应用程序的命令。java
是 Java 的运行命令,-jar
表示要运行的是一个可执行的 JAR 文件,后面紧跟着 JAR 文件的路径/root/services/user-center-backend/target/user-center-0.0.1-SNAPSHOT.jar
,这是一个 Java 可执行文件。--spring.profiles.active=prod
: 这部分是 Spring Boot 应用程序的参数,用于指定使用哪个配置文件。在这里,prod
是一个配置文件的名称,表示使用生产环境的配置。&
: 是 Linux 中的后台运行符号,它使得命令在后台运行,而不阻塞当前终端。这样可以让 Java 应用程序在后台持续运行,即使终端关闭也不会影响它。
综合起来,这行代码的作用是在 Linux 系统下以生产环境的配置运行一个 Java 应用程序,并将其放在后台持续运行,不受终端关闭的影响。
# jobs 指令
作用:用于显示当前终端(shell会话)中正在运行或挂起的作业(进程)列表。
当你在终端中运行一个命令并在后台使用 &
运行时,该命令就成为一个作业。jobs
命令可以列出这些作业,以及它们的状态。
输出通常会显示每个作业的编号(Job ID)、状态、命令和作业编号(Process ID)等信息。作业状态可能有以下几种:
Running
: 作业正在前台或后台运行。Stopped
: 作业被挂起(暂停)。Done
: 作业已完成。
你可以使用fg
(foreground
)和bg
(background
)命令来控制作业的前台和后台运行。例如,使用fg
命令可以将一个后台作业切换到前台运行,而使用bg
命令可以将一个前台作业切换到后台运行。
如果要结束一个作业,可以使用kill
命令,加上作业的编号或进程编号。
请注意,jobs
命令只显示当前终端会话中的作业,如果你在另一个终端窗口中运行作业,则在当前终端中使用jobs
是看不到这些作业的。
# netstat -ntlp 指令
作用:用于查看当前系统上的网络连接和监听端口信息。以下是该命令的解释:
netstat
: 是网络统计(network statistics)的缩写,用于显示网络连接信息和统计数据。-n
: 指定显示网络地址和端口号时不进行反向域名解析,以 IP 地址和端口号的形式显示,而不是域名和服务名。-t
: 仅显示 TCP 协议相关的网络连接信息。-l
: 仅显示监听状态(LISTEN)的网络连接信息,即显示系统正在监听的端口。-p
: 显示与网络连接相关的进程信息,包括进程的 PID(Process ID)和进程的名称。
执行 netstat -ntlp
命令后,将会列出所有当前系统上正在监听的 TCP 端口,并显示与这些端口相关联的进程信息。这对于查看哪些服务正在监听哪些端口以及是否存在非常有用。例如,你可以通过这个命令来查看 Web 服务器(如 Apache、Nginx)是否正在监听 80 端口,或者数据库服务器(如 MySQL)是否正在监听 3306 端口。
# jps 命令
jps
是 Java Virtual Machine Process Status Tool 的缩写,是 JDK(Java Development Kit)中的一个命令行工具。它用于列出当前系统上所有正在运行的 Java 进程的进程 ID(PID)和主类名称。
执行jps
命令后,将会显示当前系统上所有正在运行的 Java 进程的信息,包括它们的 PID 和对应的主类名称。通常用于在命令行中快速查看正在运行的 Java 进程,方便开发者进行进程管理和调试。
例如,执行jps
命令可能会输出类似以下的结果:
1234 MyApp
5678 AnotherApp
2
其中,1234
和5678
是 Java 进程的 PID,MyApp
和AnotherApp
是对应的 Java 主类名称。
# df 指令
df -h
是一个常用的 Linux/Unix 命令,用于显示磁盘空间使用情况,并以易读的方式(以 KB、MB、GB 等单位)显示输出结果。
具体来说,df
表示 "disk free",用于显示文件系统的磁盘空间信息。而 -h
选项表示 "human-readable",使得输出结果以易读的方式呈现,比如使用 KB、MB、GB 等单位,而不是以字节为单位。
当你在终端中运行 df -h
命令时,它将显示所有挂载点的磁盘空间使用情况,包括总容量、已用空间、可用空间、使用百分比和挂载点等信息。这对于查看磁盘的使用情况很有帮助,可以帮助你了解哪些磁盘分区或挂载点占用了最多的空间。
# vim 常用指令
作用:打开并进入一个文件(文件可以不存在,会自动创建)
用法:vim 文件的路径
示例:
打开进入当前目录下的 test.txt 文件
vim ./test.txt
# 移动光标
- h: 左移一个字符
- j: 下移一行
- k: 上移一行
- l: 右移一个字符
- ^: 移动到行首
- $: 移动到行尾
- gg: 移动到文档开头
- G: 移动到文档结尾
# 编辑文本
- i: 插入文本,光标会进入插入模式,可以输入文本
- a: 在光标后插入文本
- o: 在当前行的下一行插入新行,并进入插入模式
- dd: 删除当前行
- yy: 复制当前行
- p: 粘贴复制的文本
# 搜索和替换
/pattern
: 向下搜索 pattern?pattern
: 向上搜索 patternn
: 下一个匹配项N
: 上一个匹配项:s/old/new/g
: 替换当前行中所有 old 为 new:%s/old/new/g
: 替换整个文档中所有 old 为 new
# 保存和退出
:w
: 保存当前文件:wq
: 保存并退出:q
: 退出(如果没有更改过文件内容):q!
: 强制退出,不保存更改
# 环境变量
进入环境变量文件
vim /etc/profile
修改完成后,用 source
命令使其生效
source /etc/profile