Linux与Shell 第2天 实操、软件包管理、Shell编程
传送门
Linux与Shell 第0天 阿里云安装Ubuntu22.04以及桌面
Linux与Shell 第1天 文件目录、VIM、网络配置、系统管理、远程登录
Linux与Shell 第2天 实操、软件包管理、Shell编程
实操
文件目录
输入 | 作用 |
---|---|
ls -a | 显示隐藏文件 |
ls -lh | 详细信息 |
cd - | 回到上一次所在目录 |
cd -P | 跳转到实际物理路径,而非快捷方式路径 |
mkdir/rmdir | 创建/删除空目录 |
cp -r | 递归复制 |
mv | 移动 |
touch | 新建文件,已存在则更新时间戳 |
cat/more/less | 查看 |
head/tail -n (数字) | 查看头部/尾部(数字)行 |
ln -s 文件路径 链接快捷方式名 | “创建快捷方式” |
history -c | 清楚history里的记录 |
关于查看文件
cat 命令会将整个文件的内容一次性输出到屏幕上,适合查看较小的文本文件
more 命令也用于分页显示文件内容,但与 cat 不同,它会逐页显示文件内容,而不是一次性显示整个文件,空格查看下一页
less 允许向前和向后浏览文件内容,支持搜索、跳转等操作
输出重定向
ls -l > a.txt # 列表的内容写入文件 a.txt 中(覆盖写)
ls -l >> a.txt # 列表的内容写入文件 a.txt 中(末尾追加)
cat 文件1 > 文件2 #将文件1的内容覆盖到文件2
在 ll -lh 命令输出中
-rwxrw-r--
第一个字符指示文件类型:- 表示普通文件。d 表示目录。l 表示符号链接(symlink)。c 表示字符设备文件。b 表示块设备文件。s 表示套接字(socket)。p 表示命名管道(FIFO)
接下来的九个字符表示文件权限,按顺序分为所有者、所属组、其他用户
日期时间
输入 | 作用 |
---|---|
date "+%s" | 时间戳 秒级别 |
date "+%s%3N" | 时间戳 毫秒级别 %3N是取纳秒部分的前三位作为毫秒 |
date "+%Y-%m-%d %A %H:%m:%S" | 格式化显示 2024-03-20 星期三 16:03:24 |
cal | 显示日历 |
用户管理
调整允许root登录
sudo vim /etc/ssh/sshd_config
PermitRootLogin no
sudo systemctl reload sshd
输入 | 作用 |
---|---|
useradd 用户名 | 添加用户 |
userdel -r 用户名 | 删除用户,以及home下的文件夹 |
id 用户名 | 用户信息 |
groupadd 组名 | 新增组 |
groupdel 组名 | 删除组 |
groupmod -n 新组名 旧组名 | 新增组 |
usermod -g 组名 用户名 | 把用户改到组下 |
getent group | grep 组名 | 查看组信息 |
文件权限
chmod三个数字对应 所有者、所属组、其他用户
0-无权限、1-执行(x)、2-写入(w)、3-执行+写入(wx)、4-读取(r)、5-执行+读取(rx)、6-执行+读取(wr)、7-全部(rwx)
赋权对象
u: 所有者 (user) 默认是这个
g: 所属组 (group)
o: 其他用户 (others)
a: 所有用户
chmod -R 递归赋权文件夹下的内容
chown username \home\a.txt 改变所有者
chgrp usergroup \home\a.txt 改变所属组
搜索查找
find 目录 -name/user/size 文件名 | 按照名称/所属用户/文件大小 在目录下搜索文件 文件名*匹配多个?匹配单个
grep -A 10 "XXXXXXXX" httpClient.log 查日志内容前后十行
压缩
# 压缩单个文件
tar -zcvf nginx.tar.gz nginx.conf
# 压缩多个文件
tar -zcvf nginx.tar.gz nginx.conf nginx.conf2
# 解压文件
mkdir tmp
tar -zxvf nginx.tar.gz -C tmp/
磁盘分区
查看磁盘容量 df -h
查看文件占用磁盘块大小 du -h
进程线程
ps aux | grep XXX
ps -ef | grep XXX
pgrep -f "xx" 找某个进程的pid
top
-p 通过指定进程ID来仅仅监控某个进程的状态
-i 使top不显示任何闲置或者僵死进程
top交互操作
- P 以CPU使用率排序,默认就是此项
- M 以内存的使用率排序
- N 以PID排序
- q 退出top
- u 根据指定用户进行过滤
- k 直接杀死
根据端口号查询进程
netstat -tlnp | grep 3658
根据进程ID查询端口号占用情况
netstat -nlp | grep 12564 | grep LISTEN
软件包管理
Ubuntu换源
cat /etc/apt/sources.list
# 可能有cloud-init干涉 会提示去/etc/apt/sources.list.d添加自定义的源
touch /etc/apt/sources.list.d/mylist.list
常用命令
# CentOS
yum list | grep firefox
yum remove firefox
yum -y install firefox
# Ubuntu
apt search firefox
sudo apt remove firefox
sudo apt install firefox
Shell编程
Shell是一个命令解释器,它接收应用程序/用户命令,然后调用操作系统内核。
还是用python吧,库多而且编程语法更简洁
执行
bash包含sh,现在默认都是使用bash
echo $SHELL
/bin/bash
chmod赋权
chmod +x helloworld.sh
# 等价于 chmod u+x helloworld.sh
变量
env查看系统变量,常用的系统变量有
HOME、PWD、SHELL、USER
- 只包含字母、数字和下划线: 变量名可以包含字母(大小写敏感)、数字和下划线 _,不能包含其他特殊字符。
- 不能以数字开头: 变量名不能以数字开头,但可以包含数字。
- 避免使用 Shell 关键字: 不要使用Shell的关键字(例如 if、then、else、fi、for、while 等)作为变量名,以免引起混淆。
- 使用大写字母表示常量: 习惯上,常量的变量名通常使用大写字母,例如 PI=3.14。
- 避免使用特殊符号: 尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。
- 避免使用空格: 变量名中不应该包含空格,因为空格通常用于分隔命令和参数。
# 赋值语句等号左右不能有空格
# 单引号不会解释 ${变量} 的值
new_var='1234'
# ${#string} 输出字符串的长度
# ${string:1:4} 截取字符串从索引位置1开始,取4个字符
# bash本身不支持浮点数,需要借助bc(Basic Calculator),或者用Python代替
echo "3.14 * 2.5" | bc
# 整型、普通数组、关联数组(Map)
# declare -i num
num=10
# declare -a my_array
my_array=(a b c d)
echo ${my_array[0]}
echo ${my_array[*]}
# ${#my_array[*]} 数组长度
# declare -ai my_int_array
my_int_array=(1 2 3 4 5)
my_int_array=(
2
3
4
5
6
)
# declare -A associative_array
associative_array["name"]="John"
associative_array["age"]=30
# 全部value
echo ${associative_array[*]}
# 全部key
echo ${!associative_array[*]}
# $ 或者 ${} 都可以使用变量 当可能出现歧义时需要花括号
for skill in Ada Coffe Action Java; do
echo "I am good at ${skill}Script"
done
# $(命令) 可以执行命令
# 注意循环和if的语法 if的[]内部也要有空格 且if-else分支下的内容不能为空
# [] 里的 -o || 代表or -a && 代表and
for file in $(ls ~/Desktop); do
echo $file
done
if [ $a == $b ]; then
echo "a 等于 b"
elif [ $a == $c ]; then
echo "a 等于 c"
else
echo "其他"
fi
# 只读变量,不可再被修改
readonly read_var
# 删除变量,只读变量无法删除
unset del_var
# 函数 如果return则return值必须0-255 没有return以最后一句作为return的内容(更灵活)
function add(){
s=$[$1+$2]
echo "sum结果是$s"
}
read -p "请输入第一个整数" a
read -p "请输入第二个整数" b
sum=$(add $a $b)
echo "sum=$sum"
可以使用 $1、$2 等来引用传递给脚本的参数,其中 $1 表示第一个参数,$2表示第二个参数,注意 $0 为执行的文件名