1.MAC,Linux都是由Unix系统发展而来的,而Windows不是Unix系统
2.CLI(command line interface):命令行界面 CLI是shell的一部分
直接man+指令,获取bash手册
eg: man ls
bash手册分为很多方面的内容,man默认只查询第一部分内容(可执行程序或shell命令)
ls --help
FHS(filesystem hierarchy standard)文件系统层级标准
每一行中$为提示符,而一开始的~代表着主目录(/home/jzy)
cd +绝对路径 或 相对路径 , 如果cd 后没接路径,则切换到~中
pwd显示当前工作目录(不包括程序名称,只是路径)
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 **
touch file
如果没有这个名称的文件,新建一个空文件;如果已经存在,则改变文件的修改时间(不会改变文件内容)
touch -a file,只改变访问时间,access time
cp filea fileb(fileb可以是目录,也可以是文件名),cp会改变复制出的文件的修改时间
cp -i,表示确认,否则会直接覆盖
cp -R,表示递归复制,复制目录及目录中的所有内容,所有文件都有新的修改日期
cp也支持通配符
制表键自动补全:按一下tab或者两下tab
符号链接(软链接,不同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删除的东西不会有回收站,较难找回
mkdir New_dir
mkdir -p A/b/c,可以同时创建多个目录和子目录
rmdir只能删除空目录,一开始要先用rm删除其中的目录与文件
tree Dir,树形展示目录结构,需要下载tree工具
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行
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,对可能被已经停止的作业以前台模式重启
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,让文字与下面命令的输出在同一行
gzip file,用来压缩文件,可以用通配符一次压缩多个文件
gzcat,用来查看压缩过的文本文件的内容
gunzip,解压
tar function [options] object1 object2…
tar -cvf test.tar test/ test2/ ,创建了一个归档文件(就是压缩包)
tar -tf test.tar,列出压缩包内容
tar -xvf test.tar,提取内容
在运行/bin/bash后可以用exit退出子shell
pwd;ls;cd/etc;pwd 这样可以一行依次运行多个命令
(pwd;ls;cd/etc;pwd) 这样才是进程列表(生成了一个子shell来执行对应的命令)
echo &BASH_SUBSHELL,显示有几个子shell
外部命令在shell之外,执行时需要创建出一个子进程(衍生)
which ps,找到这个命令的位置,只显示外部命令文件
type ps,查询命令类型(只显示第一个匹配到的)
type -a ps,给出命令所有不同的实现(有内建有外部)
history,显示最近用过的命令列表
history -a,强制刷到.bash_history文件中
!20,执行历史列表中第20行的命令
!!,执行上一条命令
alias -p,alias为内建命令,显示当前可用的别名
alias li=‘ls -li’,只能在本shell中使用别名,因为是内建命令
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
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,改账户过期时间
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 才有权力删除。
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表示指定文件描述符编号
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,改变已经运行进程的优先级
at -f testfile time,会将正常输出和错误输出以电子邮件的形式发送,可以给它重定向,这个命令表示会定期执行一次
-M可以屏蔽作业产生的输出信息
atq,列出系统中有哪些作业在等待
atrm 18,删除指定作业号对应的作业
crontab -l,列出已有的cron时间表
crontab有hourly,daily,monthly,weekly目录
anacron会尽快运行已经错过的作业
local,在函数内用,可以生成局部变量
source /myfuncs,点操作符,引入库函数,会在当前shell上下文中执行命令,快捷别名:.