SHELL 命令

#查看

#查看目录		[DIR] 缺省默认为查看当前目录
		ls [DIR]		#查看目录中的内容简单列表
		ll [DIR]		#查看详情列表
		ls -la [DIR]	#查看所有内容
	#查看文件			输出至控制台=>标准输出
		cat [-n] FILE_PATH	#查看文件中的所有内容
		head -n FILE_PATH	#查看文件前n行的内容
		tail -n FILE_PATH	#查看文件后n行的内容
			#查看/etc/profile文件的第6~10行的内容
			head -10 /etc/profile>tmp.log
			tail -5 tmp.log
			rm -f tmp.log
		grep 'CONTENT' FILE_PATH
	#管道符 【允许多重管道】
		cat /etc/profile|grep usr
	#重定向
		STD_CONSOLE_OUT>FILE_PATH
		# > 	覆盖模式
		# >>	追加模式
		COMMAND>>info.log 2>>error.log	#正常信息和异常信息分别输出到不同文件
		COMMAND>>info.log 2>>&1			#正常信息和异常信息输出到相同文件

#权限

#权限		层级  所有者	所属组	资源大小	创建时间		    资源名称
drwxr-xr-x. 3 	 root 	root   	19  	May 25 07:43 	script
	
	- --- --- ---
	# 第一部分
		# -	文件
		# d	目录
		# l	链接	类似于windows快捷方式
	# 后三个部分分别代表三个身份用户对该资源的权限
		# 所有者
		# 组内用户
		# 组外用户
	# 权限的构成	r=>read读	w=>write写	x=>execute执行
		权限类型	二级制	十进制
		---			000		0
		r--			100		4
		-w-			010		2
		--x			001		1
		rw-			110		6
		r-x			101		5
		-wx			011		3
		rwx			111		7

#修改操作权限和所有权

chmod (U/G/O)(=/+/-)(rwx)	SOURCE
chmod 777 SOURCE
chown USER_NAME:GROUP_NAME SOURCE

#目录 默认权限:755

#绝对与相对路径 PATH
		#相对路径
			./
			PATH
		#绝对路径
			/PATH/...
	#创建目录【支持多并列】
		mkdir DIR_NAME[ DIR_NAME2 ...]
	#创建多级目录
		mkdir -p PATH/SUB_PATH/...
	#删除目录
		rm -d PATH		#删除空目录
		rm -rf PATH		#递归删除目录指向的所有资源(包括目录)
	#查看当前目录
		pwd
	#目录切换
		cd PATH
		cd ../		#退回上一级
		cd ~		#退回当前目录的主目录
		cd /		#退回当前虚拟机的根目录

#文件 默认权限:644

#创建
		touch FILE_PATH	#创建空文件
		vi[m] FILE_PATH	#创建并操作、编辑文件
			#默认进入命令行模式
				shift+g #调至最后一行
				/FIND_CNT #在当前文件中检索包含FIND_CNT内容的所有行
				#=> 通过o/i切换至编译模式
				#=> 通过esc返回命令行模式
			# 退出
				shift+z+z	#快捷键:保存并退出
				:x			#快捷键:保存并退出
				:wq!		#:w :q	!强制执行
		
	#编辑
	#删除
		rm -f FILE_PATH
	#移动
		mv FILE_PATH DEST_DIR #移动
		mv FILE_PATH DEST_FILE_PATH #[移动且]重命名
	#拷贝
		cp FILE_PATH DEST_DIR
	#文件统计:行数,单词数,字符数
		wc FILE_PATH

#用户

vim /etc/passwd
	用户名		密码	用户ID		分组ID		组名			当前用户主目录		当前用户的shell命令集类型
	henry	:	x	:	1000	:	1000	:	henry		:	/home/henry		:	/bin/bash
	mysql	:	x	:	27		:	27		:	MySQL Server:	/var/lib/mysql	:	/bin/false
	#创建用户
	useradd USER_NAME -g PRIMARY_GROUP -G SECONDARY_GROUP -d USER_PATH -p USER_PASSWORD
	#删除组内用户
	gpasswd -d USER_NAME GROUP_NAME
	#删除用户【自动级联删除已绑定的分组用户列表中的用户】
	userdel USER_NAME
	#修改用户信息
	usermod USER_NAME -G GROUP_NAME	#追加次分组

#分组

vim /etc/group
	组名		密码	组ID	组内用户
	henry	:	x	:	1000:	henry
	mysql	:	x	:	27	:
	#添加分组
	groupadd GROUP_NAME
	#删除分组
	groupdel GROUP_NAME

#进程操作

