Linux与Shell 第2天 实操、软件包管理、Shell编程

传送门

Linux与Shell 第0天 阿里云安装Ubuntu22.04以及桌面
Linux与Shell 第1天 文件目录、VIM、网络配置、系统管理、远程登录
Linux与Shell 第2天 实操、软件包管理、Shell编程

实操

菜鸟教程 Linux命令大全

文件目录

输入 作用
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 为执行的文件名

posted @ 2024-04-17 16:04  迷路的哨兵甲  阅读(9)  评论(0编辑  收藏  举报