Linux学习笔记
Linux学习笔记 基础Linux命令
基础Linux命令
Linux没有盘符,所有的文件都保存在根目录下
cd改变目录cd /home/user改变到指定目录cd /改变到根目录cd ../改变到上一级目录cd ./改变到当前目录cd ~改变到用户目录 (例如root用户就相当于cd /root)cd -改变到上一个跳转的目录
pwd显示当前在哪个目录ls列出目录下的文件(单独只有文件名,没有详细信息)ls -l以列表list形式列出目录下的文件(有详细信息,等同于ll)ls -a列出目录下的所有all文件(包括隐藏文件)ls -al以列表list形式列出目录下的所有all文件(有详细信息,等同于-a -l)ls /root列出指定目录下(这里是root目录下)的文件
mkdir创建目录(make directory)mkdir dirname在当前文件夹下创建目录dirname,若为mkdir /dirname则在根目录下创建目录dirnamemkdir dirname1 dirname2在当前文件夹下创建目录dirname1和dirname2mkdir -p dirname1/dirname2在当前文件夹下创建目录dirname1/dirname2,-p表示可以创建父目录即dirname1
touch创建文件(后面加的内容和mkdir命令一样)echo输出,跟其他语言的print一样echo "hello world"输出hello worldecho "hello world" > file.txt创建文件并写入内容hello world(覆盖形式)echo "hello world" >> file.txt创建文件并写入内容hello world(追加形式)echo $PATH输出变量PATH的值
cat,more,less,head,tail命令均可以查看文件内容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行内容(有新内容会追加输出,常用于查看日志文件)
cp复制文件或目录(copy)cp file.txt /home/user复制文件file.txt到指定目录cp -r dirname /home/user复制目录dirname到指定目录(-r表示递归复制,即复制目录下的所有文件和子目录)
mv移动文件或目录(move)剪切mv file.txt /home/user移动文件file.txt到指定目录mv dirname /home/user移动目录dirname到指定目录mv dirname1 dirname2重命名目录dirname1为dirname2(如果dirname2已存在,则将dirname1的内容移动到dirname2中。不存在的话就相当于重命名)
rm删除文件或目录(remove)rm file.txt删除文件file.txtrm -r dirname删除目录dirname及其内容(-r表示递归删除)rm -rf dirname删除目录dirname及其内容(-rf表示递归删除且不提示确认,强制force删除)
vi file.txt编辑文件file.txt- 进入文件后需要先按
i进入编辑模式insert - 编辑完后需要按
Esc键退出编辑模式 - 在非其他模式下输入
:wq保存并退出(:w保存,:q退出,:wq!强制保存并退出) vim也是编辑器,对于代码可以高亮,需要安装其他包
- 进入文件后需要先按
gzip、tar压缩文件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/filezip也是压缩文件,但是需要安装其他包
yum install -y packageCentOS安装软件(apt install -y packageUbuntu)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 string在ls命令结果下搜索字符串string(ls可以换成其他命令如ps -ef等)
date显示当前时间date -s "2026-01-03 12:00:00"设置时间ntpdate time1.aliyun.com同步时间
scp远程拷贝文件(两台机器之间拷贝文件)scp file.txt user@remote_host:/home/user拷贝文件file.txt到远程主机remote_host(用用户名user登录远程主机)的/home/user目录下
chmod修改文件权限chmod 755 file.txt修改文件file.txt的权限为 755(所有者可读写执行,其他人可读执行)chmod +x script.sh给脚本添加执行权限chmod -R 755 dirname递归修改目录下所有文件的权限
chown修改文件所有者chown user file.txt将文件file.txt的所有者改为用户userchown user:group file.txt将文件file.txt的所有者改为user,所属组改为groupchown -R hadoop:hadoop /usr/local/hadoop递归修改目录所有者和所属组
sudo以管理员权限执行命令sudo apt install package以管理员权限安装软件包sudo -i切换到 root 用户(模拟完整登录)sudo -s切换到 root 用户的 shell
su切换用户su - username切换到username用户并加载其环境变量su username切换到username用户但不加载环境变量
ps查看进程状态ps -ef显示所有进程的详细信息ps aux显示所有进程的详细信息(更常用)ps -ef | grep java查找所有 Java 进程
kill终止进程kill PID发送默认信号终止进程(需要提供进程 ID)kill -9 PID强制终止进程killall process_name根据进程名终止进程
top/htop实时监控系统资源top实时显示进程和资源使用情况(按 q 退出,按 P 按 CPU 排序,按 M 按内存排序)htop更直观的监控工具(需要安装)
df查看磁盘空间使用情况df -h以人类可读格式显示磁盘使用情况(GB、MB 等)df -T显示文件系统类型
du查看目录大小du -sh dirname查看目录dirname的总大小du -ah dirname显示目录下所有文件和目录的大小du --max-depth=1 dirname显示目录下第一级子目录的大小
find查找文件find /home -name "file.txt"在/home目录下查找名为file.txt的文件find . -type f -name "*.log"在当前目录下查找所有.log文件find /var/log -mtime -7查找/var/log目录下 7 天内修改过的文件
ln创建软链接ln -s /path/to/source /path/to/link创建源文件的软链接(类似 Windows 快捷方式)ln source link创建硬链接
netstat/ss查看网络连接状态netstat -tuln查看所有监听的 TCP 和 UDP 端口netstat -an | grep 8080查看 8080 端口的连接情况ss -tuln更现代的查看网络状态命令
man查看帮助文档man ls查看ls命令的详细帮助man 5 passwd查看配置文件格式说明(5 表示章节)
jps查看 Java 进程(JDK 自带)jps显示所有 Java 进程及其进程 IDjps -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执行脚本文件,其中var1和var2是传递给脚本的参数
注意,在编写脚本时,请务必使用
#!/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+2或let i++
在 test 命令或 [ ] 条件测试中,字符串比较使用 ==、!=,数值比较则需要使用:-eq 等于、-ne 不等于、-gt 大于、-lt 小于、-ge 大于等于、-le 小于等于。
&& 逻辑与,|| 逻辑或
数组
数组声明:array=(element1 element2 element3 ...),注意数组名与等号之间不能有空格,数组元素之间用空格或逗号隔开。同时shell中只有一维数组,即不能嵌套数组
获取数组元素:echo ${array[index]},获取数组所有元素:echo ${array[*]},获取数组长度:echo ${#array[*]}(*可以替换成@,与上文说的传参一致)。
条件语句
使用if elif else fi 来创建条件语句
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 来创建循环语句
for i in 1 2 3 4 5; do echo $idone
for i in {1..10}; do echo $idone
arr=(a,b,c)len = ${#arr[@]}for ((i=0; i < $len; i++)); do echo ${arr[$i]}done
for i in $arr; do echo $idone写一个脚本,实现将文件夹下的所有文件授权:
a=`ls $1`for file in $a; do chmod u+x $file echo "授权成功:$file"done使用while do done 来创建循环语句
i=1while [ $i -le 5 ]; do echo $i ((i++))done使用until do done 来创建循环语句(循环直到条件满足时结束)
i=1until [ $i -gt 5 ]; do echo $i ((i++))done与其他语言一样,在循环中使用break可以跳出循环,continue跳过本次循环
case
使用case esac 来创建条件语句
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函数
function function_name() { echo "hello world"}
function_name调用函数时不需要添加括号,同样的如果需要带参数也不用在函数定义的时候添加
function function_name() { echo "$1"}
function_name "hello world"可以看到脚本中函数的传参和在控制台中传参一样。如果函数需要返回值,则需要使用return关键字
function function_name() { return $1}
a=$(function_name 1)echo $a脚本的互相调用
使用source ./file.sh来调用脚本,但是要注意需要使用绝对路径或相对路径
source ./file1.shsource /path/to/file2.sh这样就可以使用file1.sh、file2.sh中的变量并同时运行file1.sh、file2.sh中的脚本了(就是相当于将file1.sh和file2.sh中的脚本复制到了这里)