Linux
目录结构:
/ 目录下:
- bin(binary):二进制缩写,存放常用命令
- boot:核心文件
- dev(device):设备,存放Linux的外部设备
- etc:配置文件和子目录
- lib:系统运行需要的动态共享库
- media:如果有U盘或者光驱会在这个目录下挂载
- root:系统超级管理员的主目录
- tmp:存放临时文件
- usr:存放应用程序和一下文件
- usr/bin:用户的应用程序
- var:存放不断扩充的东西,如日志文件
Shell
C语言所写的程序,是用户使用Linux的桥梁,在内核层和用户层之间
shell脚本:为shell编写的脚本
shell脚本的执行需要脚本解释器
shell脚本解释器种类:
- Bourne Shell(/usr/bin/sh)
- Bourne Again Shell(/usr/bash):Bash
。。。
Bash为免费的,被广泛使用
查看系统用的解释器:
echo $SHELL
列出所有已经安装的SHELL:
cat /etc/shells
进入Bash环境:
bash
退出Bash环境:
exit
当前目录:
pwd
2019年Bash分布了5.0版本,查看版本:
bash --version
shell 命令:
echo:在屏幕输出文本
echo hello word
-n:取消换行
echo -n hello word
export:输出的变量会成为子shell的环境变量
export a=1
bash
echo $a
命令格式:
command [arg1,arg2,...]
command:命令或者可执行文件
arg:参数
参数分为短形式和长形式:
ls -l
ls --list
他们是完全一样的,长形式便于理解
分号 ;:
表示一个命令的结束,所以可以在一行执行多个命令
clear; ls -l
&&和||:
&&:只有前面的命令成功执行,后面的才会执行
||:只有前面的命令执行失败,后面的才会执行
mkdir test && cd test
只有成功创建了test,才会执行后面的命令
cd test1 || mkdir test1
如果没有test1文件夹,才会创建文件夹
type:检查一个命令是shell内置命令还是外部程序
type echo && type ls
快捷键:
- Ctrl+l:清空屏幕
- Ctrl+c:停止正在执行的命令
- Ctrl+U:删除光标之前内容
- Ctrl+K:删除光标之后内容
- Ctrl+D:关闭会话
- Tab:自动补全命令
- 连续两次Tab:查看所有可以补全的命令
部分扩展:
- '~' :当前用户主目录
echo ~
cd ~/test
- '?' :表示任意单个字符,不包括零个字符
ls ?.txt
- ' * ' :任意数量任意字符,可以为零个,不会匹配隐藏文件(.开头的文件)
ls *.txt
ls .*
列出所有隐藏文件
env:列出所有环境变量
Bash变量名区分大小写:HOME和home是两个变量
查看单个变量:
echo $HOME
定义变量
blog_name="liuxiansen"
使用变量:变量名前加 $ ,可以加上{} 确定边界
$blog_name
$
只读变量:readonly 命令使得变量只读
blog_name="liuxiansen"
readonly blog_name
删除变量:unset 命令删除变量,无法删除只读变量
unset blog_name
字符串:单引号和双引号或者没有引号都可以
单引号:引号内变量无效,原模原样输出
双引号:可以有变量,可以有转义字符
website='redarm.cn'
declare:声明特殊变量
- -a:数组变量
- -i:整型变量
- -r:只读变量,等于readonly
- -u:变量自动转为大写字母
- -l:变量自动转为小写字母
declare -i a=1 b=2
let:声明变量时可以带表达式
let a=2+1
'#' 字符串长度:
name="123"
echo $
脚本
编写test.sh文件,在目录下./test.sh就可执行脚本文件
#!:告诉系统用什么解释器执行脚本
#!/bin/bash
如果脚本指定了解释器:#!/bin/bash,./test.sh就可以执行
如果脚本没有指定解释器,bash ./test.sh 执行
执行脚本前需要赋予权限,使脚本具有执行权限:
所有用户执行权限:chmod +x ./test.sh
拥有者所有权限,其他人读和执行权限:chmod 755 test.sh
只有拥有者可以执行:chmod 700 test.sh
执行脚本时需要带有脚本路径:
比如当前路径下 ./ ,或者是全局路径
如果脚本路径在环境变量$PATH指定的目录中,就不需要指定路径了
系统级环境变量配置文件:/etc/profile ,系统启动就加载的配置文件,所有用户都可以使用
用户的环境变量配置文件:~/.bash_profile ,用户自己的配置文件
把自己创建的 ~/bin 文件夹下的所有可执行文件加到环境变量中:
export PATH=$PATH:~/bin
:表示追加到原来的文本后面,然后所有的内容赋值给PATH
所有这就是为什么你装一个工具比如java,maven需要配置环境变量了,如果你想在命令行中直接使用java,mvn命令,你就需要把他们的脚本文件路径配置到PATH中,否则你就需要每次都带上全局路径
export UTIL_PATH=/root/maven
export PATH=$PATH:$UTIL_PATH/bin
配置完后需要重新加载配置:
source ~/.bash_profile
env:定义脚本执行需要用到的环境变量
#!/usr/bin/env node
当前shell脚本可以使用node命令
'#' :注释
脚本参数:执行脚本时可以带很多参数
脚本中使用传进的参数:
- $0:脚本名
- $1-$9:指向第1-9个参数
- $#:参数个数
- $@:全部参数
rm -rf test
$0:rm,$1:-rf,$2:test
循环输出命令的参数
#!/bin/bash
for i in "$@"; do
echo $i
done
shift:去除第一个参数,使得第二个参数变成第一个参数
循环输出参数:
#!/bin/bash
while [ "$1" != "" ]; do
echo "have $# args"
echo "arg: $1"
shift
done
exit:退出脚本,exit 0成功退出,exit 1脚本执行失败
source:执行一个脚本,一般用于重新加载配置脚本文件
或者:在脚本里可以加载一个脚本文件,然后就可以使用脚本文件里的函数
可以简写为一个 .
source ./test.sh
alias:别名
read:脚本执行过程中接受用户输入
#!/bin/bash
echo enter some word
read text
echo "your text: $text"
输入文件名,输出文件,> 将文件导向read命令,读一行,输出一行
#!/bin/bash
echo enter a textfile
read filePath
if $filePath = ""; then
exit 1
fi
while read line
do
echo $line
done < $filePath
read参数:
- -t:读取超时时间,秒为单位
- -p:指定用户输入提示信息
- -n:指定读取几个字符