第一章 初识Linux shell
第二章 走进shell
第三章 基本的bash shell命令
- cd
- pwd:显示出shell当前目录
- ls -F -R -l
- *和?和[ ]和[ a - i ]和!可以作为元字符通配符
- touch
- cp -i -R
- 制表键自动补全
- 硬链接和符号链接(ln -s)
- mv -i
- rm -i -r -f
- mkdir -p
- rmdir:只能在文件夹为空的时候才能删除
- tree
- file
- cat -n -b -T
- more
- less:more的升级版
- tail -n 2
- head -n 2
第四章 更多的bash shell命令
- ps -ef… 有一个ps-forest挺有意思
- top:动态显示进程
- kill -s(支持其他信号):不过kill只能接进程的pid
- killall:可以接进程名称
- mount
- umount
- df:查看所有已挂载的磁盘的使用情况
- du:显示特定目录的磁盘使用情况
- sort:以行排序
- grep
- gzip;gzcat(我用的时候要zcat);gunzip实现对单个文件的压缩
- tar
第五章 理解shell
- shell不单单是一种CLI,是一个时刻都在运行的复杂交互式程序
- 存在默认的交互shell和默认的系统shell(用于那些需要在启动时使用的系统shell脚本),ubuntu的前者为bash后者为dash
- 启动子shell:如bash,然后可以随时exit
- 进程列表:在()里的一串命令,用;分割,如(sleep 2 ;echo $BASH_SUBSHELL;sleep 10);进程列表使得生成了一个子shell来执行对应的命令
- 后台模式:(sleep 2 ;echo $BASH_SUBSHELL;sleep 10)&,多加一个&就行
- jobs -l
- 协程:coproc sleep 10 (没建立子shell)coproc my_job{ sleep 10; }(建立子shell):作用是在后台建立一个子shell,并在这个shell中执行命令
- coproc(sleep 2 ;echo $BASH_SUBSHELL;sleep 10)这种复合用法会产生嵌套的子shell(我测试发现好像只额外建了一个shell)
- shell的外部命令:如ps,需要创建出一个子进程(衍生forking)
- shell的内建命令:如cd,exit,alias不需要借助外部程序文件来运行,速度快,执行效率高
- type -a echo 查看echo命令是外部还是内建
- which:查看命令位置(只能查到外部的)
- history -a
- alias -p 和alias ll = ‘ls -alF’
第六章 使用Linux环境变量
- 全局环境变量(能传到所有子shell里);局部环境变量
- my_var=hello
- echo $my_var
- export my_var
- unset my_var
- 一般情况用到变量加$,操作不加
- 在shell输入外部命令:在PATH里找,用:分割;添加PATH=$PATH:/home/christine
- 登陆shell:/etc/profile和其他四个文件作为启动文件;第一个文件又会调用/etc/profile.d目录下的所有文件;剩下的所有$HOME目录下的启动文件的作用:提供一个用户专属的启动文件来定义该用户所用到的环境变量 ; $HOME/.bash_profile或 $HOME/.profile会调用 $HOME/.bashrc
- 交互式shell:不是登陆系统时启动的(如命令行提示符下输bash):它不会访问/etc/profile文件,只会检查$HOME/.bashrc
- 非交互式shell:系统运行shell脚本用的shell;BASH_ENV来查看他的启动文件
- 数组变量:mytest=(1 2 3 4 5)
- echo $mytest
- echo $(mytest[2]) echo $(mytest[*])
- mytest[2]=6 unset mytest[2] unset mytest
第七章 理解Linux文件权限
- root的UID:0
- 系统账户:系统上运行的各种服务进程访问资源用的特殊账户,所有运行在后台的服务都需要用一个系统用户账户登陆到Linux系统上
- /etc/passwd /etc/shadow(有加密的密码和关于密码的日期那些东西)
- useradd -D(查看默认参数) -m(可以创建其HOME目录,并将/etc/skel目录中的文件复制过来) useradd -D -s /bin/tsh(改变默认shell)
- userdel -r(会删除对应的HOME目录和邮件目录)否则不会删除系统中属于该账户的任何文件
- usermod -g -G(前者还改变了默认用户组)
- passwd chpasswd
- chsh chfn chage
- /etc/group 当一个用户在/etc/passwd文件中指定某个组为默认组时,用户账户不会作为该组成员再出现在/etc/group中
- groupadd 如果更改了已登录系统账户所属的用户组,该用户必须登出系统后再登录,此时组关系的更改才会生效
- groupmod
- umask umask 022 文件的全权限值:666;目录的全权限制:777
- chmod 760 newfile 或者符号模式下指定权限的格式:chmod o+r newfile
- chown options owner[.group] file 如chown dan newfile
- chgrp
- SUID;SGID;SBIT:详细描述
第八章 管理文件系统
- fdisk
- 这章具体看鸟哥吧,鸟哥细
- sudo mkfs.ext4 /dev/sdb1
- mount
- fsck
- LVM相关问题:逻辑卷管理器
第九章 安装软件程序
- aptitude是完整的软件包管理系统;dpkg是软件包管理系统工具
- aptitude show package_name dpkg -L --search package_name(得到所有跟某个软件包相关的所有文件列表)
- aptitude search(install remove purge) wine
- aptitude safe-upgrade
- 另一种yum
- 直接从源码中下载安装
第十章 使用编辑器
- 很多种编辑器
1.前置
1.MAC,Linux都是由Unix系统发展而来的,而Windows不是Unix系统
2.CLI(command line interface):命令行界面 CLI是shell的一部分
2.linux基本命令
1.man,–help
直接man+指令,获取bash手册
eg: man ls
bash手册分为很多方面的内容,man默认只查询第一部分内容(可执行程序或shell命令)
ls --help
2.文件系统相关 cd,pwd
FHS(filesystem hierarchy standard)文件系统层级标准
每一行中$为提示符,而一开始的~代表着主目录(/home/jzy)
cd +绝对路径 或 相对路径 , 如果cd 后没接路径,则切换到~中
pwd显示当前工作目录(不包括程序名称,只是路径)
3.ls
ls -F,用以区分文件与目录
ls -a,显示所有文件包括隐藏文件(通常是配置信息,以.开头的文件,eg:.config)
ls -R,递归显示子目录下的文件
ls -l,显示详细信息
ls -i,显示inode号
组合使用:ls -alF
**ls支持过滤器(文件扩展匹配):其中?代表一个字符,*代表零或多个字符,[ai]代表a或i,[a-i]代表a-i,[!a]代表不要a **
4.touch,cp
touch file
如果没有这个名称的文件,新建一个空文件;如果已经存在,则改变文件的修改时间(不会改变文件内容)
touch -a file,只改变访问时间,access time
cp filea fileb(fileb可以是目录,也可以是文件名),cp会改变复制出的文件的修改时间
cp -i,表示确认,否则会直接覆盖
cp -R,表示递归复制,复制目录及目录中的所有内容,所有文件都有新的修改日期
cp也支持通配符
制表键自动补全:按一下tab或者两下tab
5.ln,mv,rm
符号链接(软链接,不同inode,这个文件的内容就是指向另一个文件)
eg:ln -s data_file sl_data_file
硬链接(同一inode)
eg:ln code_file hl_code_file
不同文件系统下只能用软链接
mv:移动或者重命名,不改变时间信息
mv /home/fzll /home/fall,这个改变了位置和名称
mv -i,表示确认,防止覆盖已有的文件
rm -i
rm -r,递归删除
rm -f,直接删除,不受提示符干扰
注意:rm删除的东西不会有回收站,较难找回
6.mkdir,rmdir,tree
mkdir New_dir
mkdir -p A/b/c,可以同时创建多个目录和子目录
rmdir只能删除空目录,一开始要先用rm删除其中的目录与文件
tree Dir,树形展示目录结构,需要下载tree工具
7.file,cat,more,less,tail,head
file,查看文件的类型
cat -n test1,给所有的行加上行号
cat -b test1,只给有文本的行加上行号(空行不加)
cat -T test1,不让制表符出现,用^I来替换制表符
cat缺点:只能一闪而过
more,一页一页显示,不过缺点是不能回退
less,可以上下翻,并且有查找等功能
tail -n 5 File,显示文件最后几行内容(不用等着慢慢翻),默认10行
tail -f,允许其他进程使用该文件时查看文件的内容,tail命令会保持活动状态,并不断显示添加到文件中的内容(适合看日志)
head -5 File,默认10行
8.ps,top,kill,killall,后台模式&,jobs,协程coproc,bg,fg
ps -ef,显示全部进程的完整格式输出的信息,-l可以更长格式
ps --forest,树形显示进程关系
ps的缺点:不是实时的,只能观察一刻的状态
top实时显示系统信息,包括整体信息,CPU,内存,进程信息
kill 3940,kill后跟的PID,发送TERM信号(尽可能终止)
kill -s HUP 3940,可以指定发送其他信号
killall http*,支持用进程名结束进程,支持通配符
sleep 3000&,&表示置于后台运行
jobs,显示后台进程
jobs -l,显示PID
coproc MY_JOB { sleep 10; },协程使得在后台生成一个子shell来执行命令
bg 2,对可能被已经停止的作业以后台模式重启
fg 2,对可能被已经停止的作业以前台模式重启
9.mount,umount,df,du,sort,grep
mount,不加参数会显示当前系统挂载的设备列表
mount -t type device directory,手动挂载
umount directory或者device,卸载设备
df,显示已挂载设备的磁盘使用情况,以1k-blocks为单位
df -h,用M和G代替字节
du,显示特定目录的磁盘使用情况
sort,默认按字符串比较规则进行排序,-n,按数值排序,-M,按月(可以识别月份单词)排序
sort -t ‘:’ -k 3 -n /etc/passwd,按:分割,取第三个区间进行按数值排序
grep [options] pattern [file],按行匹配
grep -v t file1,反向匹配,找不包含t的行
-n,显示行号
-c,只输出有几行匹配
grep -e t -e f file1,指定多个匹配模式
grep支持Unix风格正则表达式
而egrep(衍生)支持POSIX扩展正则表达式
grep “let’s go”,在shell脚本中向终端输出
grep -n,让文字与下面命令的输出在同一行
10.gzip,tar
gzip file,用来压缩文件,可以用通配符一次压缩多个文件
gzcat,用来查看压缩过的文本文件的内容
gunzip,解压
tar function [options] object1 object2…
tar -cvf test.tar test/ test2/ ,创建了一个归档文件(就是压缩包)
tar -tf test.tar,列出压缩包内容
tar -xvf test.tar,提取内容
11.exit与进程列表,echo
在运行/bin/bash后可以用exit退出子shell
pwd;ls;cd/etc;pwd 这样可以一行依次运行多个命令
(pwd;ls;cd/etc;pwd) 这样才是进程列表(生成了一个子shell来执行对应的命令)
echo &BASH_SUBSHELL,显示有几个子shell
12.外部命令,内建命令,which,type,history,alias
外部命令在shell之外,执行时需要创建出一个子进程(衍生)
which ps,找到这个命令的位置,只显示外部命令文件
type ps,查询命令类型(只显示第一个匹配到的)
type -a ps,给出命令所有不同的实现(有内建有外部)
history,显示最近用过的命令列表
history -a,强制刷到.bash_history文件中
!20,执行历史列表中第20行的命令
!!,执行上一条命令
alias -p,alias为内建命令,显示当前可用的别名
alias li=‘ls -li’,只能在本shell中使用别名,因为是内建命令
13.全局变量,局部变量,printenv,env,set,export,unset,数组变量,getopt
env,printenv,显示所有全局变量(一般都是大写)
env HOME,printenv HOME,显示某个变量
echo $HOME
ls H O M E ,使用时要加上 HOME,使用时要加上 HOME,使用时要加上,不过操作变量时一般不用加上$
set,显示所有变量
set – ( g e t o p t − q a b : c d " (getopt -q ab:cd " (getopt−qab:cd"@"),将命令行参数替换成后面的值,而getopt可以将参数转换一下
设置局部变量:my_var=HELLO或my_var=“HELLO WORLD”
export my_var,把局部变量变成全局变量
直接在子shell中改变全局变量只对当前子shell有用,无法反映到父shell中
unset my_var,删除环境变量
PATH=$PATH:/home/jzy/scripts,把某个目录加入到PATH后面(PATH为查找命令的路径),这种只能保存到关机状态
如果想要持久化:需要把设置放在各种形式shell对应的启动文件中
mytest=(one two three four five)
echo $mytest,只会显示第一个值
echo ${mytest[2]},下标从0开始
echo ${mytest[*]}
unset mytest[2]
unset mytest
14.useradd,userdel,usermod,以及一系列ch命令
root的UID:0
/etc/passwd /etc/shadow记录了用户与密码的相关信息
useradd -D,查看新建用户的默认设置
useradd -m test,创建test用户,-m表示创建用户的HOME目录
useradd -D -s /bin/tsch,改变默认的shell属性
userdel test,只会删除/etc/passwd文件中test用户的信息
userdel -r test,也会删除用户的HOME目录与邮件目录
usermod -L,锁定用户,-l修改用户账户的登录名,-p修改账户密码,-U解除锁定让用户可以正常登录
usermod -G shared rich,-g为替换账户默认组,-G为将该组添加到用户的属组的列表中
passwd,chpasswd修改密码
chsh,改shell;chfn,改备注;chage,改账户过期时间
15.groupadd,groupmod,umask,以及另一部分ch命令
groupadd shared,创建新组
groupmod -n sharing shared,-n为改组名,-g为改GID
umask,显示默认权限 0022
文件的全权限为666,没有x
umask 026,修改默认值
chmod 760 newfile
chmod u+x newfile,改变文件权限
chown jzy.shared newfile,改变文件属主与属组
chgrp shared newfile,改变属组
当 SGID 作用于普通文件时,和 SUID 类似,在执行该文件时,如果有文件的x权限,用户将获得该文件所属组的权限。当 SGID 作用于目录时,意义就非常重大了。当用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件,如果该目录用 SGID 修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。
SBIT :目前只对目录有效,用来阻止非文件的所有者删除文件,SBIT 对目录的作用是:当用户在该目录下创建新文件或目录时,仅有自己和 root 才有权力删除。
16.date,who,wc,read,lsof
date,显示当前日期
date +%y%m%d,显示230706这种信息
who,显示当前都有谁登录到终端
wc,对数据中的文本进行计数,可以配合<输入重定向一起用
read name,把输入读到name变量中
read -p “Please enter your age: ” age,在同一行输入提示字体
read,直接read,会将数据放进REPLY环境变量中,一次可以读一行
read -t,设置超时时间
read -n5,就接受5个字符
read -s,隐藏输入读取
lsof -a -p $$ -d 0,1,2 列出打开的文件的有关信息,-a表示对-p与-d与布尔和运算,-p表示指定PID,$$为当前进程的PID,-d表示指定文件描述符编号
17.mktemp,tee,trap,nohup,nice,renice
mktemp test.xxxxxx,会自动生成唯一的xxxxxx,mktemp返回的值就是文件名
mktemp -t test.xxxxxx,在临时目录/tmp中创建文件,返回的是完整路径
mktemp -d dir.xxxxxx,建立临时目录
date | tee testfile,tee将date的内容同时输出到STDOUT和testfile中,不过会覆盖testfile的文件
date | tee -a testfile,加上-a就是往文件追加内容了
trap "echo ‘you r good’ " SIGINT,trap用来捕获信号并处理
trap “echo exit…” EXIT,捕获脚本退出的信号
trap对同一信号的处理在不同位置可以修改
trap – SIGINT,来移除信号的捕获,让脚本按默认行为处理信号
nohup ./test.sh &,nohup来阻断发送给该进程的SIGHUP信号(关闭终端时,发送给终端上进程的信号),并将输入输出都转到nohup.out中
nice -n 10 ./test.sh,nice可以调整进程优先级(CPU),-20~+19(高到低)
renice -n 10 -p 5055,改变已经运行进程的优先级
18.at,atq,atrm,crontab,anacron,local,source
at -f testfile time,会将正常输出和错误输出以电子邮件的形式发送,可以给它重定向,这个命令表示会定期执行一次
-M可以屏蔽作业产生的输出信息
atq,列出系统中有哪些作业在等待
atrm 18,删除指定作业号对应的作业
crontab -l,列出已有的cron时间表
crontab有hourly,daily,monthly,weekly目录
anacron会尽快运行已经错过的作业
local,在函数内用,可以生成局部变量
source /myfuncs,点操作符,引入库函数,会在当前shell上下文中执行命令,快捷别名:.