基本概念
X window
interoperate with display & video card
XFree86 and X.org
the open source version of X window
KDE/GNOME,
字符集
一组二进制命令, linux 系统发送给监视器以显示字符
ASCII
ISO-8859-x, Unicode(all iso-8xx included)
模拟终端
模拟老式的 UNIX 非智能终端,定义显示缓存、图形向量、行字符数等终端参数,定义按键等
环境变量 TERM
定义所使用的模拟终端
XTERM
终端模拟器包
主题:脚本中的格式
变量赋值“ = ”两边无空格
if 条件判断的 [] 内必须有空格, if 与[之间也需要空格
变量引用,除赋值及 for 外都应使用 $
双引号允许变量和命令替换
单引号避免特殊通配符被解释,如 $ ? | < > , eg: echo '$abc' #$abc 不会被解释成变量 abc
另一种变量引用法: ${variable}
bash 的转义符, /
Environment values
printenv, show all evn values
global env values: 大写,任何由定义变量的进程及其子进程中可见;
local env values: 小写,只在定义它的本地进程中可见,如当前 shell ;
set, show all env values, global & local included.
set env values, use "" or '' : a="A B C"
export, 将本地 env 导出为全局 env ;
delete env: unset xxx
一些默认环境变量:
PATH
HOME
TMOUT ,设置闲置多久后 bash 自动退出
DISPLAY
数学运算
expr 5 /* 2 # 需要空格
var=$[ 5 * 2 ] # 无所谓空格, bash 专有
var=$[$var*(2+$var)]
这样也可以:
var=$(( 5 * 2 ))
脚本退出
获得退出状态: $? 最大值 255
退出命令 : exit 0 # 是否可像函数一样用 return ? TBD
bash 变量数组
define : a=(1 2 3 4) ,空格分割, ()
echo ${a[1]} # use: index based on 0
echo ${a[*]} # show all members
a[1]=20 # set a member
unset a # deleted
TBD : how to add members to the array?
bash 的三种启动方式
1 ,用户登录时的默认登录 shell ,依次执行 /etc/profile , $HOME/.bash_profile, $HOME/.bash_login, $HOME/.profile
2 ,非登录的交互式 shell ,处理 ~/.bashrc
3 ,运行脚本的非交互式 shell ,由 $BASH_ENV 指定要执行的启动脚本
/etc/profile 第一次登陆时执行,最后从 /etc/profile.d 下的配置文件中收集 shell 设置信息
~/.bash_profile 在用户登录时执行,将调用 ~/.bashrc
~/.bashrc 设置 alias ,并调用 /etc/bashrc
/etc/bashrc 每次执行 / 打开 bash 时执行,其内容可被 ~/.bashrc 覆盖
~/.bash_logout
/etc/profile, 读取 /etc/profile.d 目录下的配置文件,第一次登录时执行
~/.profile
~/.bash_login
~/.bash_profile
~/.bashrc ,添加环境变量和别名的最佳地点
~/.bash_logout , logout 时执行
其他
coreutils package, the core utilities of linux from GNU
echo -n xxx, 不输出换行
user manage
UID 小于 100 ,各种非实际用户的功能创建的用户
/etc/passwd
user_name:pwd:UID:GID:comments:HOME_DIR:deault_shell
/etc/shadom
useradd -D #show default setting for adding user. SKEL set a pattern for the HOME dir of the new user.
userdel, del user, param -r is appended if u want to del the HOME_DIR also
usermod, set user such as adding user to a group
passwd, change password
finger root, show user info
group
/etc/group
name:pwd:GID:user_list
passwd of group: 用于临时成为该组成员
null user_list: /etc/passwd 中的默认组用户可以不出现在 group 的用户列表中
usermod -G group1 user1 : add user to a group
groupadd
groupmod
id 命令,可以显示用户属于的所有组
文件权限
umask, set the default value of the new created file.
chmod 760 newfile
chmod +x newfile # +, -, =
chown chgrp
文件属性
set user id(SUID) ,文件将在文件所有者权限下执行,而非文件执行者权限下,如文件由 root 所有,则普通用户也将以 root 权限执行该程序
set group id(SGID) ,对于目录,目录中的新建文件将使用目录的用户组作为默认用户组;一种建立多用户共享文件夹的方法;
粘着位:进程结束后,文件仍然保留在内存中,作用(?)
chmod +s xxx ,设置 SGID 位
临时文件
mktemp abc.XXXXXX #6 个 X 将随机生成, X 数量要大于 3 ,命令返回生成的文件名(默认当前目录), XX 必须在名称最后
mktemp -t abc.XXX # 在 /tmp 下生成文件
mktemp -d abc.xxx # 创建临时目录
字串处理
使用 ## # % %% 进行字符串截取
使用 expr 获得字串长度、子串等,
expr substr STRING POS LENGTH
eg:
expr substr abcd 1 100 #pos 从 1 开始, length 可大于实际长度
expr length abcd