kill -9 PROCESS_ID

#执行命令

#原始命令
		ls -la /etc/profile.d|grep vim
#特殊方式
		#将命令执行的结果存入文件
		ls -la /etc/profile.d|grep vim>rst.log

#编程

#设置shell制表位:默认为8,修改为4
		vim /etc/vimrc
		--------------
		set tabstop=4
		--------------
		#保存退出后重新连接客户端即可
	#可执行文件
		#创建并编辑脚本
			touch cha01.sh
			chmod u+x char01.sh
			vim char01.sh
			--------------------
			#!/bin/bash
			
			...
			--------------------
		#执行脚本并可根据需要传参
			./PATH/cha01.sh PARAM1 [PARAM2 ... PARAMN]
		#脚本中如何解析参数
			$# #表示参数的数量
			$n #表示第n个参数的值
	#变量
		VAR_NAME=VALUE	#声明并赋值,等号右边的值决定了左边变量的数据类型
		unset VAR_NAME	#取消变量
		echo $VAR_NAME	#使用变量需要加 $
		#将命令执行结果存入变量
			RST=`ls /etc/profile.d`		#【反引号执行命令有阻塞功能】
			RST=$(ls /etc/profile.d)
			#当命令中出现变量导致不能正常执行
				#解决方案一:先将命令字符串拼接完成,再以命令的方式执行
				RST="mv $SOFTWARE_DIR$RST $SOFTWARE_DIR$jdk"
				RST=$RST
				#解决方案二:用eval表达式完成拼接和命令转换执行的过程
				eval mv $SOFTWARE_DIR$RST $SOFTWARE_DIR$jdk
				
		#算术表达式 ((ARITHMETIC_EXPRESSION))
			VAR=$((NUM+NUM2))
			((VAR++)) #自增
			VAR=`expr 1 + 5`
	#分支
		# 单分支
			if []
			then
				...
			fi
		
		# 双分支
			if []
			then
				...
			else
				...
			fi
	
		# 多分支
			if []
			then
				...
			else if []
			then
				...
			else
				...
			fi
		
		#条件表达式书写规范
			if [ $VAR -gt/ge/lt/le/eq/ne $VAR2/CONST -a/-o CONDITION2 ]
			if (($VAR>=CONST && $VAR<TOP))
			if [[ $STR=~REGEX ]]		# =~ 支持正则 【=~前后不加空格】
			if [[ $STR == *"REGEX" ]]	# == 支持通配符
			if [ $VAR ]					# 是否存在变量 VAR
			
			str="MY long string"
			case $str in
				*release*)
					...
				;;
				*server*)
					...
				;;
				*libs*)
					...
				;;
				*) #default
					...
				;;
			esac
			
			
	#循环
		#数组
			arr=(henry pola ariel)	#创建数组
			${arr[@]} ${arr[*]}		#将数组转化为列表后返回
			${arr[INDEX]}			#获取数组执行下标元素
			${#arr[@]}				#获取数组长度
			
		


for item in arrStr / ${arr[@/*]} / {1..10} / seq(...)
		do
			...
		done
		
		i=0
		while ((i<=10))
		do
			...
			((i++))
		done
#常用函数
	#字符串函数 str="aa,bb,cc,dd"
		#非空
			[[ $str ]] [ -n "$str" ]	#true if not empty
			[ -z "$str" ]				#true if empty
		#获取字符串长度
			${#str}		# 11
		#数组:空格隔开的字符串
			arr=(${str//,/ })
			#[*][@]将空格隔开的字符串展开成列表
				${str[*]}		# array("aa","bb","cc","dd")
				${str[@]}
			#获取数组长度
				${#str[@]}		# 4
		#截取字符串 str=aabbbbcccc_def_zdef_.ghi_abcjkl.zip
			#左下标截取 0:startIndex 4:length
				${str:0:4}		# aabb
			#右下标截取 0-4:startIndex 4:length
				${str:0-4:4}		# aabb
			#左最小匹配删除或截取左最小匹配右侧内容
				${str#a*c}		# ccc_def_def_.ghi_abcjkl.zip
			#左最大匹配删除或截取左最大匹配右侧内容
				${str##a*c}		# jkl.zip
			#右最小匹配删除或截取右最小匹配左侧内容
				${str%z*p}		# aabbbbcccc_def_zdef_.ghi_abcjkl.
			#右最大匹配删除或截取右最大匹配左侧内容
				${str%%z*p}		# aabbbbcccc_def_
		#字符串替换 str=apple_banana_apple_phone
			#左一替换
				${str/apple/APPLE}	# APPLE_banana_apple_phone
			#左全替换
				${str//apple/APPLE}	# APPLE_banana_apple_phone
			#以什么开始替换
				${str/#apple/APPLE}	# APPLE_banana_apple_phone
			#以什么结束替换
				${str/%phone/APPLE}	# APPLE_banana_apple_phone
		#grep 【文本查找】
		#获取文件路径
			dirname FILE_PATH;
		#获取文件名
			basename FILE_PATH;
		#资源检索
			find PATH [option] SOURCE_NAME
			find / -name mysql
			--------------------------
			/etc/selinux/targeted/active/modules/100/mysql
			/var/lib/mysql
			/var/lib/mysql/mysql
			/usr/share/mysql
			--------------------------
		#sed
			#非交互流式文本【编辑】器
			#对文本文件进行增、删、改、查等操作
			#支持按行、字段、正则匹配文本内容
			#基本语法
				sed [-opts] 'COMMAND' FILE_PATH
			
			#选项参数
				-n	#编辑结果不做输出
				-r	#支持正则匹配
				-e	#支持多条有分号隔开的sed命令
				sed -n -r -e 's/usr/USER/g;s/profile/PROFILE/g' profile
				
				-f	#将命令封装在文件中使用
				vim opr.sed
				---------------------
				s/usr/USER/g;
				s/profile/PROFILE/g;
				---------------------
				sed -f opr.sed profile
				
				-i	#无-i只输出预览,可以重定向到新文件或覆盖原文件,有-i直接修改源文件
				sed -i -f opr.sed profile
			
			#动作说明
				i	#插入
					  #"unset i"上一行插入AABBCC
						sed -i '/unset i/i AABBCC' profile
				a	#新增
					  #"unset i"下一行插入AABBCC
						sed -i '/unset i/a AABBCC' profile
					  #最后一行后插入AABBCC
						sed -i '$a AABBCC' profile
				d	#删除
					  #删除所有内容为AABBCC行
						sed -i '/AABBCC/d' profile
					  #删除以# 开始的行或空白行
						sed -i -e '/^# /d;/^ *$/d' profile
				p	#输出
					  #从第30行输出到最后一行
						sed -n '30,$p' profile
				s	#替换
						sed -n -r -e 's/usr/USER/g;s/profile/PROFILE/g' profile
		#awk
			#数据分析生成报告
			#按【行】读入文件,【以空格默认切割】,对分割开的内容进行分析处理
			#awk有自己的编程语言,称之为样式扫描处理语言
			#基本语法:先正则抽取,然后操作
				awk '{\PATTERN\ + ACTION}' {FILE_PATH}
			#三种调用方式
				awk [-F SEPERATOR] 'COMMAND' FILE(S)
				#!/bin/bin 首行为awk命令 或 #!/bin/awk
				awk -f awk-script-file FILES(S)
				
			
	#自定义函数
		[function] funcName[()]{
			...
			echo "RETURN_VALUES"
		}
		
		rst=`funcName arg1 arg2 ... argn`
		echo $rst
					
	#数学函数
		#生成序列
			seq -s 'SEPERATOR' -w|-f "B%0NgE" 【begin】 step 【end】
			-s ','		# 指定分隔符
			-w			# 高位自动补零
			-f "B%0NgE"	# B 常量前缀字符串【可选】
						#%0Ng
							# % 左边界
							# 0 意味着高位需要补零
							# N 表示宽度(数值位数)
							# g 右边界
						# E 常量后缀字符串【可选】
		#进制转换
			$[10#VALUE]		08
							
	#日期函数
		# 2021-05-29 			年-月-日
			date +%F
		# 1622287195 			时间戳
			date +%s
		# 2021-05-29 19:12:51 	年-月-日 时:分:秒
			date +'%Y-%m-%d %H:%M:%S'
		
		# date -d "date_str/@timestamp ±n day/month/year" +%F
		# 2021-05-28
			date -d yesterday +'%Y-%m-%d'
		# 2021-05-30
			date -d tomorrow +'%Y-%m-%d'
		# 2020-12-31
			date -d "2021-1-1 -1 day" +%F
		
		# 2021 	年
			date +%Y
		# 2 	季度
			$((($(date +%m)-1)/3+1))
		# 05 	月
			date +%m
		
		# 149	年日
			date +%j
		# 29	月日
			date +%d
		# 6		周日
			date +%w
		
		# 21	年周
			date +%W
		# 		月周
			#需要自定义函数
		
		# 19 	时
			date +%H
		# 12 	分
			date +%M
		# 51 	秒
			date +%S

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值