以下内容整理自《鸟哥的Linux私房菜》
常用shell
linux默认使用bash,新版mac系统默认使用zsh
shell语法大部分是兼容的,初学者只要学习bash就行了
- /bin/sh(已经被/bin/bash所替代)
- /bin/bash(Linux默认shell)
- /bin/ksh
- /bin/tcsh
- /bin/csh
- /bin/zsh(基于ksh发展出来,新版mac默认shell)
vim /etc/shells
- /etc/shells是一个有效登陆shell的列表,在调用chsh改变登陆shell时,会查询这个文件
- 由于/bin/date/不在/etc/shells里,所以普通用户调用chsh失败。root调用会出现warning
- 另外一些程序会根据这个文件来判断一个用户是否是有效用户,例如FTP服务会阻止那些shell不在/etc/shells里的用户登陆
vim /etc/passwd
- 不同的用户登录系统时,系统就会给我们一个默认shell来进行工作,那这个不同使用者默认的shell分别是什么哪?这些记录都在/etc/passwd文件中
vim ~/.bash_history
- 当前登录状态,history 命令读取内存中的历史操作
- 上一次登录状态,history 命令读取 .bash_history 中的历史操作
- .bash_history 默认存放1000条命令
转义符 \
有时候命令过长,需要换行输入的话,可以使用 \回车,将回车转义即可(\ 和 回车之间不能有空格)
shell的变量
环境变量(可以通过 env 或者 export 命令查看),通常全部大写,如:PATH
HOME
MAIL
SHELL
PS1
HISTSIZE
LANG
RANDOM
等
set命令可以查看所有变量(包括环境变量和自定义变量)
输出变量(需要在变量前面加上 $
符号,或者以 ${变量}
的方式来显示)
- echo $PATH
- echo ${PATH}
设置变量(变量名只能是字母和数字并且以字母开头),等号两边不能有空格符
- variable=BestLove
- variable='Best Love' 有空格需要用单引号括起来
- variable="$name is Best Love" 包含变量需要用双引号括起来
- variable=BestLove\'s 可以使用反斜杠转义特殊符号
- version=$(uname -r) 可以使用
command
或 $(command) 接收命令 - ls -l
locate crontab
- PATH="$PATH":/home/bin 可以使用 $变量 ${变量} 累加内容
- PATH=${PATH}:/home/bin
- export variable 将自定义变成环境变量,如果变量需要在子进程中执行,需要使用 export
- unset variable 取消变量使用 unset 关键字
$
本身也是一个变量,echo $$
可以输出当前进程的 PID
?
上一个命令的回传值,执行成功返回0,echo $?
语言环境
- locale 查看系统当前字符编码
- locale -a 查看系统支持的所有字符编码
读取用户输入
# -p 后面接提示符
# -t 后面接等待秒数
read [-pt] variable
1. read -p 请输入姓名: -t 10 userName
2. BestLove <= 用户输入
3. echo $userName (输出BestLove)
声明变量类型
declare 或 typeset
declare后面不接参数的话,会输出所有变量名称和内容
# -a array
# -i integer
# -x export
# -r readonly
declare [-aixr] variable
sum=1+2+3
echo $sum (1+2+3)
declare -i sum=1+2+3
echo $sum (6)
# 取消点直接 [-aixr] 声明的类型
declare [+aixr] varable
# 打印变量的类型及值
declare -p sum
# 数组直接用varable[index]就行了
color[0]=red
color[1]=yellow
color[2]=blue
echo ${color[0]}
echo ${color[1]}
echo ${color[2]}
ulimit
假设有10个人,同时打开100个文件,每个文件大小10M,就需要 1010010 = 10000M = 10G 内存,这样就很容易把系统内存耗尽
ulimit [-SHacdfltu] [配额]
- -H,hard limit,严格的设置,必定不能超过这个设置的值
- -S,soft limit,警告的设置,可以超过这个设置值,但是超过后会有警告提示(-H和-S可以同时设置,-S值略小于-H即可)
- -a,后面不接任何参数,可列出所有的限制额度
- -c,当某些进程发生错误时,系统可能会将该进程在内存中的信息写成文件(排错用),该参数限制内核文件的最大容量
- -f,此 shell 可以创建的最大文件容量(一般可能设置为2GB),单位 KB
- -d,进程可使用的最大断裂内存(segment)容量
- -l,可用于锁定(lock)的内存量
- -t,可使用的最大 CPU 时间(单位为秒)
- -u,单一用户可以使用的最大进程(process)数量
添加日志日期
crontab写入日志的时候,给日志文件添加日期归类,比如:每天一个日志
php bin/hyperf.php crm:test >> /tmp/test-$(date '+%Y-%m-%d').log 2>&1
每次任务执行完成后,追加一个日期
php bin/hyperf.php crm:test >> /tmp/test-$(date '+%Y-%m-%d').log 2>&1 && echo " [end_time:$(date '+%Y-%m-%d %H:%M:%S')]" >> /tmp/test-$(date '+%Y-%m-%d').log