1.快捷键命令:
CTRL + c 强制终止当前命令
CTRL + l 清屏
CTRL + a 光标移动到命令行首
CTRL + e 光标移动到命令行尾
CTRL + u 从光标所在位置删除到行首
CTRL + z 将命令放入后台
CTRL + r 在历史命令中搜索
alt + F2 :运行
ctrl + alt + d : 显示
kill :终止后台进程
bg: 把工作放到后台运行
fg:把后台运行的工作调到前台
2.ifconfig 与setup:
ifconfig 临时修改配置ip地址
setup 永久配置IP地址
3.ifdown 网卡设备名: #禁用该网卡设备
ifup 网卡设备名: #启用网卡设备
wget https://........... : #下载命令
4. r w x :4 2 1 : 读权限 写权限 执行权限
5.shutdown :
-c :取消前一个关机命令
-h + 时间:关机
-r + 时间: 重启
6.cat /etc/inittab: #查看系统默认运行级别
runlevel: #查询系统运行级别
logout: #退出登录
7. .当前目录
..父目录
/根目录
~个人目录
8.通配符:
1.?:匹配一个任意字符
2.*:匹配0个或任意多个字符,可匹配任意内容
3.[ ] :匹配中括号中任意一个字符
4.[ - ] :匹配中括号中任意一个字符, - 代表一个范围
5.[^ ] :逻辑非,表示匹配非中括号内的一个字符
9.which,whereis,locate:
which:在path变量指定的路径中搜索可执行文件的所在位置,一般用来确认系统中是否安装指定的软件
whereis:主要用于定位可执行文件,源代码文件,帮助文件在文件系统中的位置,whereis命令还具有搜索源代码,指定备用搜索路径和搜索不寻常项的能力
locate:locate命令与whereis命令类似,且它们使用的是相同的数据库,但whereis命令只能搜索可执行文件,联机帮助文件和源代码文件,如果要获得更全面的搜索结果,可以用locate
10.字符界面: shell常用命令:
显示日期和时间:date;
查看登录系统的用户:who
查看当前登录用户的信息:whoami
显示历史命令:history[n]
特殊字符及其说明:
特殊字符 说明
\! 显示该命令的历史编号
\# 显示shell激活后,当前命令的历史编号
\$ 显示一个$符号,如果当前用户是root,则显示#符号
\\ 显示一个反斜杠
\d 显示当前日期
\h 显示运行该shell的计算机主机名
\n 打印一个换行符,将导致提示符跨行
\s 显示正在运行的shell的名称
\t 显示当前时间
\u 显示当前用户的用户名
\W 显示当期工作目录基准名
\w· 显示当前工作目录
· APT管理软件:(从网上下载软件)
软件的升级,更新:sudo apt-get update或sudo apt-get upgrade
软件的安装: sudo apt-get install 软件包名
软件的移除:sudo apt-get remove 软件包名
搜索软件包:sudo apt-cache search 软件包名
显示该软件包的依赖信息: sudo apt-cache depends 软件包名
DPKG命令:(本地下载好的软件)
安装:sudo dpkg -i deb包名
列出系统所有安装的软件包:sudo dpkg -l
列出软件包详细的状态信息:sudo dpkg -S 包名
列出属于软件包的文件: sudo dpkg -L 包名
ubuntu的·运行级别:
运行级别 含义
0 所有进程终止,关闭系统
1 单用户模式,用于维护系统,只有少数进程运行
2~5 图形界面的多用户模式
6 重新启动机器
ubuntu的关机和重启:
1.使用shutdown命令关闭系统:
shutdown 【选项】:
-t:在改变到其他runlevel之前,告诉init多久以后关机
-r:重启计算机
-k:并不真正关机,只是送警告信号给每位登陆者【login】
-h:关机后关闭电源,可以指定开机时间
-time:设定关机时间【shutdown】前的时间
2.使用halt命令关闭系统:
halt 【参数】
-n:在关机前不做将记忆体资料写回硬盘的动作
-w:并不真正关机,只是把记录写到/var/log/wtmp文档里
-d:不把记录写到/var/log/wtmp/文档里
-i:在关机之前·,先关闭所有的网络接口
-p:为默认选项,关机时,调用关闭电源(poweroff)的动作
3.reboot:(重启),和halt差不多
4.init:
init定义了7个运行级别(runlevel):
init 0 关机;init 6 重启;
11.ubuntu文件管理“:
绝对路径:从根目录/开始的路径;
相对路径:以.或..开始的路径
文件类型:
1.普通文件:ls -l 命令显示出来的属性中,第一个属性为-
2.纯文本文件:cat,vi,vim查看文件
3,目录文件:ls -l 命令显示出来的属性中,第一个属性为d
4.链接文件:(符号链接,硬链接),在ls -l 命令显示出来的只有符号链接第一个属性显示l
5.设备文件:(字符设备,块设备文件),ls -l/dev 命令显示出来的属性中,第一个属性为c的是字符设备,第一个属性是b的是块设备
6.套接字文件:ls -l 命令显示出来的属性中,第一个属性为s
7.管道文件:ls -l 命令显示出来的属性中,第一个属性为p,所属者有读写权限,所属组与其他用户都没有权限
文件操作命令:
1.cat:文件内容显示命令
cat 【选项】【文件名】
###########
-n或-number:由1开始对所有输出的行数编号
-b:与-n相似,只不过对于空白行不编号
-s:当遇到连续两行以上空白行,就替换为一行空白行
-E:--show-ends在每行结束处显示$
#######
1.cat a1.txt a2.txt > a3.txt #>表示输出重定向,将a1和a2的内容输出到a3,如果a3.txt不存在,就新建一个a3.txt文件
2.cat a1.txt a2.txt >> a3.txt #>>表示追加重定向,将a1和a2的内容添加到a3的尾部,如a3不存在,就新建一个
3.cat > a.txt #从键盘输入内容到a.txt
4.cat ->> a.txt #从键盘输入内容到a.txt,(CTRL+D退出输入)
2.cut,paste,tr:
cut:将一行(多列)的数据提取出指定的几列
-b:以字节为单位进行分割
-c:以字符。。。
-d:自定义分隔符,默认为制表符
-f:自定义字段
--complement:抽取除-c或-f指定文件外的文本行
paste:添加一个或多个文本列到文件中
-s:将每个文件合并成行而不是按行粘贴
-d:自定义分隔符,默认为制表符
tr:更改字符,从标准输入中替换,缩减和/或删除字符,并将结果写到标准输出;
tr只能通过stdin(标准输入),而无法通过命令行参数来接受输入
-d:删除匹配SET1的内容,并不作替换
3.more:显示输出的内容,然后根据窗口的大小进行分页显示,在终端底部打印出--More""及已显示文本占全部文本的百分比;按回车键显示下一行,按F键或空格显示下一页,Ctrl+B返回上一屏,Q键退出
more 【文件名】
##########
选项 作用
-f或《空格》 显示下一页
《回车》 显示下一行
-q或-Q 退出more
+num 从第num行开始显示
-num 定义屏幕大小为num行
+/pattern 从pattern前两行开始显示
-c 从顶部清屏然后开始显示
-d 提示按空格键继续,按q键退出,禁止响铃功能
-l 忽略换页(ctrl+l)字符
-p 通过清除窗口而不是滚屏来对文件进行换页
-s 把连续的多个空行显示为一行
-u 把文件内容中的下划线去掉
4.less:与more命令相似,除了可以按空格键向下显示文件,还可以利用pageup,pagedown键来来回翻页显示动作;
less 【选项】 【文件名】
#############
选项 作用
-m 显示读取文件的百分比
-M 显示读取文件的百分比,行号及总行数
-N 在每行前输出行号
-s 把连续多个空白行作为一个空白行显示
-c 从上到下刷新屏幕,并显示文件内容
-f 强制打开文件,禁止文件显示时不提示警告
-i 搜索是忽略大小写,除非搜索串中包含大写字母
-I 搜索是忽略大小写,除非搜索串中包含小写字母
-p字符串 从搜索到的字符串处开始显示
5.head:显示文件的前n行,不带选项时,默认显示文件的前10行
head 【选项】 【文件名】
##########
选项 作用
-n 显示文件的前n行,系统默认值是10
-c 显示文件的前n字节
##########
head -n 3 a.txt #显示a.txt文件的前三行
6,tail:显示文件的最后n行
tail 【选项】 【文件名】
##########
选项 作用
-n 显示文件最后n行,系统默认值是10
-f 不断读取文件的最新内容,达到实时监控的目的
7.echo:输出字符串到基本输出,输出的字符串间以空白字符隔开,并在最后加上换行号
echo 【选项】 字符串
#########
选项 作用
-n 不输出末尾的换行符
-e 启用反斜杠转义
\a 发出警告声
\c 最后不加上换行符
\f 换行但光标扔停留在原来的位置
\nnn 插入nnn(八进制)所代表的ASCII字符
\b 退格
\\ 反斜杠
\n 另起一行
\r 回车
\t 插入一个制表符的位置
\v 插入一个垂直制表符的位置
8.od:用于输出文件的八进制,十六进制或其他格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符
od 【选项】 字符串
########
选项 作用
-a 表示ASCII码的名字
-b 按照3个数值位的八进制数进行解释
-c 选择ASCII码字符或是转义字符
-d 选择无符号2字节单位
-f 选择单精度浮点数
-I 等价于-t dI,选择十进制整数
-l 等价于-t dL,选择十进制长整型
-o 等价于-t o2,选择两个字节的单元并按照八进制进行解释
-s 等价于-t d2, 选择两个字节单元并按照十进制进行解释
-x 等价于-t d2,选择两个字节单元,并作为十六进制解释
目录内容显示及更改命令:
1.ls:列出目录内容,是list的简写形式
ls 【选项】 【文件或目录】
##########
选项 作用
-a 显示所有文件,包括隐藏文件(以“.开头的文件和目录是隐藏 的”),还包括本级目录“.”和上一级目录“..”
-A 显示所有文件,包括隐藏文件,但不列出“.”和“..”
-b 显示当前工作目录下的目录
-l 使用长格式显示文件的详细信息,包括文件状态,权限,拥有者,以及文件大小和文件名等
-F 附加问价类别,符号在文件名最后
-d 如果参数是目录,只显示其名称而不显示其下的各个文件
-t 将文件按照建立时间的先后次序列出
-r 将文件以相反次序显示(默认按英文字母顺序排序)
-R 递归显示目录,若目录下有文件,则以下的文件也会被依序列出
-i 显示文件的inode(索引节点)信息
2.pwd:显示当前工作目录的完整路径
-p #一般情况下不带任何参数,如果目录时链接时,显示出实际路径,而非链接路径
3.cd:改变当前工作目录
cd ~ #进入当前用户的home目录
cd - #进入上级目录
cd . #进入当前目录
文件创建,删除命令:
1.touch: 生成空文件和修改文件存取时间
touch 【选项】 【文件名】
########
选项 作用
-d 以yyyymmdd形式给出要修改的时间,而非现在的时间
-a 只更改存取时间
-c 不建立任何文档
-f 将忽略,仅负责解决BSD版本指令的兼容性问题
-m 只更改变动时间
-r 把指定文档或目录的日期时间设计成参考文档或目录的日期时间
2.rm:删除一个目录中的若干文件或子目录,默认情况下,rm命令只能删除指定的文件,而不能删除目录,如果删除目录必须加参数-r
rm 【选项】 【文件或目录】
###########
选项 作用
-f 强制删除,忽略不存在的目录,不提示确认
-i 在删除前有提示,需确认
-I 在删除前超过3个文件时或在递归删除前需确认
-r(R) 递归删除目录及其内容(无该选项时只删除文件)
目录创建,删除命令:
1.mkdir:创建指定名称的目录,要求创建目录的用户在当前目录中具有权限,并且指定的目录名不能是当前目录中已有的目录
mkdir 【选项】 【目录名】
###########
选项 作用
-p 依次创建目录,需要时创建目标目录的上级目录
-m 设置权限模式,在建立目录时按模式指定设置目录权限
-v 每次创建新目录都显示执行过程信息
#####777 #所有者 组用户 其他人
-m参数的含义
参数 含义
600 只有所有者具有读和写的权限
644 所有者具有读写权限,组用户只有读权限,其他人只有读权限
666 所有人具有读权限
700 只有所有者有读写执行权限
777 所有人具有读写执行权限
#######
例子:mkdir -m 777 test4
2.rmdir:删除空目录
rmdir 【选项】 【目录列表】
###########
选项 作用
-p 当子目录被删除后其父目录为空目录时,也一同被删除
-v 显示详细步骤
复制,移动命令:
1.cp:将文件或目录复制到另一文件或目录中
cp 【选项】【源文件或目录】【目的文件或目录】
cp 【选项】 源文件组 目标目录
##############
选项 作用
-b 将要覆盖的文件做备份,但不接受参数递归时特殊文件的副本内容
-i 覆盖前查询,提示是否覆盖已存在的目标文件
-f 强制覆盖文件,若目标文件无法打开,则将其移除并重试
-p 保留源文件或目录的属性,如日期
-R 复制所有文件及目录
-a 不进行文件数据复制,只对每一个现有目标文件的属性进行复制
-H 跟随源文件中的命令进行符号连接
-l 硬链接文件而不复制文件本身
-L 总是跟随源文件中的符号连接
-n 不要覆盖已存在的文件
-P 不跟随源文件中的符号连接
-s 只创建符号连接而不复制文件
-t 将所有参数指定的源文件/目录复制到目标目录下
-T 将目标目录视为普通文件
-u 只在源文件比目标文件新或目标文件不存在时才进行复制
-v 显示详细步骤
-x 不跨越文件系统进行操作
2.mv:将文件或目录改名,或将文件由一个目录移入另一个目录
mv 【选项】 【源文件或目录】 【目的文件或目录】
###########
选项 作用
-f 禁止交互模式,mv执行移动而不给出提示(权限足够时直接执行,如果目标文件存在但用户没权限时,mv会给出提示)
-i 交互模式,当移动过的目录已存在同名的目标文件时,用覆盖的方式写文件,但在写入之前系统会询问用户是否重写,要求用户回答y或者n,以避免误操作
-n 不要覆盖已存在的文件
-u 只在源文件比目标文件新或目标文件不存在是才进行移动
-v 显示详细步骤
压缩,备份命令:
1.tar:对文件和目录打包,支持的格式为tar,gz
tar 【选项】 【文件或目录】
###########
选项 作用
-z 使用gzip或gunzip压缩格式处理备份文件。配合选项c是压缩,配合x是解压缩
-c 创建一个新的压缩文件,格式为。tar
-v 显示过程
-f 指定压缩后的文件名
-x 从压缩文件中还原文件
-u 仅转换比压缩文件新的内容
-r 新增文件至已存在的压缩文件的结尾部分
2.gzip:对文件压缩和解压缩,gzip对文件有60%~70%的压缩率
gzip 【选项】 【文件】
#############
选项 作用
-1 数字1,表示快速压缩
-9 9代表最佳状况压缩
-r 递归式的查找指定目录并压缩其中的所有文件或解压缩
-c 压缩结果写入标准输入,源文件保持不变
-v 对每一个压缩和解压缩的文件,显示文件名和压缩比
-d 解压缩指定文件
-t 测试压缩文件的完整性
-l 对每个压缩文件,显示压缩文件的大小,未压缩文件的大小,压缩比,未压缩文件的名字等详细信息
3.gunzip:解压缩以gzip压缩的。gz文件
gunzip 【选项】 【文件或目录】
¥###########
选项 作用
-a 使用ASCII文字模式
-d 解压文件
-c 把解压后的文件输出到标准输出设备
-f 强行解压压缩文件,不理会文件名或硬链接是否存在
-h 在线帮助
-l 列出压缩文件的相关信息
-L 显示版本与版权信息
-n 解压文件时,若压缩文件内容含有原来的文件名称及时间戳,则将其忽略不处理
-p 不显示警告信息
-r 递归处理,将指定目录下的所有文件及子目录一并处理
-S 更改压缩字尾字符串
-t 测试压缩文件是否正确
-v 显示指令执行过程
4.zip:压缩和归档工具,压缩文件时使用zip命令,会创建一个带.zip扩展名的zip文件,如果没有指定文件,则zip会将压缩数据输出到标准输出
zip 【选项】 压缩文件名
###############
选项 作用
-f 以新文件取代现有文件
-u 只更新改过的文件和新文件
-d 从zip文件中移出一个文件
-m 将特定文件移入zip文件中,并删除特定文件
-r 递归压缩子目录下的所有问价,包括子目录
-j 只储存文件的名称,不含目录
-9 表示最慢速度的压缩(最佳压缩),预设值为-6
-1 最快压缩,压缩率最差
-q 安静模式,不会显示相关信息和提示
-v 现实版本资讯或详细讯息
5.unzip:解压缩zip文件
unzip 【选项】 压缩文件名
############
选项 作用
-x 解压文件时,机器给出提示覆盖,否则重名
-t 测试压缩文件有无损坏,并不解压
-v 查看压缩文件的详细信息,具体包括压缩文件中包含的文件大小,文件名和压缩比等,并不解压
-n 解压时不覆盖已存在的文件
-o 解压时覆盖已存在的文件,并且不要求用户确认
-d 把压缩文件解压到指定目录
权限管理命令:
1.chgrp:改变文件或目录的所属组。
chgrp 【选项】 【群组】 【文件或目录】
############
选项 作用
-R 处理指定目录以及其子目录下的所有文件
-c 当发生改变时输出调试信息
-f 不显示错误信息
-v 运行时显示详细的处理信息
-dereference 作用于符号链接的指向,而不是符号链接本身
--no-deference 作用于符号链接本身
--reference =文件1,改变文件2所属群组,使其与文件1相同
2.chown:将文件或目录的所有者改变为制定用户,还可以修改文件所属组群。如果需要将某一目录下的所有文件全都改变其拥有者,可以使用-R参数
chown 【选项】【用户 【:群组】】 【文件或目录】
############
选项 作用
-c 显示更改的部分
-f 忽略错误信息
-R 处理指定目录以及其子目录下的所有文件,递归式的改变指定目录及其下的所有子目录和文件的拥有者
-v 显示详细的信息
-reference=<目录或文件> 把指定的目录/文件作为参考,把操作的目录/文件设置成参考文件/目录相同
3.chmod:改变文件或目录的访问权限
chmod 【选项】 【模式】 文件
##########
选项 作用
-v 运行时显示详细的处理信息
-c 显示改变部分的命令执行过程
-f 不显示错误信息
-R 将指定目录下的所有文件和子目录作递归处理
-reference=<目录或文件> 设置成与指定目录或文件具有相同的权限
##################
chmod 【选项】 【who】 operator 【permission】 files
#########who选项
选项 作用
a 所有用户均具有的权限
o 除了目录或文件的当前用户或群组以外的用户或群组
u 文件或目录的当前拥有者
g 文件或目录的当前群组
###################operator选项
选项 作用
+ 增加权限
- 取消权限
= 设定权限
#######################permission权限
选项 作用
r 读权限 4
w 写权限 2
x 执行权限 1
@############绝对模式
chmod 【选项】 mode files
###############mode选项
600 644 700 666 777
第一位表示所有者的权限,u
第二位表示组用户的权限,g
第三位表示其他用户的权限,o
文件查找命令:
whereis,find,locate,whereis查找速度快,whereis和locate从linux数据库中查找,数据库默认情况下一周更新一次,因此,whereis和locate查找文件时,有时会找到已删除的数据,或是刚建立的文件找不到。
1.whereis:寻找命令的二进制文件,同时也会找到其帮助文件
whereis 【选项】 【文件名】
###################
选项 作用
-b 定位可执行文件
-m 定位帮助文件
-s 定位源代码文件
-u 搜索默认路径下除可执行文件,源代码文件,帮助文件以外的其他文件
-B 指定搜索可执行文件的路径
-M 指定搜索帮助文件的路径
2.help:查看命令的内容和使用方法
whereis只查找文件的路径,想要查看命令的内容和使用方法,可以用help命令,
help用于查看所有shell命令,用户可以在所查找的命令后输入help既可以看到所查命令的内容和使用方法。
help 【选项】 【命令】
###########
选项 作用
-s 输出短格式的帮助信息,仅包括命令格式
-d 输出命令的简短描述,仅包括命令的功能
-m 仿照man格式显示命令的功能,格式及用法
3.man:查看命令的帮助手册
man 【选项】 命令名称
###########
选项 作用
-s 根据章节显示
-f 只显示命令的功能而不显示其中详细的说明文件
-w 不显示手册页,只显示将被格式化和显示的文件所在位置
-a 现实所有的手册页,而不是只显示一个
-E 在每行的末尾显示$符号
##############选项-s的章节参数
章节参数 作用
1 一般使用者的命令
2 系统调用的命令
3 C语言函数库的命令
4 有关驱动程序和系统设备的解释
5 配置文件的解释
6 游戏程序的命令
7 其他的软件或程序的命令和有关系统维护的命令
4.find:寻找文件或目录的位置
*匹配任意内容
?匹配任意一个字符
[]匹配任意一个中括号内的字符
find 【搜索路径】 【搜索关键字】 【文件或目录】
#############
选项 作用
-type 查找某一类型的文件
-name 按照文件名查找文件
-group 按照文件所属的组查找文件
-user 按照文件所有者来查找文件
-print find命令将匹配的文件输出到标准输出
-link 按照文件的链接数来查找文件
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计
-newerfile1 ! file2 查找更改时间比文件file1新,但比文件file2旧的文件
-perm 按照文件权限来查找文件
-depth 在查找文件时,首先查找当前目录中的文件,然后在其子目录中查找
-prune 不在指定的目录中查找,如同时使用-depth选项,-prune将被忽略
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在
-nouser 查找无有效属组的文件,即该文件的属组在/etc/passwd中不存在
######################-type选项参数
type参数 作用
b 块设备文件
d 目录
c 字符设备文件
p 管道文件
l 符号链接文件
f 普通文件
################ 时间特征参数
时间参数 作用
amin n 查找n分钟以内被访问过的所有文件
atime n 查找n天以内被访问过的所有文件
cmin n 查找n分钟以内文件状态修改过的所有文件
ctime n 查找n天以内文件状态被修改过的所有文件
mmin n 查找n分钟以内文件内容被修改过的所有文件
mtime n 查找n天以内文件内容被修改过的所有文件
#####################
(1)通过文件名查找:
find / -name httpd.conf -print
(2)根据部分文件名查找:
find / -name *http* -print
(3)根据文件的特征查找:
find /etc -size -2500c -print
5.locate:寻找文件或目录:
locate 【选项】 【搜索关键字】
############
选项 作用
-a 输出所有匹配模式的文件
-d 指定资料库的路径
-n 显示n个输出查找到的文件
-h 显示辅助信息
-q 安静模式,不显示任何错误信息
6.whatis:用于查询命令的功能
7.which:用于显示命令的可执行的路径
8.grep:使用正则表达式查找文件内容:
grep 【选项】 匹配字符串 文件列表
######################
选项 作用
-v 列出不匹配字符串或正则表达式的行,即显示不包含匹配文本的所有行
-c 对匹配的行计数
-l 只显示包含匹配的文件的文件名
-h 查询多文件时不显示文件名,抑制包含匹配文件的文件名的显示
-n 每个匹配行只按照相对的行号显示
-i 产生不区分大小写的匹配,默认状态时区分大小写
################
正则表达式的参数有
\ 忽略正则表达式中特殊字符的原有含义
^ 匹配正则表达式的开始行
$ 匹配正则表达式的结束行
\< 从匹配正则表达式的行开始
\> 从匹配正则表达式的行结束
[] 单个字符,如[A]即A符合要求
[-]范围,如[A-Z] ,即A,B,C一直到Z都符合要求
* 所有字符,长度可以为0
统计命令:
1.wc:统计指定文件中的字节数,字数,行数,并将结果显示输出
wc 【选项】 文件列表
#######
选项 作用
-c 统计字节数
-w 统计字数,一个字被定义为由空白,跳格或换行符分割的字符串
-l 统计行数
-L 统计最长行的长度
输入,输出重定向:
1.标准输入,输出:
执行一个shell命令通常会打开三个标准文档:标准输入文档(stdin),标准输出文档(stdout),标准错误输出文档(stderr)。
stdin对应终端的键盘;
stdout和stderr对应终端的屏幕;
进程将从标准输入文档中得到输入数据,将正常输出数据输出到标准输出文档,而将错误信息送到标准错误文档中。
2.输入重定向:
输入重定向主要用于改变一个命令的输入源,特别是那些需要大量数据输入的输入源;
输入时,使用符号“<”和“<<”分别表示“输入” 和“结束输入”;
例子:(1)wc < /etc/passwd #输入重定向,将/etc/passwd文档内容传给wc命令
(2)cat << end #从控制台输入字符串,当输入为“end”时结束输入
>hello
>a
>end
结果:hello
a
(3)cat > ss.txt <<eof #从控制台输入字符串,当输入“eof”时结束输入,并把内容保存到文件ss.txt中
3.输出重定向:
可以将输出写入指定文件,而不是在屏幕显示。用符号“>”表示替换,符号">>"表示追加。输出重定向还能把一个命令的输出作为另一个命令的输入,即通过管道。
例子:(1)cat > c #将屏幕输入信息保存到文件c(若c存在,则输入信息覆盖文件原内容,否则新建),ctrl+z退出输入
(2)ll >> c #将命令ll的输出追加到文件c,即保存到文件的尾部,原内容不变。
管道(pipline):一个由标准输入输出链接起来的进程集合,是一个连接两个进程的连接器,管道的操作符时“|”,将操作符左侧的输出信息作为右侧的输入信息;
(1)管道是单向的,一段只能输入,另一端只能输出,遵循“先进先出”原则
(2)管道命令只处理前一个命令的正确输出,如果输出是错误的,则不处理
(3)管道操作符右侧命令,必须能够接受标准输入流命令
#例子:cat a1.txt | grep "a" | wc -l #查找文件a1.txt中包含a的字符串并统计行数,随后显示统计结果
链接:
(1)硬链接(hard link):硬链接就是一个指针,指向文件索引节点,但系统并不为它分配inode,不占用实际的空间,硬链接不能链接到目录和不同文件系统的文件;
ln x.txt xxy.txt #建立x.txt文件的硬链接xxy.txt
(2)软链接(soft link):软链接又叫符号链接,这个文件包含了另一个文件的路径名,系统会为其重新分配inode,类似于windows中的快捷方式。软链接可以是任意文件或目录,包括不同文件系统的文件和不存在的文件名
ln -s x.txt xx #建立x.txt文件的软链接(符号链接)xx
链接命令Ln:
ln:为某一文件在另一位置建立一个同步的链接。ln命令会保持每一处链接文件的同步性,不论你改动了哪一处,其他文件都会发生相同的变化;
ln 【参数】 【源文件或目录】 【目标文件或目录】
###########
选项 作用
-s 软链接(符号链接)
-b 删除,覆盖以前建立的链接
-d 允许超级用户制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-v 显示详细的处理过程
-S “-S<字尾备份字符串>”或“--suffix=<字尾备份字符串>”
-V “-V<备份方式>”或“--version-control=<备份方式>”
12.用户和组管理:
在linux系统中,任何文件都属于某一特定用户,而任何用户都隶属于至少一个用户组。
每个用户不仅有唯一的用户名,还有唯一的用户id,用户id缩写为uid。linux系统分配的uid是一个32位的整数,即最多可以有2**32个不同的用户。
每个用户都属于一个用户组,用户组就是具有相同特征的用户的集合体,用户组id缩写为gid。linux系统分配的gid是一个32位的整数,即最多可以有2**32个不同的用户组。
不同用户的id范围:
用户id范围 用户类型
0 超级用户
1~499 系统用户
500+ 普通用户
用户管理命令:
1.useradd:创建一个新用户
useradd 【选项】 用户名
###############
选项 作用
-d 指定用户主目录。如果此目录不存在,则同时使用-m选项,可以创建主目录
-g 指定gid
-u 指定uid
-G 指定用户所属的附加组
-l 不要把用户添加到lastlog和faillog中,这个用户的登录记录不需要记载
-M 不要建立用户主目录
-m 自动创建用户主目录
-p 指定新用户的密码
-r 建立一个系统账号
-s 指定shell
####注释:-c comment,用户的注释性信息
-e expire_date禁用账号的日期,格式为YYYY-MM-DD
-f inactive_days,设置账户过期多少天后,用户账号被禁用
-n 不要为用户创建用户私人组
2.adduser:创建新用户
adduser 用户名
3.passwd:为用户设定口令,修改用户的口令,管理员还可以使用passwd命令锁定某个用户账号,该命令需要rootquanx
passwd 【选项】 用户名
#################
选项 作用
-l 管理员通过锁定口令来锁定已经命名的账户,即禁用该用户
-u 管理员解开账户锁定状态
-x 管理员设置最大密码使用时间
-n 管理员设置最小密码使用时间
-d 管理员删除用户的密码
-f 强迫用户下次登录时修改口令
4.usermod:修改用户账户的信息
usermod 【选项】 用户名
###############
选项 作用
-d 修改用户主目录
-c 修改用户的有效期限
-f 修改在密码过期后多少天即关闭该账号
-g 修改用户所属的组
-G 修改用户所属的附加组
-l 修改用户账号名称
-L 锁定用户密码,是密码无效
-s 修改用户登入后所使用的shell
-u 修改用户id
-U 解除密码锁定
5.userdel:删除用户。userdel命令可以删除已存在的用户账号,将/etc/passwd等文件系统中的该用户记录删除,必要时还会删除用户的主目录
userdel 【选项】 用户名
###########
选项 作用
-r 将用户的主目录一起删除
用户组管理命令:
1.groupadd:用指定的组名称来建立新的组账号
groupadd 【选项】 组名
############
选项 作用
-g 指定组id号,除非使用-o选项,否则该值必须唯一
-o 允许设置相同组id的群组,不必唯一
-r 建立系统组账号,即组id低于499
-f 强制执行,创建相同id的组
2.groupmod:用于更改群组属性
group 【选项】 组名
##################
选项 作用
-g 指定组id号
-o 与groupadd相同,重复使用群组识别码
-n 修改用户组名
3.groupdel:从系统上删除组。如果该组中仍包含某些用户,则必须在删除这些用户后才能删除组
groupdel 【选项】 组名
4.gpassed:用来管理组,该命令可以把用户加入组(附加组),为组设定密码
gpasswd 【选项】 组名
###############
选项 作用
-a 添加用户到群组
-d 从群组中删除用户
-A 指定管理员
-M 指定群组成员
-r 删除密码
-R 限制用户加入组,只有组中的成员才能用newgrp命令登录该组
su和sudo命令:
1.su:切换用户
su 【选项】 用户名
#######
选项 作用
-l 如同重新登录一样,大部分环境变量都是以切换后的用户为主。如果没有指定用户名,默认为root
-p 切换当前用户时,不切换用户工作环境,此为默认值
-c 以指定用户身份执行命令,执行命令后再变回原用户
2.sudo:super user do的缩写,允许系统管理员分配给普通用户一些合理的权利,让他们执行一些只有超级用户或其他特许用户才能完成的任务。
sudo 【选项】 命令
#################
选项 作用
-h 列出帮助信息
-V 列出版本信息
-l 列出当前用户可以执行的命令
-u 以指定用户的身份执行命令
-k 清除timestamp文件,下次使用sudo时需要再次输入密码
-b 在后台执行指定的命令
-p 更改询问密码的提示语
-e 不是执行命令,而是修改文件,相当于Sudoedit
13.硬盘和内存:
硬盘接口分为IDE,SATA,SCSI和光纤通道四种。
IDE接口硬盘多用于家用产品中,也部分应用于服务器;
SCSI接口的硬盘则主要应用于服务器市场;
而光纤通道只用在高端服务器上,价格相对较贵;
SATA是目前较流行的硬盘接口类型;
1.硬盘的命名:
在linux下ide设备是以hd命名的,一般主板上有两个ide接口,一共可以安装四个ide设备。主ide上的主从两个设备分别为hda和hdb,第二个ide口上的两个设备分别为hdc和hdd。SCSI接口设备是用sd命名的,第一个设备是sda,第二个是sdb,以此类推;
2.分区的命名:
分区是用设备名称加上数字命名的,如ide接口的hda1,hda2,SCSI接口的sda1,sda2;
3.主分区,扩展分区,逻辑分区:
一个硬盘最多可以分为4个主分区,因此硬盘可以被分为1~3个主分区加一个扩展分区,或者只有1~4个主分区。对于扩展分区,可以继续划分,分成若干个逻辑分区,也就是说,扩展分区只不过是逻辑分区的“容器”;逻辑分区的名称一定是从hda5开始,每增加一个分区,,分区名称的数字就加一,如hda6代表第二个逻辑分区;SCSI接口·的硬盘与此类似;
4.LVM进行逻辑卷的管理时,创建顺序是:
PV(物理卷)-》VG(卷组)-》LV(逻辑卷)
fsck:用来检查并修复损坏的文件系统
fsck dev/sdb1
5.查看硬盘信息:sudo fdisk -l
创建分区:sudo fdisk /dev/sdb
输入m显示所有的命令;
输入n创建分区
输入p创建主分区,主分区大小为2GB;
输入e创建扩展分区,
在输入n创建分区,输入l创建逻辑分区;
6.格式化:分区完成后,需要对分区格式化,创建文件系统才能正常使用。格式化分区的主要命令是mkfs,
mkfs -t 【文件系统格式】 设备名
#-t的参数用来指定文件系统格式,如ext3,nfs等,设备名称如/dev/sdb1,/dev/sdb2等;
7.在使用分区前,需要挂载该分区,挂载前,需要新建挂载点,
sudo mkdir /mnt/sdb1
sduo mount -t ext3 /dev/sdb1 /mnt/sdb1
不能挂载扩展分区
8.卸载:
umount:卸载磁盘:
umount 设备名或挂载点
### sudo umount /dev/sda1 #直接卸载设备
sudo umount /mnt/sda1 #通过卸载挂载点卸载设备
14.进程管理:
1。ps:查看进程:
ps 【options】 【--help】
########
参数 作用
-A 列出所有的进程
-w 显示加宽可以显示较多的信息
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的进程
au(x) 输出格式
2.top:监控进程
######常用的top命令
命令 功能说明
q 退出
h或? 帮助
s 设定两次更新之间的时间(以秒为单位)
space 更新显示只是
M 根据内存大小对进程·排序
P 根据cpu(处理器)占用对进程排序
u 显示特定用户的进程
k 杀死进程(给进程发送信号)
r 更改进程优先级
###############top命令常用选项
选项 作用
-d secs 在两次刷新之间延迟secs秒(默认为5秒)
-q 尽量经常刷新
-n,N 刷新N次后退出
-b 以“批处理方式”运行,好像是在哑终端上写入一样
3.kill:结束进程:
kill [-s 信号] [-p] [-a] 进程号。。。
kill -l [信号]
-s 指定需要送出的信号,既可以是信号名,也可以是对应数字
-p 指定kill命令只是显示进程的pid,并不真正发送出结束信号
-l 显示信号名称列表,这也可以在/usr/include/linux/signal.h文件中找到
4.nice:启动优先级命令
nice 【-n】 优先级范围
#说明:优先级范围为-20~19共40个等级,数值越小优先级越高;
若不带任何参数运行nice,则显示处当前的程序运行优先级
5.renice:改变正在运行的进程
-p pid 重新指定进程id为pid的进程的优先级
-g pgrp 重新指定进程群组(process group)的id为pgrp的进程(一个或多个)的优先级
-u user 重新指定进程所有者为user的进程的优先级
5.jobs:显示后台执行的任务
任务计划:
1.at:执行一次的命令
at 【选项】 【时间日期】
#######at命令选项
选项 作用
-f filename 运行由filename指定的文件
-m 完成时,用电子邮件通知用户,即便没有输出
-l 列出所提交的作业
-r 删除一个作业
2.batch:任意时间执行的命令
batch命令不在特定时间运行,而是等待系统不忙于别的任务时运行;
3.crontab:在指定时间执行
cron是系统主要的调度进程,可以在无须人工干预的情况下运行任务计划,由crontab命令来设定cron服务
crontab 【选项】 【用户名】
################
选项 作用
-l 显示用户crontab文件的内容
-i 删除用户的crontab文件前给出提示
-r 从crontab目录中删除用户的crontab文件
-e 编辑用户的crontab文件
15.编辑器及gcc编译器
linux下常用的三种编辑器:
vi,nano以及基于图形界面的gedit;
1.vi编辑器:
vi [文件名]
#如果不指定文件名,则新建一个未命名的文件
###################
vi命令 功能
vi filename 打开或新建文件,并将光标置于第一行首
vi + n filename 打开文件,并将光标置于第n行首
vi + filename 打开文件,并将光标置于最后一行首
vi + /str filename 打开文件,并将光标置于第一个与str匹配的字符串处
vi -r filename 在上次使用vi编辑时系统崩溃,恢复filename
vi filename1 ... filenamen 打开多个文件,依次编辑
nG n为数字,移动到这个文件的第n行
gg 移动到这个文件的第一行,相当于1G
n<enter> n为数字,光标向下移动n行
x,X x为向后删除一个字符,X为向前删除一个字符
:set nu 显示行号
:set nonu 取消行号
############33
vi有三种工作模式: 命令行模式;输入模式;末行模式
#输入模式:
命令 功能
i 从目前光标所在处插入
I 从目前所在行的第一个非空格字符处开始插入
a 从目前光标所在的下一个字符处开始插入
A 从光标所在行的最后一个字符处开始插入
o 从目前光标所在行的下一行处插入新的一行
O 从目前光标所在处的上一行插入新的一行
r 替换光标所在的那一个字符一次
R 替换光标所在行的文字,直到按下esc键为止
#末行模式:
命令 功能
:w 将编辑的数据保存到文件中
:w! 若文件属性为只读时,强制写入该文件
:q 退出vi
:q! 强制退出不保存文件
:wq 保存好退出vi
:w filename 将编辑的数据保存成另一个文件
/word 向下寻找一个名称为word的字符串
? word 向上寻找一个名称为word的字符串
n n为按键,代表重复前一个查找的操作
N N为按键,与n相反,为“反向”进行前一个查找操作
:n1,n2s/word1/word2/g 在第n1与n2行之间寻找word1字符串,并替换为word2
:1,$s/word1/word2/g 全文查找word1字符串,并将它替换为word2
模式切换:
(1)从命令行模式转到输入模式,可以按箭盘山那个的大写I,A,或小写i,a键
(2)从输入模式转到命令行模式按键盘上的esc键;
(3)从命令行模式转到末行模式按键盘上的:键
文本修改命令:
按键 功能
x 删除光标所在位置上的字符
dd 删除光标所在行
n + x 向后删除n个字符,包含光标所在位置
n + dd 向下删除n行内容,包含光标所在行
yy 将光标所在行复制
n + yy 将从光标所在行起向下的n行复制
n + yw 将从光标所在位置起向后的n个字符串(单词)复制
p 将复制(或最近一次删除)的字符串(或行)粘贴在当前光标所在位置
u 撤销上一步操作
. 重复上一步操作
2.gcc编译器:
程序的编译要经过预处理,编译,汇编以及连接四个阶段
vi test.c
#include<stdio.h>
void main()
{
printf("hello\n");
}
gcc test.c -o test
./test
1.预处理阶段:
gcc -E test.c -o test.i #预编译test.c程序,将预编译结果输出到test.i
2.编译阶段:
gcc -S test.i -o test.s #编译test.i文件,生成汇编语言文件test.s;
3.汇编:
gcc -c test.s -o test.o #将汇编语言文件test.s转换为目标程序test.o
4.连接:
gcc test.o -o test #将目标程序test.o连接成可执行文件tets
3,gdb调试器:(1)监视或修改程序中变量的值
(2)设置断点,以使程序在指定的代码行上暂停执行;
(3)单步执行或程序跟踪
gdb命令可以缩写,如list可以缩写为l,kill可以缩写为k,step可以缩写为s等;
gdb调试常用命令
命令 功能
break 在代码里设置断点
c 继续break后的执行
bt 反向跟踪,显示程序堆栈
file 装入想要调试的可执行文件
kill 终止正在调试的文件
list 列出产生执行文件的源代码的一部分
next 执行一行源代码,但不进入函数内部
step 执行一行源代码且进入函数内部
run 执行当前被调试的程序
quit 退出gdb
watch 监视一个变量的值,而不管他何时改变
set 设置变量的值
shell 在gdb内执行shell命令
print 显示变量或表达式的值
quit 终止gdb调试
make 不退出gdb的情况下,重新执行可执行文件
where 显示程序当前的调用栈
16.shell及其编程:
1.shell脚本:
(1)脚本执行方式:
直接执行
chmod + x ./文件 #使脚本具有执行权限
./文件 #执行脚本
sh / bash [选项] 脚本名
-n 不执行script,仅检查语法问题
-v 在执行script前,先将script的内容输出到屏幕上
-x 进入跟踪模式,显示所执行的每一条命令,并且在行首显示一个“+”号
source脚本名
(1)在当前bash环境下读取并执行脚本中的命令
(2)该脚本文件可以没有执行权限
2.shell脚本变量:
shell脚本变量可以分为系统变量,环境变量和用户自定义变量
可以用export内置命令将局部变量设置为全局变量
shell常用系统变量
按键 命令
$# 命令行参数的个数
$n 当前程序的第n个参数,n=1,2,3。。。9
$0 当前程序的名称
$? 执行上一个指令或函数的返回值
$* 以“参数1 参数2.。。。”形式保存所有参数
$@ 以“参数1 ” “参数2.。。。”形式保存所有参数
$$ 本程序的pid(进程id号)
$! 上一个命令的pid
$- 显示shell使用的当前选项,与set命令功能相同
bash有两级提示符:
第一级提示符的默认值是$符号
终端提示符中常用的特殊字符
特殊字符 说明
\! 显示该命令的历史编号
\# 显示shell激活后,当前命令的历史编号
\$ 显示一个$符号,如果当前用户是root,则显示#符号
\\ 显示一个反斜杠
\d 显示当前日期
\h 显示运行该shell的计算机主机名
\n 打印一个换行符,将导致提示符跨行
\s 显示正在运行的shell名称
\t 显示当前时间
\u 显示当前用户的用户名
\W 显示当前工作目录基准名
\w 显示当前工作目录
自定义变量:
shell编程中,使用变量无需事先说明,同事变量名的命名必须遵循如下原则:
(1)首个字符必须为字母(a~z,A~Z);
(2)中间不能有空格,可以使用下划线(_);
(3)不能使用标点符号;
(4)不能使用bash里的关键字(可以用help命令查看保留关键字)
自定义变量的使用:
1.变量值的引用于输出:
(1)引用变量时在变量名前面加上$符号;
(2)输出变量时用echo;
(3)如果变量恰巧包含在其他字符串中,为了区分变量和其他字符串,需要用{}将名括起来;
2.变量的赋值和替换:
(1)变量赋值的方式:
变量名 = 值
(2)重置就相当于赋给这个变量另外一个值;
(3)清空某一变量的值可以使用unset命令;
(4)变量可以有条件的替换,替换条件放在一对大括号{}中;
(1)当变量未定义或值为空时,返回值为value的内容,否则返回变量的值。
格式为${variable:-value};
(2)若变量未定义或值为空时,再返回value的值得同时value赋值给variable
;格式为${variable:=value};
(3)若变量已赋值,其值才用value替换,否则不替换;
格式为${variable:+ value};
数组:
bash支持一维数组(不支持多维数组),并且没有限定数组的大小;
1.数组的声明:
declare [+ / - ] [选项] variable
##################
+ / - :指定或关闭变量的属性;
a:定义后面名为variable的变量为数组(array)类型;
i:定义后面名为variable的变量为整数数字(integer)类型;
x:将后面的variable变成环境变量;
r:将变量设置成readonly类型;
f:将后面的variable定义为函数;
2.数组的赋值:
在shell中,用括号来表示数组,数组元素用“空格”符号分隔开;
(1)定义数组的一般形式:
array_name(value0 .... value6) //连续赋值
(2)还可以单独定义数组的各个分量,可以不适用连续的下标,而且下标的范围没有限制;
array_name[0] = value0
array_name[6] = value6
(3)对数组进行声明并赋值:
declare -a name=(a b c d e f) //数组下标从0开始
3.数组的读取:
${array_name[index]}
(1)读取数组中元素的语法形式为:echo ${array[index]}
(2)如果想要读取数组的全部元素,则要使用:echo ${array[@]},echo ${array[ * ]}
4.数组的长度:
(1)用${#数组名[@]}或${#数组名[*]}可以得到数组长度
格式为:legth = ${#array_name[@]} 或 legth = ${#array_name[*]}
例如:a=(1 2 3 4 5 )
echo ${#a[@]}
结果:5
echo ${#a[*]}
结果:5
(2)用${#数组名[n]}取得数组单个元素的长度
格式为:legth = ${#array_name[n]}
例如:
b = (two three)
echo ${#b[0]}
结果:3
echo ${#b[1]}
结果:5
5.shell的输入/输出:
1.输入命令:read
read variable1 variable2 ....
(1)shell用空格作为多个变量之间的分隔符;
(2)shell将输入文本域超长部分赋予给最后一个变量
例子:
read name sex age
lucy female 20
echo $name
lucy
echo $sex
female
echo $age
20
2.输出命令:echo
echo [选项] 字符串
###########
-n :输出后不自动换行
-e :启用”\“字符的转换
“\”字符的转换:
\a:发出警告声
\b:删除前一个字符
\c:最后不加上换行符号
\f:换行但光标扔停留在原来的位置
\n:换行且光标移至行首
\r:光标移至行首,但不换行
\t:插入tab
\v:与\f相同
\\插入\字符
\x插入十六进制数所代表的的ASCII字符
6.运算符和特殊字符:
特殊字符:
反引号(`):shell把反引号括起来的字符串解释为命令行后首先执行,并以他的标准输出结果取代整个反引号部分;
注释符(#):shell中以#开头的正文行表示注释行
7.shell语句:
1.test命令:用于检查某个条件是否成立,如果条件为真,则返回一个0值,如果表达式不为真,则返回一个大于0的值也可以将其称为假值
test expression 或 [expression]
1.整数运算符:
比较整数的关系运算符
##############
运算符 解释
-eq 两数值相等(equal)
-ne 两数值不等(not equal)
-gt n1大于n2(greater than)
-lt n1小于n2(less than)
-ge n1大于等于n2(greater than or equal)
-le n1小于等于n2(less than orequal)
2.字符串运算符:
字符串运算符:
##############
运算符 解释
-z string 判断字符串string是否为0,若string为空字符串,则为true
-n string 判断字符串string是否为非0,若string为空字符串,则为false
tr1 = str2 判断两个字符串str1和str2是否相等,若相等,则为true
str1 != str2 判断两个字符串str1和str2是否不相等,若不相等,则为true
3,。文件运算符::用于文件和目录属性比较时,test的运算符:
###########
运算符 解释
-e file 判断file文件名是否存在
-f file 判断file文件名是否存在且为文件
-d file 判断file文件名是否存在且为目录(directory)
-b file 判断file文件名是否存在且为一个block device
-c file 判断file文件名是否存在且为一个character device
-S file 判断file文件名是否存在且为一个socket
-P file 判断file文件名是否存在且为一个FIFO(pipe)
-L file 判断file文件名是否存在且为一个链接文件
-r file 判断file文件名是否存爱且具有可读权限
-w file 判断file文件名是否存在且有写权限
-x file 判断file文件名是否存在且具有可执行权限
-u file 判断file文件名是否存在且具有SUID属性
-g file 判断file文件名是否存在且具有SGID属性
-k file 判断file文件名是否存在且具有sticky bit属性
-s file 判断file文件名是否存在且为“非空白文件”
file1 -nt file2 判断file1是否比file2新(newer than)
file1 -ot file2 判断file1是否比file2旧(older than)
file1 -ef file2 判断file1与file2是否为同一文件
4.逻辑运算符:
运算符 解释
-a 逻辑与
-o 逻辑或
! 逻辑非
8.if语句:
结构分为:单分支if语句,双分支if语句,多分支if语句;
(1)单分支if语句:
if 条件测试命令
then
命令序列
fi
###################
if [ $a != $b]
说明:
中括号和条件判断式之间必须有空格;
if 和中括号之间有空格;
条件式与符号之间有空格;
$a + $b之间不需要空格;
(2)多分支if语句:
if 条件测试语句
then
命令序列1
elif 条件测试命令2
then
命令序列2
else
命令序列3
fi
9.case语句:
case ... esac与其他语言中的switch ... case语句类似,
case $变量名 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认执行的命令序列
esac
#注意:
(1)case行尾必须为单词in;
(2)每一个模式必须以右括号)结束;
(3)两个分号“;;”表示命令序列结束;
(4)匹配模式中可是使用方括号表示一个连续的范围,如[0~9];
(5)使用竖杠符号“|”表示或;
(6)最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后的命令序列;
10.while语句:
while [条件测试命令]
do
命令序列
done
脚本实例:输入整数n,计算1~n的和:
#!/bin/bash
read -p "please input a number:" n
sum=0
i=1
while [ $i -le $n ]
do
sum=$[ $sum + $i ] #等于号左右不能有空格,$与[]之间不能有空格
i=$[ $i + 1 ]
done
echo "the sum of '1 + 2 + 3 +...n ' is $sum"
~
~
10.until语句:当条件满足时退出循环,否则执行循环;
until [条件测试命令]
do
命令序列
done
##########
脚本实例:循环输出1~10的数字:
#!bin/bash
myvar=1
until [ $myvar -gt 10 ]
do
echo $myvar
myvar=$[ $myvar + 1 ]
done
11.for语句:
for 变量名 in 取值列表
do
命令序列
done
12.循环控制语句:
(1)break语句:用于for,while,until循环语句中,忽略循环体中任何其他语句和循环条件的限制,强行退出循环;
####脚本实例:计算1~10的和
#!/bin/bash
read -p "please input a number:" n
sum=0
i=1
for i in `seq 1 $n` #seq命令用于产生从某个数到另外一个数之间的所有整数。 `seq 1 $n`用反引号首先执行,并且以他的标准输出结果取代整个反引号部分
do
if [ $i -gt 10 ]
then
break
fi
sum=$[ $sum + $i ]
i=$[ $i + 1 ]
done
echo "the sum of '1 + 2 + 3 + ...n' is $sum"
(2)continue语句:用于for,while,until循环语句中,用于让脚本跳过其后面的语句,执行下一次循环;
脚本实例:输入整数n,计算1~n中的奇数和:
#!/bin/bash
read -p "please input a number:" n
sum=0
i=1
for i in `seq 1 $n`
do
if [ $[ $i % 2 ] -eq 0 ]
then
i=$[ $i + 1 ]
continue
fi
sum=$[ $sum + $i ]
i=$[ $i + 1 ]
done
echo "the sum of '1 + 3 + 5 +...n' is $sum"
综合应用:
脚本实例1:使用ping命令检测192.168.3.1~192.168.3.100共100部主机目前是否能与当前主机联通:
#!/bin/bash
network="192.168.3"
for sitenu in $(seq 1 100 )
do
ping -c 1 -w 1 ${network}.${sitenu} &> /dev/null \
&& result=0 || result=1
if [ "$result" == 0 ]
then
echo "Server ${network}.${sitenu} is UP."
else
echo "Server ${network}.${sitenu} is DOWN."
fi
done
###说明:(1)-c count 是数量,即发ping包的数量;
(2)-w timeout 指定超时间隔,单位为毫秒;
(3)&>,如2>&1,1是stdout,2是stderr,2>&就是stdout和stderr,导向到同一文件里。
(4)2>是标准错误重定向,1>是标准输出重定向,&>把标准错误及标准输中的信息都重定向,这里面是/dev/null,其他文件也可以;
(5)执行完输出的东西都放入/dev/null里,不管是出错了,还是正常ping通了,只要是输出到屏幕上的信息都放入/dev/null里;
脚本实例2:提示输入某个目录文件名,然后输出此目录内所有文件的权限,若可读输出readable,若可写,则输出writeable;若可执行,则输出executable;
#!/bin/bash
read -p "please input a directory:" dir
if [ "$dir" == "" -o ! -d "$dir" ]
then
echo "The $dir is not exist in your system"
exit 1
fi
filelist=$( ls $dir )
for filename in $filelist
do
perm=""
test -r "$dir/$filename" && perm="$perm readable"
test -w "$dir/$filename" && perm="$perm writeable"
test -x "$dir/$filename" && perm="$perm executable"
echo "The file $dir/$filename's permission is $perm"
done
###说明:if [ "$dir" == "" ] || [ ! -d "$dir" ],[ ! -d "$dir" ] 是条件的判断,判断测试目录是否存在,如不存在则输出错误信息并结束;若目录存在,脚本将执行ls命令并将结果存储在filelist变量中,并逐个对文件名进行权限判断,输出结果。所有的test指令都可以不在test指令下,而是在[]中进行。
17.服务器的配置:
1.查看网络配置
ifconfig:查看和更改网络接口的地址和参数;
ifconfig -interface [options] address
说明:(1)interface是指定的网络接口名,如eth0和eth1;
(2)options指代如下:
up:激活指定的网络接口卡;
down:关闭指定的网络接口;
broadcast address:设置接口的广播地址;
pointopoint:启用点对点方式;
netmask address:设置接口的子网掩码;
(3)address是设置指定接口设备的IP地址;
例子:显示当前系统中eth0接口的参数:
ifconfig eth0
2.route:查看主机路由表;
3.hostname:查看系统和修改主机名;
sudo hostname 主机名 #修改主机名
4.netstat:查看网络连接状态,显示网络连接,路由表和网络接口信息;
netstat - [选项]
################
-s:显示各个协议的网络统计数据;
-c:显示连续列出的网络状态;
-i:显示网络接口信息表单;
-r:显示关于路由表的信息,类似于route命令;
-a:显示所有的有效连接信息-n显示所有已建立的有效连接;
-t:显示tcp协议的连接;
-u:显示udp协议的连接;
-p:显示正在使用的进程id;
####例子:查看当前系统所有的监听端口:
netstat -natu
18.配置samba服务器:
在linux下进行资源共享,samba的主要功能有:提供windows风格的文件和打印机共享,在windows中解析netbios名字,提供samba客户功能,提供一个命令行工具;
1.sudo apt-get install samba cifs-utils #安装samba服务器;
2.配置samba服务器:
(1)建立samba共享文件夹:为samba服务器创建共享文件夹/home/malimei/share,且该文件夹的权限为对所有用户可读,可写,可运行;
mkdir /home/malimei/share
chmod 777 /home/malimei/share
ls -l /home/malimei
(2)创建一个samba专用账户:
samba -a 新建用户 #注意:创建的samba用户必须在系统用户中存在,否则samba找不到系统用户,则创建失败
-d 冻结用户,就是这个用户不能再登陆了;
-e 恢复用户,解冻用户,让冻结的用户可以在使用;
-n 把用户的密码设置为空;
例子:为系统创建samba用户,用户名为samba:
sudo useradd samba
sudo passwd samba
sudo smbpasswd -a samba
(3)配置samba服务器:
sudo apt-get install system-config-samba #安装linux samba图形管理界面
sudo system-config-smaba #启动samba图形管理界面
file -> Add Share
Create Samba Share对话框处理
选择共享用户,选择在前面新建的专用账户samba,单击ok完成配置;
(4)测试samba服务:
两种方式:(1)使用testparm命令对前面的配置进行测试,检查samba服务前期的配置文件/etc/samba/smb.conf
(2)显示 cat /etc/samba/smb.conf文件内容
(5)启动与关闭samba服务器:
(1)重启samba服务: sudo /etc/init.d/smbd restart
(2)关闭samba服务器: sudo /etc/init.d/smbd stop
(3)启动samba服务器: sudo /etc/init.d/smbd start
(4)显示samba服务状态: sudo /etc/init.d/smbd status
(6)登录samba服务器:
新建example.c文件,将example.c复制到/home/malimei/share文件夹下,使用windows7作为客户端,访问samba服务器:单击客户端桌面的“开始”->“运行”命令,输入ip地址:\\192.168.30.129,登录后,可以看到共享文件夹share。双击文件夹share,在出现的对话框中输入用户名和密码,单击确定,打开共享文件夹可看到共享文件example.c。
详细:
https://i-blog.csdnimg.cn/blog_migrate/52c669a8c6bd4c2e31871902dae92250.png