Linux命令⾏与shell脚本编程⼤全(⼀)
⽬录
⼀、基本 bash shell命令
创建⽂件 : touch
链接⽂件:符号链接:是⼀个实实在在的⽂件,两个通过符号链接在⼀起的⽂件,彼此的内容并不相同。使⽤ln -s命令。
硬链接:会创建独⽴的虚拟⽂件,其中包含了原始⽂件的信息及位置。但他们从根本上⽽⾔是同⼀个⽂件。原始⽂件必须事先存在,使⽤ln 命令。
查看⽂件类型 : file
查看整个⽂件 : cat , more , less
查看部分⽂件 : tail , head
⼆、更多shell命令
探查进程 : ps , 常⽤ ps -ef , ps -l
实时监测进程 : top。第⼀部分显⽰系统的概况:第⼀⾏显⽰当前时间、系统运⾏时间、登录的⽤户数以及系统的平均负载(三个值代表最近1min、5min、15min)如果近15min内的平均负载都很⾼,说明系统可能有问题。
第⼆⾏显⽰了进程概要信息:有多少进程处在运⾏、休眠、停⽌或是僵化状态
下⼀⾏显⽰了CPU的概要信息。
紧跟其后的两⾏说明了系统内存的状态。第⼀⾏是系统的物理内存:总共多少内存,当前⽤了多少,还有多少。后⼀⾏表⽰同样的信息,不过针对系统交换空间。
最后⼀⾏显⽰当前运⾏中的进程纤细列表。
PID:进程ID; USER:进程属主名字; PR:进程优先级; NI:进程的谦让值; VIRT:进程占⽤的虚拟内存总量; RES:进程占⽤物理内存总量; SHR:进程和其他进程共享的内存总量; S:进程的状态(D可中断休眠,R运⾏,S休眠,T跟踪或停⽌,Z僵化); %CPU:进程使⽤CPU时间⽐例;
%MEM:进程使⽤的内存占⽤内存的⽐例; TIME+:⾃进程启动到⽬前位置的CPU时间总量; COMMAND:进程对应的命令⾏名称。
结束进程 : kill , killall
挂载存储媒体: mount
移除存储媒体: umount
查看所有已挂载的磁盘 : df
显⽰特定⽬录的磁盘使⽤情况 : du
排序数据 : sort
搜索数据 : grep
压缩数据 : bzip2(.bz2) , compress(.Z) , gzip(.gz) , zip(.zip) 。只能压缩单个⽂件或者某个⽬录中的⽂件,或者是能有通⽤符表⽰的多个⽂件。
归档数据 : tar (将多个⽂件归档进单个⽂件)
三、理解Shell
进程列表 : 将命令列表包含在括号中 , 如 :( pwd ; ls ; cd /etc; pwd; cd ; pwd; ls)会创建⼀个⼦shell来执⾏命令。
后台模式 : 在命令结尾加上字符 & ,如 sleep 3000 &
协程 : 在后台⽣成⼀个⼦shell,并在这个shell中执⾏命令 ,如 : coproc my_job { slee 10; }。
外部命令 : 也称为⽂件命令,存在于bash shell 之外的程序,当外部命令执⾏时,会创建⼀个⼦进程。
内建命令 : 不需要使⽤⼦进程来执⾏,执⾏速度更快
命名别名 : alias li='ls -li',仅在它所被定义的shell进程中才有效。可以将alias设置放在$HOME/.bashrc⽂件中,使其效果永久化。四、Linux环境变量
全局变量
查看全局变量: printenv 或者 env,查看某⼀个环境变量printenv ,如: printenv PATH,或者echo,如: echo $PATH. 设置全局变量时,可以先创建⼀个局部变量,然后再使⽤export将其导出为全局变量。如 : export my_variable. ⼦shell不能改变⽗shell中的全局变量,即使使⽤export命令。
局部变量
查看局部变量: set命令会显⽰为某个特定进程设置的所有环境变量,包括局部、全局和⽤户定义变量。
设置⽤户变量: my_variable="Hello world",该变量在⼦shell中⽆效。数组变量mytest=(one two three four five),输出所有的值echo ${mytest[*]},输出单个值 echo ${mytest[2]},可以使⽤unset删除数组中的某个值,但是只会使该索引上的值为空。素组变量在shell脚本编程时并不常⽤,它的可移植性不好。
删除环境变量 : unset my_variable。如果该变量是全局变量,且在⼦shell中删除了该变量,在⽗shell中该变量依然可⽤。
设置PATH变量 : PATH=$PATH:/home/christine/Scripts 。 只能持续到退出或者重启系统。
环境变量的定位 : 登录时作为默认登录shell的启动⽂件为/etc/profile, 作为⾮登录shell的交互式shell(如在命令⾏敲⼊bash时启动),它不会访问/etc/profile⽂件,只会检查⽤户HOME⽬录中的.bashrc⽂件。 ⾮交互式shell使⽤的BASH_ENV环境变量,它可以继承⽗shell导出过的变量,使⽤当前shell的局部变量和全局变量。
环境变量持久化 : 在/etc/profile.d ⽬录中创建⼀个以.sh结尾的⽂件。把所有新的或者修改过的全局变量设置放在这个⽂件夹中。
五、Linux⽂件权限
/etc/passwd⽂件 :
登录⽤户名: ⽤户密码: ⽤户账户UID(数字形式):⽤户帐号组ID(GID数字形式): ⽤户账户的⽂本描述(备注字段): ⽤户HOME⽬录的位置: ⽤户默认shell
/etc/shadow⽂件 : 只有root⽤户可以访问。
登录名: 加密后的密码: ⾃上次修改密码后过去的天数(⾃1970年1⽉1⽇开始): 多少天后才能修改密码: 多少天后必须更改密码: 密码过期前多少天提醒⽤户更改密码: 密码过期后多少天禁⽤⽤户账户: ⽤户账户被禁⽤的⽇期(⾃1970年1⽉1⽇到当天的天数): 预留字段
添加新⽤户: useradd
删除⽤户 : userdel
修改⽤户 : usermod(修改⽤户账户字段,可以制定主要组以及附加组的所属关系), passwd(修改已有⽤户的密码), chpasswd(从⽂件中读取登录名密码对,并更新密码), chage(修改密码的过期⽇期), chfn(修改⽤户账户的备注信息), chsh(修改⽤户的默认登录shell)
/etc/group⽂件 : ⽂件格式 : 组名: 组密码: GID: 属于改组的⽤户列表
创建组 : groupadd
修改组 : groupmod
⽂件权限 : 例 lrwxrwxrwx 1 root root 6 Oct 3 03:54 link_nusers -> nusers
第⼀个字符代表了对象类型 : -代表⽂件, d代表⽬录, l代表链接, c代表字符型设备, b代表块设备, n代表⽹络设备。3组3字符编码分别代表了对象的属主、对象的属组、系统其他⽤户的权限,r可读,w可写,x可执⾏,其中-是0,x是1,w是2,r是4。⽂件的全权限值是666,⽬录是777.umask值是掩码值,需要从对象的全权限值中减去,即666-022=644。
chmod 760 myfiles或者 chmod [ugoa…] [+-=] [rwxXstugo…]
u代表⽤户,g代表组,o代表其他,a代表上述所有。
+表⽰在现有权限基础上增加权限,-表⽰在现有权限上移除权限,=表⽰将权限设置成后⾯的值
X如果对象是⽬录或者它已有执⾏权限,赋予执⾏权限; s运⾏时重新设置UID或GID; t保留⽂件或⽬录; u将权限设置为属主⼀样; g将权限设置为跟属组⼀样; o将权限设置为跟其他⽤户⼀样。
改变所属关系 : chown 改变⽂件的属主。 chgrp改变⽂件的默认属组。
共享⽂件(某⼀个组内的所有⽤户):
mkdir testdir ##创建共享⽬录
chgrp shared testdir #改变⽬录所在组
chmod g+s testdir #在属组的权限上增加运⾏时重新设置UID或者GID
umask 002 #设置⽂件对属组可写
cd testdir ; touch testfile #进⼊⽬录创建⽂件
六、管理⽂件系统
创建分区 : fdisk
创建⽂件系统(格式化) : mkfs.vfat(格式化u盘,⽂件系统fat), 3(⽂件系统ext3)
七、安装软件程序
使⽤aptitude 管理软件包
在命令⾏输⼊aptitude
快速显⽰某个特定包的详细信息 aptitude show package_name
得到特定软件包相关的所有⽂件的列表 dpkg -L pageage_name
到特定的软件包 aptitude search package_name
安装软件包 aptitude install package_name
更新软件 aptitude safe-upgrade
卸载软件 aptitude purge package_name 或 aptitude remove package_name
区别remove选项不删除数据和配置⽂件,purge会删除全部。
linux循环执行命令脚本
⼋、构建基本脚本
创建shell脚本⽂件
格式⼀般为 : #! /bin/bash
环境变量: 在变量名前加美元符($)来使⽤这些环境变量。
⽤户变量: var1=10,⽤户变量可通过美元符引⽤,在shell脚本结束时会被删除掉。
命令替换:将命令输出赋给变量:反引号字符(`)或者$()
重定向
输出重定向 : >(写⼊⽂件) , >>(追加)
输⼊重定向 : <(基本输⼊) , <<(内联输⼊重定向)
管道(  |  )
将⼀个命令的输出作为另外⼀个命令的输⼊,如 ls -l | more
执⾏数学运算
expr命令 : expr 1 \* 2 , expr 1 + 5
使⽤放括号 : var1=$[1 + 5] var2=$[$var1 * 2]
浮点: 使⽤bc计算器,设置⼩数位: scale=4
在脚本中使⽤bc,基本格式:
variable=$(echo “options; expression” | bc)
在bash计算器中创建的变量只能在bash计算器中有效,不能在shell脚本中使⽤
退出脚本
查看退出状态码 : $?(0表⽰默认正常退出)
exit命令:允许在脚本结束时指定⼀个退出状态码,如 exit 5
九、使⽤结构化命令
if语句
if语句会运⾏if后⾯的那个命令,如果该命令的退出状态码是0,then部分的命令会被执⾏,如果是其他值,then部分不会被执⾏基本格式 :
if command1
then
command
fi
if-then-else语句基本格式:
if command
then command
else command
fi
或者 :
if command
then command
elif command
then command
fi
test命令
如果test命令中列出的条件成⽴,test命令就会退出并返回退出状态码0.如果变量中没有内容,退出状态不为0.基本格式:test condition
在if-then语句中的⽤法
if test condition
then commands
fi
另外⼀种⽅法 :
if [ condition ] ####注意空格
then command1
fi
数值⽐较和字符串⽐较

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。