Linux系统命令及Shell脚本实践指南笔记

说实话,这真是一本比较入门的Linux书籍,笔记,已经尽可能记录了,不过还是没有记多少,基本还没有学校的选修课讲的深入

常用文件含义

/etc/issue:修改登录提示语

/etc/passwd:用户密码文件 依次为 用户名,密码(实际存储在/etc/shadow中),uid,gid,说明,家目录,登录shell

image-20210809120600833

/etc/shadow:存储密码信息(密码是加密过的,且只有管理员可以查看)

image-20210809120828861

/etc/hosts:同Windons下的Hosts文件

常用指令

date +格式化 例如 date +%Y-%m-%d

who 查看当前系统 用户登录信息

useradd -d 目录 user1 添加用户并设置家目录

usermod -d 目录 user1 修改用户家目录 usermod -L/-U user1 锁定/解锁用户

su user1 切换用户(默认切换到root用户)

at time day(可以使用具体日期,或today,tomorrow) 之后编写逻辑 最后Ctrl+D退出保存

atq 查看添加的任务 atrm id 根据任务id移除任务

crontab -e 编辑定时任务 -l 列出所有定时任务 -r 移除所有定时任务

image-20210809125247757

Linux系统命令及Shell脚本实践指南笔记_第1张图片

head/tail -n num 查看指定前/后num行 默认10行

lsattr 文件 查看文件隐藏属性

chattr +/- a/i 文件 添加或移除文件隐藏属性 a无法删除 i无法写入,改名,删除

files 文件 查看文件类型信息

find / -name *.txt 查找可以直接使用通配符

tar -zcvf 目标文件 源文件 tar -zxvf 源文件 -C /temp (使用-C指定目录)

mount 查看所有文件系统挂载情况 也可以使用它进行文件挂载(要想永久挂载必须修改 /etc/fstab文件)

unmount 文件系统/挂载点 取消文件系统的挂载

sort 文件 -n 按数字排序(默认按字母排序例如 11<2) -t ‘分割符’ 指定分割符 -k 1 指定第几列常与-t搭配 -r反向排序

uniq 文件 (输入不重复的) -i 忽略大小写 -c 计算每行出现次数

cut 文件 -d 分割符 -f 1,8-9 常与-d结合使用取其分割后的指定范围部分 -c1,9-10 与-f类似不过 直接取范围内的字符

tr 文件 目标字符 要替换为的字符 (按对应下标替换,可以使用正则) -d 目标字符 删除指定字符(同样可以使用正则)

route -n 查看路由表

host 网址 查看其对应的所有的ip地址

nice -n 10 指令 以10的优先级运行指令(默认优先级为0)

renice -5 -p pid 修改指定pid的优先级为 5

sed 指令 文件 按行处理文本文件(默认只是输出到屏幕并未修改原文件,可以使用i修改原文件并不输出)

d(删除) sed ‘1,3d’ 文件 删除指定行 2d删除第二行 2,$d范围删除 /正则/d 删除匹配正则的行

s(替换) sed ‘s/正则/要替换为的/’ 替换符合条件的内容 默认每行只匹配一个 可以使用 ‘s/r/s/2’ 指定替换2个 g指定全替换

y(字符转换) sed ‘y/abc/ABC/’ 对字符按对应下标转换

sed -f 规则文件 目标文件 对文件按规则文件内的指令逐行处理

规则文件示例

image-20210810190320096

常见的运行级别

0:关机

1:单用户模式,可以修改root密码

2:多用户,但是没有网络连接

3:完全多用户

4:保留未使用

5:窗口模式

6:重启

文件标识

Linux系统命令及Shell脚本实践指南笔记_第2张图片

文件遮罩

默认目录权限:umask遮罩777 文件权限:umask遮罩666

文件系统

默认一个数据块4kb

主分区+扩展分区最多只能有4个(扩展分区一个硬盘只能有一个)

扩展分区不能写入数据,只能用于分逻辑分区

硬链接共享i节点,删除一个引用数减少1,直到为0,才真正删除

软连接,类似快捷方式

网络故障解决

1,先ping 127.0.0.1 判断本机的 TCP/IP 协议栈是否正常

2,ping本机的ip地址 判断是否是网卡或驱动出现问题

3,ping同网段的其他主机,主要判断交换机是否正常

4,ping网关,若能ping通,则本机与本地网络都正常

5,ping公网上的ip,判断是否为本机路由设置问题

6,ping公网的一个域名,判断DNS服务器是否正常

Shell编程

#!/bin/bash		# 指定使用的解释器  必须指定在第一行
name='asdasd'  # 定义变量必须  挨着定义  使用 $name
eval	$name	# 执行指定文本
exit	# 退出脚本执行  还可以返回一个数字 表示 执行情况
local	name='sdfsf'	#声明局部变量
read	age		# 注释读取输入	可以使用-p	'提示'	指定提示语
$((age*12))		# 对内容进行运算    基本运算与Java相似
ok(){  			# 定义函数   不需要定义形参  与脚本取参数方法一致
	echo $FUNCNAME	# 获取当前执行的函数名
	return 23	# 返回值通过 $?获取 
}
ok				# 执行函数
echo $?			# 获取方法返回值
$0				$num			$@				$#
shell文件名	shell指定个参数	shell的全部参数	获取参数的个数
sex="$name"		# 双引号会执行内部结果	单引号不会
declare	-a	arr	# 声明数组(只支持一维数组)		-r	声明只读变量
arr[0]=12		# 使用数组
len=#arr[*]		# 使用*将数组扩展为列表  使用#获取长度
name=$(date)	# 保存运行命令输出的内容	也可以使用``   $() 一层是运行指令  两层 直接运算数字
if	[	-e	$name	];then	# 注意;是必须的
fi
if	[	exp	];then		# 最常用的if-elif-else结构
elif	[	exp	];then
else
fi
case	$name	in	# switch结构
value1)	command1;;
value2)	command2;;
*)	command3;;		#  注意 本来 就可以使用通配符
esac
for	item	in 	`seq	100`	# for-in循环
do
done
for((i=1;i<100;i++))	#for-i循环
do
done
while	[	表达式	]	# while循环
do
done
select	name	in	name1	name2	...		# 会依次输入所有可选项 输入数字选择
do			# 必须的
	break	# break 与 continue 与Java中的类似(不过可以使用数字指定跳出层数)
done

bash shell文件 执行shell脚本 -x 单步执行(DEBUG)

export name=aaa 定义暴露变量 子线程可以直接读取到该变量

unset 变量/函数 取消变量/函数

test 表达式 / [ 表达式 ] 判断条件是否满足(推荐使用后者)

-e 文件/目录 判断文件/目录是否存在 同理 -d判断目录 -f判断文件 -x判断是否可执行 -r判断可读 -w可写 -s为空

-z 字符串 判断字符串是否为空 字符串之间可以直接比较(按字典序),或判断是否相等 数字比较需要使用 -eq -lt等

[ ] 中多个表达式 使用 ! 取反 -a and -o or

重定向

> 默认是正确输出重定向 可以使用 1 > 文件 显示指定 2 > 文件 错误输出重定向 >> 文件 附加重定向

/dev/null 黑洞输入 < 输入重定向

操作数据库

mysql -uroot -p123456 登录数据库 show databases/tables 显示所有的数据库或表

use 数据库 进入某一个数据库

你可能感兴趣的:(linux,shell,数据库,bash,vim)