目录
一、基本 bash shell命令
链接文件:符号链接:是一个实实在在的文件,两个通过符号链接在一起的文件,彼此的内容并不相同。使用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
后台模式 : 在命令结尾加上字符 & ,如 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 #进入目录创建文件
六、管理文件系统
创建文件系统(格式化) : mkfs.vfat(格式化u盘,文件系统fat), mkfs.ext3(文件系统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会删除全部。
八、构建基本脚本
创建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
数值比较和字符串比较
#! /bin/sh 数值比较 # n1 -eq n2 检查n1是否与n2相等 (equal) # n1 -ge n2 检查n1是否大于或等于n2 (great equal) # n1 -gt n2 检查n1是否大于n2 (greater than) # n1 -le n2 检查n1是否小于或等于n2 (less equal) # n1 -lt n2 检查n1是否小于n2 (less than) # n1 -ne n2 检查n1是否不等于n2 (not equal) 字符串比较 # str1 = str2 检查str1是否与str2相同 # str1 != str2 检查str1是否与str2不同 # str1 < str2 检查str1是否比str2小 # str1 > str2 检查str1是否比str2大 # -n str1 检查str1的长度是否非0 # -z str1 检查str1的长度是否为0 value1=10 value2=a if [ $value1 -gt 5 ] then echo "the test value $value1 is greater than 5" fi if [ $value1 \< $value2 ] #注意这里需要转义 then echo "$value1 is less than $value2" else echo "$value1 is greater than $value2" fi
文件检查
#! /bin/bash 文件比较 # -d file 检查file是否存在并是一个目录 # -e file 检查file是否存在 # -f file 检查file是否存在并是一个文件 # -r file 检查file是否存在并可读 # -s file 检查file是否存在并非空 # -w file 检查file是否存在并可写 # -x file 检查file是否存在并可执行 # -O file 检查file是否存在并属当前用户所有 # -G file 检查file是否存在并且默认组与当前用户相同 # file1 -nt file2 检查file1是否比file2新 # file1 -ot file2 检查file1是否比file2旧 ``` ``` file=/root/Desktop/Scripts if [ -d $file ] then echo "this is a directory" fi
复合条件测试
[ condition1 ] && [ condition2 ] 逻辑与
[ condition1 ] || [ condition2 ] 逻辑或
if-then 高级特性
用于数学表达式的双括号用于高级字符串处理功能的双方括号
#!/bin/bash 双括号命令符号 # val++ 后增, val-- 后减, ++val 先增, --val 先减 # ! 逻辑求反, ~ 位求反, 幂运算, << 位左移 # >> 位右移, & 位布尔和, | 位布尔或, && 逻辑和, || 逻辑或 双方括号 [[ expression ]] # expression使用test命令中采用的标准字符串比较,同时还提供了模式匹配 var1=4 var2=3 ((var3=$var1 & $var2)) if [ $var3=0 ] then echo "$var1 & $var2 is equal 0 " fi if [[ $USER == r* ]] then echo "Hello $USER" fi
case命令
在一组可能的值中寻找特定值(相当于switch)
- 基本格式
case variable in pattern1 | patter2) command1;; pattern3) command2;; *) default commands;; easc
#!/bin/bash case $USER in root | barbara) echo "Welcome, $USER" echo "Please enjou you visit";; testing) echo "Special testing account";; *) echo "sorry,you're not allowed here";; esac
十、更多结构化命令
for命令
- 基本格式 :
for var in list do commands done
#! /bin/bash 读取列表中的值 # list="Alabama Alaska Arizona" 读取复杂值 # list="I don\'t know if this\'ll work" #单引号转义 从变量读取列表 # list="Alabama Alaska Arizona" # list=$list "Connecticut" # list="Alabama Alaska Arizona Connecticut" 从命令读取值 # list="/root/Desktop/Scripts/state" # for state in $(cat $list) 更改字段分割符 # 默认分割符 : 空格、制表符、换行符 # 更改IFS的值: IFS=$'\n',只能识别换行符 用通配符读取目录 # for file in /root/Desktop/Scripts/*
# example1: file=state IFS=$'\n' for state in $(cat $file) do echo "$state" done # example2: for (( a=1,b=10 ; a<=10 ; a++,b--)) do echo "$a-$b" done
- C语言风格for命令格式 :
for (( variable assignment ; condition ; iter))
while命令
while test_command do other commands done
#!/bin/bash 在while中可以使用多个测试命令 var1=10 while echo $var1 第一个测试命令 [ $var1 -ge 0 ] 第二个测试命令 do echo "This is inside the loop" var1=$[ $var1 - 1 ] done
until命令
和while命令工作方式完全相反,until命令要求你制定一个通常返回非零推出状态码的测试命令,只有测试命令的退出状态码不为0,才会执行循环中列出的命令。一旦测试命令返回了退出状态码0,循环结束。基本格式:
until test_command do other commands done
其他知识:
#! /bin/bash 循环文件处理 IFS.OLD=$IFS 保存IFS值 IFS=$'\n' for entry in $(cat /etc/passwd) do echo "Values in $entry -" IFS=: for value in $entry do echo " $value" done done
break n: 命令可以跳出内部和外部循环,n默认为1,表示跳出当前循环,如果将n设为2,break命令会停止下一级的外部循环 continue n: 命令允许通过命令行参数指定要继续执行哪一级循环 处理循环输出: 可以对循环的输出使用管道或进行重定向,这可以通过在done命令后添加一个处理命令来实现 for file in /root/Desktop/Scripts/* do if [ -f "$file" ] then echo "$file is a file" fi done > output.txt # done | sort > output.txt
到此这篇linux命令与shell编程大全pdf_linux怎么进入shell命令的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/shellbc/1528.html