Linux Shell笔记之准备篇
一、基础bash shell命令
1.shell提示符
PS1 控制默认命令行提示符的格式
[hunterno4@localhost ~]$ echo $PS1
[\u@\h \W]\$
PS2 控制后续命令行提示符的格式
[hunterno4@localhost ~]$ echo $PS2
>
[hunterno4@localhost ~]$ PS1="[\t][\u]\$" 更改命令行提示符
[07:02:53][hunterno4]$
2.命令行参数
单字母参数 -a
全字参数 --all
3.基本列表
1)ls命令
-a 显示所有文件及目录,包含隐藏文件
-d 只显示目录
-l 列出权限,使用者等详细信息
-s 显示文件大小
-k 以K字节形式显示大小
-t 以时间排序
-r 对目录反向排序
-R 列出子目录下的文件
-F 区分出文件及目录
-i 列出每个文件的索引节点
2)cat 查看文件
-n 给所有的行加上行号
3)more 分屏显示文件
v 在当前行启动vi编辑器
= 显示当前行在文件中的行号
spacbar(空格键) 显示下一屏
b 显示上一屏
4)stat 提供文件的所有状态信息
5)file 查看文件类型
6)ps -H参数显示层级格式
[root@localhost hunterno4]# ps -efH| grep ssh
root 3502 1 0 Oct30 ? 00:00:00 /usr/sbin/sshd
root 8370 3502 0 07:32 ? 00:00:00 sshd: root@pts/4
root 8751 8726 0 07:48 pts/4 00:00:00 grep ssh
7)killall 支持通过进程名而不是进程号来结束进程
8)sort 按默认语言的排序规则进行排序
-n 按数字进行排序
-M 按月排序
-r 反序排序
[root@localhost hunterno4]# du -sh *| sort -nr 查看占用空间最多的文件
12K build.xml
12K bb.xml
8.0K aa.xml
4.0K ter
4.0K pgtest
4.0K number
9)grep
-e 用来指定每个模式# grep -e i -e o number
或# grep [io] number
-n 显示匹配模式的行所在的行号
-v 反向搜索,输出不匹配该模式的行
-c 显示有多少行含有匹配的模式
-i 搜索时忽略大小写
10)useradd
[root@localhost etc]# useradd -D 显示添加用户时系统默认值
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel 添加用户时会将此目录下的内容复制到HOME目录下
CREATE_MAIL_SPOOL=no
-m 创建用户的HOME目录
-r 创建系统账户
-p passwd 指定默认密码
-u uid 指定唯一的UID
-g 指定主组
-G 指定附加组
11)userdel 删除用户,只删除/etc/passwd文件中的用户信息
-r 删除用户同时删除用户的HOME目录及mail目录
12)usermod 修改用户
-L 锁定用户
-U 解锁用户
13)umask 默认为022
目录默认权限777,umask后,新创建目录权限777-022=755,即drwxr-xr-x
文件默认权限666,umask后,新创建文件权限666-022=644,即-rw-r--r--
14)chmod g+s testdir 设为共享文件,以保证目录中新建文件都属于同一属组
二、vim编辑器
即Vi improved,常用vi做为别名
1.普通模式
# vi filename 打开或新建文件,并将光标置于第一行首
# vi + filename 打开文件并置于最后一行
# vi +/pattern filename 打开文件并将光标置于第一个与pattern匹配的位置
Ctrl+u 向上翻半屏
Ctrl+b 向上翻一屏
Ctrl+d 向下翻半屏
Ctrl+f 向下翻一屏
n+ 光标下移n行
n- 光标上移n行
h,j,k,l 分别代表左、下、上、右方向键
H,M,L 分别将光标置于屏幕顶行、中间行、底行
$ 将光标移至当前行尾
o 在当前行之下新开一行
/abc 在文件中向前查找abc
?abc 在文件中向后查找abc
n 在同一方向重复上次的搜索命令
N 在反方向重复上次的搜索命令
dd 删除当前光标所在行
3dd 删除从当前光标行开始的3行
u 撤销前一编辑命令
p 将剪贴板的内容复制到光标后
yy 将光标所在行复制到剪切板
2.命令行模式(按下:键)
:set nu 给文件的每行加上行号
:q 退出
:q! 强制退出
:wq 保存并退出
:w filename 文件另存一份名为filename
:s/old/new/g 将old替换为new
:n,ms/old/new/g 将替换行号为n到m之间的所有old
:%s/old/new/g 将替换整个文件中的所有old
:$ 将光标移至最后一行的行首
3.插入模式(按下i键)
Esc 返回普通模式
三、环境变量
1.局部环境变量
# set 查看局部环境变量
[root@localhost ~]# test=51testing 环境变量名、等号和值之间无空格
[root@localhost ~]# echo $test
51testing
[root@localhost ~]# bash 新开子Shell后,局部环境变量失效
[root@localhost ~]# echo $test
2.全局环境变量
# printenv 查看全局变量
# echo $HOME 查看变量
# test=testing 创建新的环境变量,建议小写,区别于系统环境变量
# export test 导出到全局变量中
# unset test 删除环境变量,子进程中删除只对子进程有效,对父进程无效
3.定位系统环境变量
1)登录Shell
/etc/profile 系统上默认的bash shell的主启动文件,每个用户登录都会执行这个启动文件
而这个文件又回逐一访问/etc/profile.d目录下的脚本文件
$HOME/.bash_profile
$HOME/.bash_login
$HOME/.profile 提供用户专属的启动文件
2)交互式Shell
$ bash 此时启动的Shell为交互式Shell,启动时不会去访问/etc/profile文件
而是检查.bashrc是否存在
[hunterno4@localhost ~]$ cat .bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then 查看是否存在/etc/bashrc文件,存在则生效之
. /etc/bashrc
fi
# User specific aliases and functions 用于定义别名及私有脚本函数
/etc/bashrc 任何子Shell都会执行这个文件
/etc/bashrc 文件也会执行/etc/profile.d目录下的脚本
3)非交互式shell
系统执行shell脚本时所使用的shell
4).命令别名
alias ll='ls -al' 放入.bashrc文件中,当启动交互式shell时就会生效了
四、基本脚本
1.指定要使用的shell
#!/bin/bash 此时的#不用作注释行
2.使用多个命令
# date;who 以;号分隔,长度不能超过最大命令行字符数255
3.echo 显示消息
# echo 'this is "script".' 字符串内有引号时,需要用另一种引号圈起来
-n 同一行显示一个文本字符串作为命令输出
4.反引号 允许将shell命令的输出赋给变量
# today=`date +%y%m%d`
# echo $today
131103
5.数学运算
# var1=$[1+5] 使用方括号,bash shell只支持整数运算
6.浮点数运算
# bc 进入计算器
quit 退出计算器
# bc -q 进入计算器,并去掉欢迎信息
scale=2 指定小数点后的位数
#!/bin/bash
var1=11.1
var2=11.2
var3=11.3
var4=11.3
var5=`bc << EOF
scale=2
a1=($var1 * $var2)
b1=($var3 * $var4)
a1+b1
EOF
`
echo the result is $var5
7.退出状态码
$? 专属变量,用于保存上个执行命令的退出状态码
0,命令成功结束
1,通用未知错误
126,命令不可执行
127,没找到命令
exit 5 退出时指定退出状态码