Linux学习笔记 - MuxiaoWF跳到主要内容

Linux学习笔记

Linux学习笔记 基础Linux命令

周日 3月 01 2026
3155 字 · 14 分钟

基础Linux命令

Linux没有盘符,所有的文件都保存在根目录下

  1. cd 改变目录
    • cd /home/user 改变到指定目录
    • cd / 改变到根目录
    • cd ../ 改变到上一级目录
    • cd ./ 改变到当前目录
    • cd ~ 改变到用户目录 (例如root用户就相当于cd /root
    • cd - 改变到上一个跳转的目录
  2. pwd 显示当前在哪个目录
  3. ls 列出目录下的文件(单独只有文件名,没有详细信息)
    • ls -l 以列表list形式列出目录下的文件(有详细信息,等同于ll
    • ls -a 列出目录下的所有all文件(包括隐藏文件)
    • ls -al 以列表list形式列出目录下的所有all文件(有详细信息,等同于-a -l
    • ls /root 列出指定目录下(这里是root目录下)的文件
  4. mkdir 创建目录(make directory)
    • mkdir dirname 在当前文件夹下创建目录dirname,若为mkdir /dirname则在根目录下创建目录dirname
    • mkdir dirname1 dirname2 在当前文件夹下创建目录dirname1dirname2
    • mkdir -p dirname1/dirname2 在当前文件夹下创建目录dirname1/dirname2-p表示可以创建父目录即dirname1
  5. touch 创建文件(后面加的内容和mkdir命令一样)
  6. echo 输出,跟其他语言的print一样
    • echo "hello world" 输出hello world
    • echo "hello world" > file.txt 创建文件并写入内容hello world(覆盖形式)
    • echo "hello world" >> file.txt 创建文件并写入内容hello world(追加形式)
    • echo $PATH 输出变量PATH的值
  7. catmorelessheadtail 命令均可以查看文件内容
    • cat file.txt 输出文件file.txt的内容(所有内容)
    • more file.txt 输出文件file.txt的内容(按行显示,enter键查看下一行,q键退出,有进度条)
    • less file.txt 输出文件file.txt的内容(按行显示,enter键查看下一行,q键退出,无进度条)
    • head file.txt 输出文件file.txt的前10行内容(head -20 file.txt 输出文件file.txt的前20行内容)
    • tail file.txt 输出文件file.txt的最后10行内容(tail -20 file.txt 输出文件file.txt的最后20行内容)
    • tail -f file.txt 持续输出文件file.txt的最后10行内容(有新内容会追加输出,常用于查看日志文件)
  8. cp 复制文件或目录(copy)
    • cp file.txt /home/user 复制文件file.txt到指定目录
    • cp -r dirname /home/user 复制目录dirname到指定目录(-r表示递归复制,即复制目录下的所有文件和子目录)
  9. mv 移动文件或目录(move)剪切
    • mv file.txt /home/user 移动文件file.txt到指定目录
    • mv dirname /home/user 移动目录dirname到指定目录
    • mv dirname1 dirname2 重命名目录dirname1dirname2(如果dirname2已存在,则将dirname1的内容移动到dirname2 中。不存在的话就相当于重命名)
  10. rm 删除文件或目录(remove)
    • rm file.txt 删除文件file.txt
    • rm -r dirname 删除目录dirname及其内容(-r表示递归删除)
    • rm -rf dirname 删除目录dirname及其内容(-rf表示递归删除且不提示确认,强制force删除)
  11. vi file.txt 编辑文件file.txt
    • 进入文件后需要先按i进入编辑模式insert
    • 编辑完后需要按Esc键退出编辑模式
    • 在非其他模式下输入:wq 保存并退出(:w保存,:q退出,:wq!强制保存并退出)
    • vim 也是编辑器,对于代码可以高亮,需要安装其他包
  12. gziptar 压缩文件
    • gzip file.txt 压缩文件file.txt(会自动生成file.txt.gz文件并删除源文件)
    • gzip -d file.txt.gz 解压文件file.txt.gz(会自动删除源文件)
    • gzip -k file.txt 压缩文件file.txt(不会删除源文件)
    • tar -zcvf file.tar.gz dirname 压缩目录dirname(会自动生成file.tar.gz文件并删除源目录)
    • tar -xvf file.tar -C /home/file 解压文件file.tar到指定目录/home/file
    • zip 也是压缩文件,但是需要安装其他包
  13. yum install -y package CentOS安装软件(apt install -y package Ubuntu)
  14. grep 查找
    • grep -n string file.txt 在文件file.txt中查找字符串string并显示行号(-n)
    • grep -i string file.txt 在文件file.txt中查找字符串string并忽略大小写(-i)
    • grep -v string file.txt 在文件file.txt中查找字符串string并取反结果(-v)
    • ls | grep stringls命令结果下搜索字符串stringls可以换成其他命令如ps -ef等)
  15. date 显示当前时间
    • date -s "2026-01-03 12:00:00" 设置时间
    • ntpdate time1.aliyun.com 同步时间
  16. scp 远程拷贝文件(两台机器之间拷贝文件)
    • scp file.txt user@remote_host:/home/user 拷贝文件 file.txt 到远程主机 remote_host(用用户名 user 登录远程主机)的 /home/user 目录下
  17. chmod 修改文件权限
    • chmod 755 file.txt 修改文件 file.txt 的权限为 755(所有者可读写执行,其他人可读执行)
    • chmod +x script.sh 给脚本添加执行权限
    • chmod -R 755 dirname 递归修改目录下所有文件的权限
  18. chown 修改文件所有者
    • chown user file.txt 将文件 file.txt 的所有者改为用户 user
    • chown user:group file.txt 将文件 file.txt 的所有者改为 user,所属组改为 group
    • chown -R hadoop:hadoop /usr/local/hadoop 递归修改目录所有者和所属组
  19. sudo 以管理员权限执行命令
    • sudo apt install package 以管理员权限安装软件包
    • sudo -i 切换到 root 用户(模拟完整登录)
    • sudo -s 切换到 root 用户的 shell
  20. su 切换用户
    • su - username 切换到 username 用户并加载其环境变量
    • su username 切换到 username 用户但不加载环境变量
  21. ps 查看进程状态
    • ps -ef 显示所有进程的详细信息
    • ps aux 显示所有进程的详细信息(更常用)
    • ps -ef | grep java 查找所有 Java 进程
  22. kill 终止进程
    • kill PID 发送默认信号终止进程(需要提供进程 ID)
    • kill -9 PID 强制终止进程
    • killall process_name 根据进程名终止进程
  23. top/htop 实时监控系统资源
    • top 实时显示进程和资源使用情况(按 q 退出,按 P 按 CPU 排序,按 M 按内存排序)
    • htop 更直观的监控工具(需要安装)
  24. df 查看磁盘空间使用情况
    • df -h 以人类可读格式显示磁盘使用情况(GB、MB 等)
    • df -T 显示文件系统类型
  25. du 查看目录大小
    • du -sh dirname 查看目录 dirname 的总大小
    • du -ah dirname 显示目录下所有文件和目录的大小
    • du --max-depth=1 dirname 显示目录下第一级子目录的大小
  26. find 查找文件
    • find /home -name "file.txt"/home 目录下查找名为 file.txt 的文件
    • find . -type f -name "*.log" 在当前目录下查找所有 .log 文件
    • find /var/log -mtime -7 查找 /var/log 目录下 7 天内修改过的文件
  27. ln 创建软链接
    • ln -s /path/to/source /path/to/link 创建源文件的软链接(类似 Windows 快捷方式)
    • ln source link 创建硬链接
  28. netstat/ss 查看网络连接状态
    • netstat -tuln 查看所有监听的 TCP 和 UDP 端口
    • netstat -an | grep 8080 查看 8080 端口的连接情况
    • ss -tuln 更现代的查看网络状态命令
  29. man 查看帮助文档
    • man ls 查看 ls 命令的详细帮助
    • man 5 passwd 查看配置文件格式说明(5 表示章节)
  30. jps 查看 Java 进程(JDK 自带)
    • jps 显示所有 Java 进程及其进程 ID
    • jps -l 显示完整的类名或 JAR 文件名
    • jps -v 显示 JVM 启动参数

通过使用“(tab上面的那个)来执行命令,例如echo `ls /home/`会将/home/目录下的所有文件列出来(相当于先执行了ls /home/再输出)

推荐Linux设置

版本不一样,命令差异,自行查询,这里列出一些常用的设置:

静态IP,服务器命名,设置用户名IP对应,防火墙配置,ssh免密登录连接等

Shell脚本

touch file.sh 创建脚本文件

vi file.sh 编辑脚本文件

sh file.sh 执行脚本文件(或使用chmod +x file.sh授权可以执行再./file.sh

  • r 可读,w 可写,x 可执行

在文件中可以使用指代$0:脚本名字,$1:第一个参数,$2:第二个参数,…,$#:参数个数,$*:以字符串的形式展示所有参数,$@:以数组形式展示所有参数

之后可以直接使用sh file.sh var1 var2执行脚本文件,其中var1var2是传递给脚本的参数

注意,在编写脚本时,请务必使用#!/bin/bash作为脚本文件的开头,并使用UNIX+UTF-8进行编码保存。

等号附近注意不要随意添加空格,赋值不能有空格(视为一个整体),比较要有空格(视为分开的部分)

基础

变量

变量声明:variable_name="value",注意变量名等号值之间不能有空格,其余规则同其他语法

赋值后变量名前加${},如${variable_name}就可以获取到变量值(可以不用添加{}

使用unset命令可以删除变量,如unset variable_name,删除后再次echo会没有任何输出

字符串

建议使用双引号,双引号其中可以有变量(v="string${var1}",var1会自动替换为var1的值)且可以出现转义字符

  • 单引号 ':内容原样输出,不支持变量替换
  • 双引号 ":支持变量替换和转义字符
  • 反引号 `:命令执行(更推荐用 $()

字符串拼接:string1="hello" string2="world" echo ${string1} ${string2}

在变量前添加#来获取字符串长度:echo ${#string}

截取字符串:echo ${string:1:4},从索引1开始截取4个字符;echo ${string:4},去掉字符串前4个字符

控制台输入

read命令可以获取用户输入:read var1 var2,var1和var2为变量名,输入的内容会自动赋给变量var1和var2

read -p "请输入:" var1 输入内容后回车,会自动打印提示信息并赋给变量var1

表达式

shell脚本中可以使用expr命令进行表达式加减乘除计算,如expr 1 + 2,注意运算符之间需要有空格(不能写成expr 1+2)。其中乘法需要使用转义字符\*,如expr 2 \* 3

同时也可以使用 $(()) 代表表达式,如 echo $(( 1 + 2));或者使用 $[],如 echo $[ 1 + 2 ]。在 $(())$[] 中可以直接使用数学运算符 +-*/%,以及比较运算符 ><>=<===!=,无需转义。

  • $(()) 中变量可以不加 $ 符号,如 echo $((a + b))
  • $(()) 支持自增自减:((i++))((i--))
  • let 命令:let a=1+2let i++

test 命令或 [ ] 条件测试中,字符串比较使用 ==!=,数值比较则需要使用:-eq 等于、-ne 不等于、-gt 大于、-lt 小于、-ge 大于等于、-le 小于等于。

&& 逻辑与,|| 逻辑或

数组

数组声明:array=(element1 element2 element3 ...),注意数组名与等号之间不能有空格,数组元素之间用空格或逗号隔开。同时shell中只有一维数组,即不能嵌套数组

获取数组元素:echo ${array[index]},获取数组所有元素:echo ${array[*]},获取数组长度:echo ${#array[*]}(*可以替换成@,与上文说的传参一致)。

条件语句

使用if elif else fi 来创建条件语句

Terminal window
if [ $a -gt $b ]; then
echo "a 大于 b"
elif [ $a -eq $b ]; then
echo "a 等于 b"
else
echo "a 少于 b"
fi

循环语句

使用for in do done 来创建循环语句

Terminal window
for i in 1 2 3 4 5; do
echo $i
done
for i in {1..10}; do
echo $i
done
arr=(a,b,c)
len = ${#arr[@]}
for ((i=0; i < $len; i++)); do
echo ${arr[$i]}
done
for i in $arr; do
echo $i
done

写一个脚本,实现将文件夹下的所有文件授权:

Terminal window
a=`ls $1`
for file in $a; do
chmod u+x $file
echo "授权成功:$file"
done

使用while do done 来创建循环语句

Terminal window
i=1
while [ $i -le 5 ]; do
echo $i
((i++))
done

使用until do done 来创建循环语句(循环直到条件满足时结束)

Terminal window
i=1
until [ $i -gt 5 ]; do
echo $i
((i++))
done

与其他语言一样,在循环中使用break可以跳出循环,continue跳过本次循环

case

使用case esac 来创建条件语句

Terminal window
case $1 in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac
case "$2" in
"muxiao") echo "暮晓"
;;
"blog") echo "博客"
;;
"hello") echo "你好"
;;
esac

函数

Terminal window
function function_name() {
echo "hello world"
}
function_name

调用函数时不需要添加括号,同样的如果需要带参数也不用在函数定义的时候添加

Terminal window
function function_name() {
echo "$1"
}
function_name "hello world"

可以看到脚本中函数的传参和在控制台中传参一样。如果函数需要返回值,则需要使用return关键字

Terminal window
function function_name() {
return $1
}
a=$(function_name 1)
echo $a

脚本的互相调用

使用source ./file.sh来调用脚本,但是要注意需要使用绝对路径或相对路径

Terminal window
source ./file1.sh
source /path/to/file2.sh

这样就可以使用file1.sh、file2.sh中的变量并同时运行file1.sh、file2.sh中的脚本了(就是相当于将file1.sh和file2.sh中的脚本复制到了这里)


感谢您的阅读!如果可以,给俺点些关注吧~

Linux学习笔记

周日 3月 01 2026
3155 · 14 分钟
封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00