标签:创建文件 usr with kill 中断 less option 局部变量 负载
当前目录所有目录中的文件
ls -R
显示目录和文件,目录后带/
ls -F
递归复制整个文件夹
cp -R
重命名文件
mv node.sh note.sh
硬连接会保留数据,软连接会直接无效
cp -l # 硬连接
cp -s # 软连接
创建目录
mkdir dir
查看文件内容 -n所有行号 -b带文本的行号
cat
其他查看文件的方法
more less
显示开头和结尾 可以带 -n 显示n行
head tail
显示进程
ps
实时进程控制
top
停止进程
kill
查看磁盘空间 -c 显示总用量 -h 以可读形式显示
df
对文件内容进行排序 -n 数字识别为数字 -M 按月份排序
sort file -n
查看全局变量
printenv
设置本地变量,然后导出,就可以变为全局变量
导出后不用再使用$符号
var=100
export var
删除环境变量
unset var
定义数组
myArr=(1 2 3 4)
通用显示
echo ${myArr[0]}
只能显示第一个
echo $myArr
显示所有数据
echo ${myArr[*]}
unset 对数组也有效
查看别名
alias -p
创建别名
alias vim=‘vi‘
用户操作
useradd usermod userdel
修改权限 u 表示用户 o 表示其他任何人
g 表示用户组 a 表示所有
+ 表示增加权限 - 相反
x 表示执行权限 chmod u+x file
上述命令表示给文件增加执行权限
chmod
开始创建脚本
!/bin/bash
执行该 echo 后不换行
echo -n
时间
date
用户
who
不管文件村不存在,都覆盖
data > file
>> 在末尾添加
wc 文本的行数,文本的单词数,文本的字节数
管道符 ,将输出重定向到另一个命令
|
运算,$[],在方括号中进行
a=10
b=20
c=$[a+b]
echo c
bc bash计算器
-q 去掉欢迎 scale 设置小数位数
bc
浮点数运算,一定要用双引号,外面用1左边的引号
a=100.1
b=150
c=echo "scale=4; $a / $b" | bc
echo $c
内置输入重定向
result=bc << EOF scale=10 a=100 b=2300 a/b EOF
查看退出状态码
echo $?
手动修改状态码
exit 10
结构化命令,如果if后的命令执行返回0
那么执行then后面的语句
if date
then
echo "It‘s worked"
fi
可以在then语句块后加else
elif 多分支语句
if 条件中可以写这个,
和普通就一样了
需要注意的是要和[ 空格分开 ]
-eq 相等
-ge 大于等于
-gt 大于
-le 小于等于
-lt 小于
-ne 不等于
test不能处理浮点数
[ 1 -eq 2 ]
测试 test
test condition
字符串比较 = != < > -n -z
-n 长度是否大于0
-z 是否长度为0
比较时要注意要用转译符转译
字符串比较 -n "$str"
后面一定要加"",否则会出错
-d 是否是目录
-e 是否存在
-f 是否存在且是一个文件
-r 是否存在且可读
-s 是否存在且不为空
-w 是否存在且可写
-x 是否存在且可执行
-O 是否被当前用户拥有
-G 默认组是否为当前用户组
file1是否比fil2新
file1 -nt file2
-ot 旧
if 后面可以加 && ||
(())中可以执行个一些较高级的操作
里面符号也不需要转译
((a++)) ((a=!a))
[[]]内可以使用正则表达式去匹配
对前面的变量进行匹配
me=tujiawei
if [[ $me == t* ]]
then
echo $me
else
echo no
fi
case 命令
case $var in
var1 | var3)
echo $var;;
var2)
echo $var;;
*)
echo 这是默认;;
esac
for循环
for i in list
do
echo commands
done
赋值
list=‘123123‘
list=$list"456"
echo list
internal field separator 内部字段分隔符
下面的意思是只识别换行符和空格
IFS=$‘\n ‘
如果只有单个 可以
IFS=:
linux中文件名带空格是合法的
在使用时最好用""包裹
类似c的for
for ((i=1,j=10; i<=10; i++, j--))
do
echo next number is $i - $j
done
while 循环
只有最后一条测试命令的退出状态
是用来决定循环何时停止的
cnt=10
while [ $cnt -gt 0 ]
do
echo $cnt
((cnt--))
done
while 可以写多个条件
每个条件要换行
只有最后一条测试的退出状态是有效的
until 与 while 相反
只有最后一条测试命令的退出状态非0才执行
break continue
在 done 后面可以加 > 将结果输出 >>
还可以将循环的输出管道传送给其他命令
$0 为程序名
$1 - $9 为程序的参数
超过9以后,需要使用 ${10} .. ${11}
basename 返回名称,不带路径
$# 输入参数的个数
${!#} 获取最后一个输入的参数,不能用 ${$#}
$* $@ 将所有参数作为一个字符串
shift 将参数左移, 后面可以加数字, 左移n位
getopt 接受选项和参数列表
后接选项,如 abc
如果选项需要参数,就在选项后加个:
如 a: ,表示 -a 后面需要加参数
set -- 将命令行参数替换为 -- 后面的值
set -- getopt ab:cd "$@"
拆分命令行参数,并修改命令行参数
getopt ab:cd "$@" 将命令行参数变为单独的
如 -ab 变为 -a -b
这种方法会将双引号中带空格的一个命令拆分为多个
处理参数
??c 第一个:表示禁止警告信息
当没有在??c中出现时,会将选项变成?
如果不是以-开头会停止解析
while getopts ??c opt
do
case "$opt" in
a)
echo "Found the -a option" ;;
b)
echo "Found the -b option, with value $OPTARG" ;;
*)
echo "Unknow option : $opt" ;;
esac
done
最后停止的位置
$OPTIND
选项的参数
$OPTAGR
-a 显示所有对象
-c 生成计数
-d 指定目录
-e 展开对象
-f 制定读取数据的文件
-h 显示帮助
-i 忽略大小写
-l 生成长格式输出
-n 非交互式模式
-o 指定输出文件
-q quiet模式执行
-r -r 递归处理目录和文件
-s 以silent模式执行
-v 生成verbose输出
-x 排除和拒绝
-y 设置所有提问的回答为yes
读取用户输入
read var
echo -n 抑制换行
输入提示, 可以输入多个
如果不指定变量,会放在 $REPLY
read -p "请输入姓名:" name age
在read 后加 -t n 定时
read -t 5
5秒后自动结束 , 返回一个非0退出状态
read -n1 只接受一个字符
-s 让输入不显示
read 按行读文件
count=1
cat test | while read line
do
echo "Line $count: $line"
count=$[ $count + 1 ]
done
echo "Finished processing the file"
ls -al badfile 2> test1
2>表示输出错误信息
STDIN 0
STDOUT 1
STDERR 2
&> 将普通信息和错误信息输出到同一个文件中
默认情况下,Linux将 STDOUT输出定向到STDOUT
>&2 在脚本中重定向输出
正常运行不会有效果,只有运行脚本时,加上 2> 才会有效果
永久重定向
将所有STDOUT重定向到 file
exec 1>file
把3重定向到监视器
把1重定向到文件
结束以后把1改回到监视器
exec 3>&1
exec 1>output
exec 1>&3
改输入时使用 <
关闭文件描述符 , 重定向到 -
3>&-
禁止命令输出
/dev/null
mktemp 在/tmp 目录创建临时目录
生成随即字符, 一定要大写X
mktemp test.XXXXXX
mktemp -t 强制创建临时文件,并返回全路径
-d 强制创建临时目录,并返回全路径
同时发送给 监视器 日志文件
每次写都会覆盖之前的内容
若想添加, -a
tee file
date | tee -a file
SIGHUP 刮起进程
SIGINT 中断进程
SIGQUIT 停止进程
SIGKILL 无条件终止进程
SIGTERM 如果可能的话终止进程
SIGSTOP 无条件停止
SIGTSTP 停止或暂停
SIGCONT 重新启动停止进程
sleep n 暂停n秒
ctrl+z 暂停进程
当接受到信号时 执行trap 后面的命令
下面的命令表示要中断进程时 显示Haha
trap "echo Haha" SIGINT SIGTERM
trap "Bye-bye" EXIT
trap - EXIT 移除捕获
在后台运行 ./demo.sh &
在后面加一个 & 就可以
防止退出中断时退出进程
nohup ./demo.sh &
$$表示分配给作业的PID
jobs # 显示作业
-l 进程的PID和作业编号
-n 仅列出自上一次shell通知以来已经更改了作业的状态
-p 只显示PID
-r 只显示运行的作业
-s 只显示停止的作业
- 为默认作业
- 为处理完当前默认作业之后将成为默认作业
只会有一个 + 和 -
bg n 后台模式重新启动作业
fg n 前台模式重新启动作业
前台模式下无法使用命令行
优先级为10运行该脚本
-20 ~ 20 其中-20优先级最高
只能将优先级变小,不能增加
nice -n 10 ./demo.sh > test &
renice 更改系统中运行的命令优先级
renice 10 -p PID号
指定时间运行脚本
at [-f filename] time
time 可以用 Now, Now + n minutes, 10:20, 10:20PM
MMDDYY MM/DD/YY 或 DD.MM.YY
-q 指定优先级 a最高 z最低
atq 查看作业队列
atrm 移除作业
batch 如果平均负载低于0.8
运行等待的作业
与at类似
batch -f file time
min hour dayofmonth month dayofweek command
不想写可以用 * 号代替
anacron 能将错误运行时间的命令尽快运行
period delay identifier command
多久运行一次 确定运行后,需多长时间才会实际运行
唯一标识日志消息和错误消息
function name {
commands
}
name() {
}
name
可以使用return 0 ~ 255
在函数内部使用echo 返回给result
result = funcname
可以返回浮点数 和 字符串
函数就是一个小脚本,所以脚本的 $0 ~ $9 同样适用
func 10 20
local 函数内部定义局部变量
local a=1
est ${arr[*]} 传递数组
. /home/function
运行库文件脚本,可以使用相对路径
可以在 .bashrc 文件中定义函数
echo -e "\t" 可以输出不可打印的字符
选项菜单 其中 hello greet bye 都是函数
PS3="Enter option:"
select option in "hello" "greet" "exit"
do
case $option in
"hello")
hello ;;
"greet")
greet ;;
"exit")
bye
break ;;
esac
done
控制序列指示器
CSI
选择图形再现
SGR
CSIN[;k]m
普通
强亮
弱亮
斜体
下划线
慢闪烁
快闪烁
背景/前景色反转
将前景色改为背景色
黑色
红色
绿色
黄色
蓝色
洋红
青色
白色
CSI用\033代替
echo -e "\033[30m 黑色字 \033[0m"
[后是颜色代码,前景色以3开头加颜色
背景色以4开头
要使用斜体等的 [ 后 一个数字
最后都要用m结尾
替换test 为big test
"This is a test" | sed ‘s/test/big test/‘
sed 不会修改原文件,只会STDOUT
-f file
-e script
-n 禁止sed输出
sed -e ‘s/test/big test/; s/a/2‘ data1
执行多条命令用 -e, 必须用 ; 隔开
/; 不能有空格
在script中:
s/test/test1/
s/tes/test/
s/pattern/replacement/flags
flag 可以是
数字 表示第几次出现 2 表示替换掉第二次出现的字符
g 替换全部,默认只替换一行中的第一个
p 打印原始内容
w file 将替换结果写入file
可以使用!来代替/ 使更容易更换路径
2/dog/cat/ 只修改第二行
2,3 修改2,3行
2,$ 2 ~ 最后一行
sed 2,$d data 删除第二行到最后一行
可以用正则表达式
command 可以用a 和 i 类似 vim
sed ‘[address]command?new line‘
df 磁盘空间
at 定时任务创建
at 00:00
按下ctrl + D 结束命令
任务只会执行一次
创建定时任务,周期执行
crontab -e
创建任务后按提示操作
# 每月的1、2、3号执行任务
1 1 1,2,3 * * commond
# 每隔5分钟执行一次任务
*/5 * * * * * commond
anacron
错过任务执行时间后
不执行cron计划任务
机器启动后,侦测有没有cron没有执行的任务
如果有,开机后立即执行
多命令协作
管道
将一个命令的STDOUT作为另一个命令的STDIN ==> |
重定向
- 将STDOUT重定向到文件
- 将STDERR重定向到文件
- 重定向STDIN
+?
数据流
命令通过STDIN接收参数或数据
通过STDOUT输出结果
通过STDERR输出错误
STDIN
标准输入
默认从键盘输入
编号 0
STDOUT
标准输出
默认终端
编号1
STDERR
标准错误
默认终端
编号2
文件系统
- 文件系统为一个倒转的单根树状结构
- 文件名最长255个字符
除了/ 其他都可以用
- .开头的文隐藏文件 => .git
隐藏文件一般为配置文件
- 文件颜色
- 蓝 => 目录
- 黑 => 文件
- 浅蓝 => 链接
- 红 => 压缩包
- 绿 => 可执行文件
- 黑底黄字 => 设备文件
pwd 查看工作目录
touch 创建文件
- cut 按指定字符分割
- -d 指定字符串分割
- -d: 按: 进行分割
- -f 指定输出的序号
- -f1 只输出第一列
- -c 基于字符分割
- c4-6 只显示第四个到第六个字符
- echo ‘tu:jia:wei‘ | cut -d: -f1
- echo ‘tu:jia:wei‘ | cut -c4-6
- cp 复制文件
- cp filename1 filename2
- -R 递归复制,可以复制整个文件夹
- diff 比较两个文件的区别
- diff file1 file2
- -i 忽略大小写
- -b 忽略空格变化
- -u 统一显示比较信息
- 一般用以生成补丁文件 .patch
file 查看文件详细信息
- aspell.sh 拼写检查,只能检查英文
- aspell check file
- aspell list < file
- cat 查看文件
- 查找文件、文件夹
- find 查找位置 查找参数
- find . -name "a*" -exec ls -l {} ;
- -name 根据名字查找
- -perm 根据权限 -perm 777
- -type 根据类型 d 目录
- 查找所有以a开头的文件
- 文件名作为参数传给后面的命令
- 放入{}中
- 需要注意后面的 ; 不能少
which 查看可执行文件的位置
whereis 查看可执行文件的位置及相关文件
- grep 搜索纯文本
- grep ‘reg‘ file
- 可以通过管道符来作为输入
- ls -l | grep ‘grep‘
- -i 忽略大小写
- -n 显示所在行数
- -v 输出不带关键字的行
- -Ax 在输出的时候显示所在行之后的x行数 After
- -Bx 在输出的时候显示所在行之前的x行数 Before
- head 显示开头
- head filename
- -n num 显示开头 num 行
- locate 快速查找文件、文件夹
- locale key
- 需要预先建立数据库
- 默认每天更新一次
- updatedb 手工建立、跟新数据库
- 如果新文件没有跟新
- 可能查不到
- iconv 转换文件编码格式
- iconv -f gb2312 -t utf8 filename -o outfile
- ls 显示文件或目录
- -R 查看所有目录中的文件
- -F 显示目录和文件,目录后带 /
- -ld 现实目标目录的信息及链接信息
- lspic 查看pci设备 -v 查看详细信息
- lsusb 查看usb设备 -v 查看详细信息
- lsmod 查看加载的模块(驱动)
less 翻页显示文件内容
- mkdir 创建目录
- mkdir dir
- -p 如果上级目录不存在
- 则创建上级目录
- 删除目录
- 不能删除非空文件夹
- more 翻页显示文件内容
less 翻页显示文件内容
- rm 删除文件
- -i 交互式删除
- 没删除一个文件都会提示
- -r 递归删除
- -f 强制删除
- 会去掉-i的提示
- mv 移动文件命令
- mv filename1 filename2
- -l 硬连接: 原文件的引用
- -s 软连接: 相当于快捷键
- cp -l <==> ln
- sort 排序
- ls | sort
- sort file
- -u 去掉重复行
- -r 倒序
- -n 基于数字
- -t c 使用c作为分隔符
- -k x 当进行基于指定字符分割为列的排序时
- 指定基于那个列排序
- | sort 可以直接去重
- 只能删除相邻的重复行
- tail 显示最后几行
- -n num 显示最后 num 行
- -f 追踪显示文件更新
- tail filename -f
- tr 文本转换
- 删除关键字
- tr -d ‘word‘ < file
- 转换大小写
- tr ‘a-z‘ ‘A-Z‘ < file
- wc word counter 单词统计
- ls -l | wc -l
- -l 只统计行数
- -w 只统计单词
- -c 只统计字节数
- -m 只统计字符数
tee 读标准输入 写到标准输出
流程控制
if
如果if后的命令执行返回0
那么执行then后面的语句
if date
then
echo "It's worked'
fi
if date
then
echo 'It's worker'
fi
运算
- $[ a + b ]
- bc bash计算器
- -q 去掉欢迎
- scale 设置小数位数
- 浮点数运算,一定要用双引号,外面用反引号
- a=100.1
- b=150
- c =
echo "scale=4; $a / $b" | bc
变量定义
- 数组
- arr=(1 2 3)
- echo ${arr[0]} 通用显示
- echo $arr 只能显示第一个
- echo ${arr[*]}显示所有
- su 切换用户
- 切换成管理员权限执行命令
passwd 修改密码
id 获取用户的信息
系统目录
~家目录
-上一个工作目录
cd 直接回车 回到家目录
/ 下文件作用
- bin 可执行文件
- boot 引导启动, 内核文件
- dev 硬件相关文件
- etc 配置文件
- home 家目录,存放用户私有数据
- root root用户的家目录
- lib 库文件
- media 自动挂载文件目录
- mnt 挂载文件
- opt 一般装大型软件
- proc 系统实时信息,存在内存中,不在硬盘中
- sbin 与bin类似,只有管理员权限才能执行
- sys 底层信息
- temp 临时信息
- usr 保存应用软件,默认装在usr
- var 经常变化的信息
type
命令
- date 显示时间
- 格式化时间
- %y %m %d
- 设置时间 -s
- date +%y-%m-%d
hwclock 查看硬件时间
cal 查看日历
- uptime 查看系统运行时间、负载
- df 查看磁盘空间
- export 导出全局变量
- export var
- 导出后不需要使用$就可以使用
hostname 显示用户名
- unset 删除环境变量
printenv 查看全局变量
history 查看输入过的命令
- echo 显示输入内容
- tar 归档命令
- tar -cvf filename.tar filename
- 将文件打包成一个文件
- -c 创建一个归档
- 解开归档
- tar -xvf filename
- 归档并gzip压缩
- tar -cvzf file.zip /dir
- 接压缩并解开归档
- tar -zxvf file.tar.gz
- zip 压缩文件
- zip zipname upzipname
- 前一个是压缩后的文件名
- 后一个表示要压缩的文件名
- unzip 解压缩zip文件
- gzip 直接压缩
- shutdown 关机、重启
- shutdown -h now
- -h 关闭计算机
- -r 重启
- 立即关机
- shutdown -h +10 10分钟后关机
- shutdown -h 23:30 23:30 关机
- shutdown -r now 立即重启
- poweroff 立即关闭计算机
- reboot 立即重启计算机
!! 重复上一个输入的命令
!l 重复前一条以l开头的命令
!n 重复history 中序号为n的命令
!?abc 重复命令中包含abc的命令
!-n 重复n个命令之前的命令
- alias -p 查看变量别名
alias vim=‘vi‘ 创建别名
- chmod 修改权限
- chmod +x file
- +增加权限
- -去除权限
- x执行权限
top 显示的信息
zombie 僵尸进程
%Cpu(s)
- s 运行状态,有一下这些状态
- D 不可中断的睡眠状态
- R 运行
- S 睡眠
- T 跟踪/停止
- Z 僵尸进程
进程ID |
所有者 |
优先级 |
实际使用内存大小 |
状态 |
上次更新到现在cpu时间占用百分比 |
使用物理内存百分比 |
使用CPU事件,单位1/100秒 |
命令名/命令行 |
echo $? 查看退出状态码
exit 10 手动修改状态码
pstree 进程树型结构
jobs 查看当前后台运行的命令
kill 杀进程 后可跟PID 或 进程名
- nice 改变进程优先级
- 进程优先级越高,数字越小
- nice -5 vi file 以优先级5运行vi
- nice -n -5 vi file 以优先级-5运行vi
- renice -n -20 PID 更改进程优先级
- ps 显示进程
top 实时显示信息,类似任务管理器
所爱隔山海,山海不可平
海有舟可渡,山有路可行
山海皆可平,难平是人心
shell
标签:创建文件 usr with kill 中断 less option 局部变量 负载
原文地址:https://www.cnblogs.com/tujw/p/12004621.html