以下内容整理自《鸟哥的Linux私房菜》

常用shell

linux默认使用bash,新版mac系统默认使用zsh

shell语法大部分是兼容的,初学者只要学习bash就行了

  1. /bin/sh(已经被/bin/bash所替代)
  2. /bin/bash(Linux默认shell)
  3. /bin/ksh
  4. /bin/tcsh
  5. /bin/csh
  6. /bin/zsh(基于ksh发展出来,新版mac默认shell)

vim /etc/shells

  1. /etc/shells是一个有效登陆shell的列表,在调用chsh改变登陆shell时,会查询这个文件
  2. 由于/bin/date/不在/etc/shells里,所以普通用户调用chsh失败。root调用会出现warning
  3. 另外一些程序会根据这个文件来判断一个用户是否是有效用户,例如FTP服务会阻止那些shell不在/etc/shells里的用户登陆

vim /etc/passwd

  1. 不同的用户登录系统时,系统就会给我们一个默认shell来进行工作,那这个不同使用者默认的shell分别是什么哪?这些记录都在/etc/passwd文件中

vim ~/.bash_history

  1. 当前登录状态,history 命令读取内存中的历史操作
  2. 上一次登录状态,history 命令读取 .bash_history 中的历史操作
  3. .bash_history 默认存放1000条命令

转义符 \

有时候命令过长,需要换行输入的话,可以使用 \回车,将回车转义即可(\ 和 回车之间不能有空格)

shell的变量

环境变量(可以通过 env 或者 export 命令查看),通常全部大写,如:PATH HOME MAIL SHELL PS1 HISTSIZE LANG RANDOM

set命令可以查看所有变量(包括环境变量和自定义变量)

输出变量(需要在变量前面加上 $ 符号,或者以 ${变量} 的方式来显示)

  1. echo $PATH
  2. echo ${PATH}

设置变量(变量名只能是字母和数字并且以字母开头),等号两边不能有空格符

  1. variable=BestLove
  2. variable='Best Love' 有空格需要用单引号括起来
  3. variable="$name is Best Love" 包含变量需要用双引号括起来
  4. variable=BestLove\'s 可以使用反斜杠转义特殊符号
  5. version=$(uname -r) 可以使用 command 或 $(command) 接收命令
  6. ls -l locate crontab
  7. PATH="$PATH":/home/bin 可以使用 $变量 ${变量} 累加内容
  8. PATH=${PATH}:/home/bin
  9. export variable 将自定义变成环境变量,如果变量需要在子进程中执行,需要使用 export
  10. unset variable 取消变量使用 unset 关键字

$ 本身也是一个变量,echo $$ 可以输出当前进程的 PID

? 上一个命令的回传值,执行成功返回0,echo $?

语言环境

  1. locale 查看系统当前字符编码
  2. 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

results matching ""

    No results matching ""