linux层次接口依次从下往上
系统程序-》kernel内核》运行程序》shell (人际交互 外壳)》应用
默认文件系统类型
EXT3 EXT4 ubunto 采用EXT4 SWAP类型的文件系统只在linux交换分区中被使用
linux系统至少要两个分区:根分区(EXT4)和内存交换分区(swap类型)
linux文件属性:
文件名只能字母 、数字。下划线、圆点等组成
文件类型:
普通文件 ‘ - ’代表普通文件
目录文件 ‘d’
链接文件 ‘l’ :一类特殊的文件
块设备文件 b
设备文件 c
管道文件 p
隐藏文件 . eg .progile .bashrc 等
linux的根目录结构 / root管理员用户的家 ~ 用户家目录
linux安装
磁盘分区意义:提升查询性能 数据安全保护
磁盘分区工具 :fdisk
磁盘分区的种类
主分区 /dev/sda1 sda2 一个磁盘最多只有一个扩展分区 扩展分区和主分区加起来最多为4 扩展分区里面划分逻辑分区,没有数量限制
扩展分区 扩展分区和主分区加起来最多为4 扩展分区里面划分逻辑分区,没有数量限制
逻辑分区 扩展分区里面划分逻辑分区,没有数量限制
系统安装: 设置bios启动项的优先顺序 安装的时候最好可以连接互联网 linux初始化用户登录,网络及时间配置
下载地址: 镜像文件下载 和虚拟机先下载
虚拟机下载地址:http://www.vmware.com/cn 选择免费产品 player下载
镜像文件下载 http://www.ubunto.com/download/desktop
1、命令格式 命令帮助
linux命令组成部分
命令字
命令选项参数
命令的操作参数
命令行格式
命令子 +命令选项 +命令参数
ls -l etc 后面两个可以省略
命令帮助 man man+命令 如:man ls 查看ls的帮助文档 或者命令+ --help 如 pwd --help help主要查看系统内部命令的帮助信息ls是外部命令
ls /home
ls -l /home
type pwd 用type命令可以查看此命令是内部命令还是外部命令
2、linux的目录操作:
目录的路径概念
分绝对路径和相对路径:非以根目录(/)开始的的路径都是相对路径
目录的显示和切换:显示ls ls-l 列式文件的目录的冗长信息,ls -d 列式当前目录条目的自身信息而不是目录下的其他文件信息。
cd切换 cd ~ 切换到家目录 /home/huang
显示当前目录 pwd
目录的新增: mkdir -p 用于递归创建多个目录
mkdir aa bb cc mkdir - p dd/ee dd ee都创建出来
目录的拷贝 cp,支持拷贝同时改名 -a 全部拷贝 -f 强制拷贝有则覆盖
cp myfile etc/hty/ 拷贝针对的是文件 如果是个目录会略过 使用cp -a 拷贝目录和文件 拷贝的时候改名 cp myexamp bb/youexample
目录的删除: rmdir 删除一个和多个目录 -p 用于递归删除多层空目录 rm -rf 用于删除非空目录 以及强制删除
rmdir cc 如果CC中有东西则或报错 rmdir -p dd/ee 删除的都是非空目录 rmdir -rf dd 删除dd及里面的所有文件 最好使用rm -ri 带提示的
目录的移动: mv 目录的移动、改名、移动的同时改名
移动比较特殊, mv a b 将a改名为b mv c b/c 移动 mv c b/e 移动同时改名
3、文件操作
文件的显示和过滤
cat 默认 输出输入的东西 cat test.c 查看文件内容存在缓冲区里面 cat -t tes.c 显示里面的特殊字符
more 分屏显示 空格往下查看
less 上下键上下滚屏查看
head 默认开头前10行 head -n 指定开头多少行信息
tail tail -n 尾部查看 tail -f 显示尾部最新的信息
过滤
grep -v 反向筛选出不含指定关键词的行 : grep - v iotexk myexamp.desktop 筛选出myexamp.desktop中不含iotexk的行
grep -i 将以忽略大小的方式来赛选 grep - i UBUNTU myexamp.desktop
文件的新增和拷贝
touch aa.txt 文件存在则不创建 存在的话更新文件的时间 cp -a 文件目录都可以拷贝 cp -i 可以提示拷时是否覆盖
文件的删除
rm -i 提示 rm -r 递归 rm- f强制
文件的查找
find -name / “cc” 从根目录查找所有名为cc的目录的路径
文本文件的编辑 vi/vim
三种状态模式
命令模式 vi +文件名 默认进入是命令模式 通过命令模式i 在当前光标处进入插入状态 或a在当前光标后进入插入状态 进入可编辑模式
可编辑模式 在这个模式按住esc 进入命令模式
末行模式 :q 退出 :wq 保存退出 文件保存 打开 退出 一种非编辑的操作
vim的命令编辑操作
复制 粘贴 一行
在命令模式下(先按esc)在光标处按 y 光标移动到你想粘贴的位置按下p进行粘贴
复制 粘贴 多行
在命令模式下(先按esc)在光标处按 ny 光标移动到你想粘贴的位置按下p进行粘贴
删除
在命令模式下(先按esc)在光标处按 dd 删除多行 按ndd
增行
在命令模式下(先按esc)在光标处按 o
vim的查找和行替换和全本替换·
在命令模式下(先按esc)输入/+待查找的字符,按n切换到下一个匹配串
替换光标当前行的字符 比如io 替换成IO 在命令模式下(先按esc) :s/io/IO/gc
替换全文 %s/io/IO/gc
显示行号 命令模式下输入 :set nonu 显示 :set no
编辑多个文件 vi aa.c bb.c cc.c :args 查看有哪些文件 :next 切换 :prev 上一个文件 :first 第一个文件 :last最后一个文件
文件的压缩解压
文件归档 tar 默认仅仅打包归档,不进行压缩 -c 创建文档归档 -x 释放归档文件包 -t查看归档文件包 -v显示归档操作过程信息 -f指定归档包文件名
将当前目录下的所有.c .h 文件进行归档,不压缩
tar cvf yasuobao.tar *.c *.h
释放压缩包到aa目录下 指定具体目录加大C 不指定加载当前目录
tar xvf yasuobao.tar -C aa
文件打包压缩命令 tar -z 文件包以*.tgz格式压缩 -j文件包以bz2格式压缩
tar czvf yasuobao.tgz *.h *.c 打包的同时压缩 tzvf查看 xzvf 释放解包
tar cjvf yasuobao.bz2 *.h *.c tjvf xjvf
其他文件压缩命令 zip
压缩文件包为*.zip格式 兼容多平台,压缩率不高
zip yasuobao.zip *.c *.h 压缩当前目的额所有.c .h文件
文件解压缩命令 unzip 解压*.zip的压缩包
unzip yasuobao.zip 不等指定目录
文件压缩命令 7z 跨平台的 压缩比最高的压缩软件 包括*.rar,*.iso 在内的多种压缩文件格式的解压支持
7z a yasuo.7z *.c *.h
7z l yasuo.7z 显示压缩包里面的文件
7z e yasuo.7z 只能解压到当前目录
文件内容的全屏显示命令:ar
-r 添加目标代码文件到静态库文件中
-x提取目标文件从静态库中
-t 查看静态库文件中的目标代码列表
-v 显示更细致的繁冗信息
-d 删除目标代码文件从静态库中
ar tv libsunpp.a 查看静态库由哪些文件构成
ar xv libsunpp.a 提取里面的.o文件
ar rv libsunpp.a my.o x.o 将.o文件合成.a文件
设备挂载 和卸载 挂载就是提供一个访问的方式而已。
挂载目录类似于windows中的盘符 /mnt/usb linux提供的目录而不是盘符
mount.ntfs ntfsU盘挂载
设备卸载 linux中设备用设备文件来表示
光盘设备文件挂载
mount -t iso9660 /dev/cdrom /mnt (iso是格式)cdrom这个设备挂载到mnt目录下
光盘iso镜像文件挂载
mount -o loop -t iso9660 mycd.iso /media (iso是文件而不是设备文件不能直接挂载,需要借助loop虚拟光驱,将ios文件刻录在loop上,然后进行挂载)挂载目录自选,
u盘设备挂载
FAT32 mount -t vfat /dev/sdb1 /mnt 不能挂载到根目录
NTFS mouunt.ntfs /dev/sdb1 /mnt
设备卸载
两种方式 1、 umount /mnt 卸载目录 2、卸载设备 umount /dev/sdb1
软件包升级
软件包在线升级 apt -get download vim 只下载不安装 apt - get install vim 下载安装好 apt -get upgrade vim 升级 apt -get updata 跟新软件包列表
软件包离线安装 dpkg -i idnent*.deb 软件包安装
进程管理
进程查看 ps 默认线束shell进程及ps进程本省 -a 显示所关联终端的所有进程信息 -u 显示所有有效用户的进程关系 -x 显示没有控制终端的进程信息
ps -aux ps -ef
进程树查看
pstree -p 显示进程号的方式来显示进程树
进程动态查看
top 默认显示当前占用cpu资源最多的所有进程信息 eg: top -p +进程号
进程终止操作
进程 终止 正常退出
进程 中止 中断退出 kill 确实发送terminal信号 -l 产看所有系统支持的信号 -9 via哦是发送中止该进程的信号 kill -9 1770
killall +进程名
linux系统管理
清屏、重启和关机操作 clear sudo reboot 重启 shutdown now 立刻关机
系统内存硬件信息查看 cat /proc/meminfo 查看该文件
操作系统信息查看 uname -a
主机名查看 hostname
计划任务 按照某个时间点列行做的任务
计划任务查看与设置命令 crontab m(分) h(几点) dom mon dow(周几) cmd(命令)
步骤: 先执行contab -e 创建任务 按照 上面 /*5 * * * 1 tar -zcf /var/backus/home.tgz /home/*.* 每周1早上五点执行备份将其压缩打包 /*代表每隔五分钟,没有/*代表每个小时第五分钟
在执行 重启cron服务 sudo service cron restart
contab -ri 删除当前用户端下的计划任务
内存状态查看命令:free -s 5 每隔五秒显示一次最新的内存信息
整个磁盘文件系统空间使用查看命令 df df -h
具体某个文件或目录占用查看命令 :du
du -sh /home/iotek du -sh /home/mytest/aa.txt
文件磁盘分区查看 sudo fdisk -l
网络连接查看:ping
检测网路的联通情况
评测传输网速的质量
ping 127.0.0.1 不会停
ping -c 6 127. 0 .0 .1 ping6次后自动停止
网络地主查看 ifconfig
设置网络接口地址等网络相关参数
eg: ifconfig -a eth0
sudo ifconfig eth1 193.224.434.1 netmask 255.255.255.0
域名解析查询 nslookup www.baidu.com 反向解析 nslookup 8.8.8.8 谷歌
路由信息查看
路由信息查看及设置命令
route
查看主机当前的路由设置信息
支持设置主机的静态路由信息
缺省检测和显示路由信息
eg: route
sudo route add default ge 192.168.248.3 route -n(增加一条路由)
sudo route del default ge 192.168.248.3 route -n (删除一条路由)
网络统计信息 netstat
netstat -a 显示监听信息
netstat -t tcp协议的监听信息
用户管理:
用户添加删除 useradd -m bencai 创建用户的同时创建该用户的家目录 userdel -r bencai 删除用户的同时删除包含用户家目录的所有文档 sudo passwd bencai 为用户指定密码
用户查看 whoami 查看当前用户 查看所有登录的用户 who 查看用户id命令 id越小越早创立 id -u bencai查看本菜用户的id id -g bencai 查询bencai的用户组id
用户切换 su + 用户名 然后输入密码 切换到root用户的推荐方法sudo -i 密码为第一安装用户的密码 sudo -u bencai ls 不切换用户,执行本菜可以做的事
将用户添加到sudo组 sudo gpasswd -a user01 sudo 这样新用户具有sudo权限
用户账户锁定 usermod -L bencai usermos -U bencai 解锁
用户账户配置文件 /etc/passwd less /etc/passwd 查看 less /etc/shadow 密码文件 采用密文
linux用户组管理
用户组添加与删除 groupadd 默认给当亲违背暂用的最小gid给新用户组 groupadd -g user01 1002 用户组删除 groupdel uerser01
用户组查看 groups 查看当前用户所在的用户组 groups bencai 查看指定用户的用户组
用户组成员更改 gpasswd -a iotek bencai 将ioteck用户加入bencai组 删除gpasswd -d ioteck bencai
改变有效登录群组 newgrp bencai 将有效群组切换到benccai小组
用户组的配置文件 /etc/group etc/gshadow
文件权限属性
文件权限设置
-rw-r--r-- 1 root(所属用户) root (所属组) 31314 dec dec17 10:23 install.log root用户可对这个文件读写 组里面的用户可以读 其他的用户对该文件没有权限
-代表普通文件 后面9位是文件权限描述 第一段文件所有者u 第二段 文件所属组g 第三段 其他用户 rwx421 可读可写可执行
文件权限设置 chmod a+x
chmod u+x install.log
chmod g-x isntall.log
chmod o =r install.log
chmod a+x install.log --代表 u g o 都加上可执行权限
数字方式设置
chmod 644 install.log r = 4 w = 2 x = 1
chmod 755 install.log
文件属主设置和属组设置
属主 chown 默认设置当前用户的所有者用户
eg: chown -R testdir 用于递归设置目录中所有文件的属主 chwon becai newdir 将newdir目录的属主改成本菜 newdir中的文件不会变更 使用chwon -R bencai newdir 目录和目录下的文件都会变更属主为bencai
文件属组设置命令 chgrp
默认当前用户为用户组 和上面一样
chgrp -R testdir 递归
ftp服务的启停配置
ftp服务的启动 service vsftpd start
ftp服务的停止 service vsftpd stop
ftp服务的重启 service vsftpd restart
ftp服务的配置文件 /etc/vsftpd.conf
ssh服务的启动 service ssh start
ssh服务的停止 service ssh stop
ssh服务的重启 service ssh restart
shell的环境和功能
shell的概述 :shell是操作系统和用户操作的媒介 bash /bin/bash
命令补全 按tab健 自动推导 上下键 逐条跳跃之前的命令历史
命令别名 原命令的昵称 命令别名在命令行提交时自动被字符替换
命令别名的查看 alias
命令别名的设置 alias myls=’ls -ld‘ 在命令行下面输入myls 系统自动将myls替换成ls -ld
通配符的概念: * ls -l test* *代表任意多个 ?ls -l test?.? 一个?对应一个字符 [] ls -l test[0-9].txt 0到9中的一个 范围中的一个
命令后台发送与作业控制: 指命令脱离命令行交互程序的控制而独立运行
eg: 一个执行命令比较长的命令不让它占用控制台 在原有命令的末端使用“&”符号即可将该命令发送至后台运行 gedit &
命令作业控制的概念: 命令作业控制是系统对于命令作业的某种任务安排
使用jobs命令可以查看当前的后台作业任务
使用bg命令可以将当前的任务命令作业切换到后台
使用fg命令可以将最近的一个后台作业切换回前台 fg %+作业号 或 fg + 作业名 fg gedit 记事本
shell变量:
shell变量的概念 是shell程序在内存中储存数据信息的容器 COLOR=red 引用 echo $COLOR
自定义变量 Day = friday eg echo "today is $Day" / echo "today is ${Day}"
环境变量 环境变零的使用方法和自定义变量一致,变量命名被约束
env查看系统中的环境变量 export导出到子shell中具有遗传性
用户的环境变量保存在配置文件中 ~/.bashrc中或~/.profile中 修改环境变量的值就是修改文件中环境变量的值执行 . ~/.bashrcs生效 改变用户的环境变量值只对当前用户生效
PATH 储存系统命令的所在路径,通常为绝对路径
PATH变量的使用 PATH = home/ioteck/bin:$PATH 往PATH中增加自己路径 先引用在写入
其他环境变量
PS1存储命令行提示符 echo $PS1 cmd光标前面的提示符 PS1 = '\u@:\$' 这样修只对当前shell生效,是子shell 换个用户则无法生效
PS2储存命令行的换行符 echo $PS2 > 用作一个命令没输完 手动换行
预定义变量 无需设置,只能引用 用来存储shell程序运行过程中的状态信息,由shell本身提供 $$存储进程号 $0 进程名 $?存储当前命令的返回信息成功还是失败 $!存储最近一个后台进程的进程号信息
位置变量
位置变量是由shell程序提供的变量。可用来引用传递给程序的参数
位置变量通过程序参数在传递给程序时的位置顺序来引用
位置变量的使用
位置变量$1 , $2,....$9
位置变量的切取命令shift
eg vim test.txt 里面插入记录 ls -ld $1 保存退出后执行 .test.txt /home 这里/home相当于传递给$1 结果显示ls -ld /home
eg vim test.txt 里面插入记录 ls -ld $1 ls -ld $2 保存退出后执行 .test.txt /home /var 这里/home相当于传递给$1 /var传递给$2 结果显示ls -ld /home和ls -ld /var的结果
管道与重定向
标准输入文件:stdin
标准输入的设备文件未/dev/stdin
对应的文件描述符未0
标准输出文件 stdout
标准输出的设备文件未/dev/stdout
对应的文件描述符为1
标准错误文件:stderr
标准错误的设备文件为/dev/stderrdui
对应的文件描述符未2
管道 提供命令间(进程间)信息传递的设备(进程间通信)
管道的信息传递是由前往后单向的传递
管道仅将前一命令程序的标准输出传递给后一命令
shell中使用管道符| 来进行管道操作
eg ps aux | grep "bash" 将ps aux输出作为 grep的输入
管道的级联
eg ps aux | grep "bash"| grep -v "grep"
重定向
标准输出重定向
eg:ls -l test.* >out.txt 覆盖重定向
eg:ls -l test.*>>output.txt 追加重定向
标准出错重定向
eg ls -l test.* 2>out.txt 2 标准错误的设备文件的描述符
eg ls -l test.* 2>>out.txt
输入重定向的使用
eg cat <out.txt
标准输入重定向之here documnent技术
eg: cat <<EOF .....EOF
合并输出重定向的使用
指 合并标准输出和标准错误的信息输出
eg:ls -l test.* sjfefe &>output.txt
管道重定向的应用
管道过滤信息的重定向输出
ls -l |grep bencai >out.txt
利用重定向拷贝文件
here document使用
cat>output3.txt<<eof
>hello huangtianyi
>hello world
hello bencai
>eof
这样可以不用vim 输出到文件
shell脚本
脚本的额概述
以解释方式执行的程序语句集合体--以解释方式而不是编译方式
脚本的控制结构
顺序结构 分支结构 循环结构
脚本的使用 两种方式执行 1、.test.sh 2、./test.sh 第一种是当前的shell执行作为测试用 第二种是真实执行 写完脚本要加上可执行权限
分支结构:&& || 符号级联 if then elif then else fi switch case esac
建立脚本文件test.sh:判断文件是否可以执行
if[ -x $1]
then
echo "ok"
else
echo "fail"
fi 调用传入位置变量 ./test.sh test2.sh
case语句
value = $1
case $value in
a)
echo "A";;
b)
echo "B";;
*)
echo "*"
esac
循环结构
while
count = 1 count>=5时退出
while[ -x $1]
do
[$count -ge 5] && break
echo "$1 has exutable"
let count++
done
until 和while相反 条件不为真才执行
until[ - x $1]
do
echo "$1 has not ecutable"
done
for-in in 后面有几项,循环就执行几次
count=1
for var in aa bb cc dd
do
echo " ${var}loop $count"
let count++
done
脚本程序需求
从给定的自然数开始,循环输出10个数,其皆为3的倍数
脚本实现要求
程序设计中包含输入的友好提示对于输入合法性的验证判断
#!/bin/bash
read -p "请输入一个自然数:" Input --用read -p 将控制台输入的内容读取到Input里面
[$Input -gt 0] && echo"您输入的是自然数" || exit
Num = $Input
count = 0
while[$count -lt 10]
do
let Num2 = Num%3
if[Num2 -eq 0]
then
echo "$Num"
let count++
fi
Num++
done
shell函数
表达形态
1、getcount(){echo "hello iotek"}
2、function getcount{echo "hello iotek"}
shell函数的使用
使用的时候只需书写函数名即可
eg hello
hello
{
echo "hello world"
}
function nihao
{
echo "nihao"
}
hello --调用 不需要主函数
nihao
shell函数的参数传递 依靠位置变量传递
function nihao()
{
echo "$1 你好"
}
--调用 nihao 黄添翼
shell变量的替换
默认替换 ${Var:-value}
若Var变量未被设置,则临时设值为value,就是说Var被引用的时候还没被赋值的话就由value当默认值
强制替换${Var:+value}
若Var变量已被设置,则临时值设置为value 没被设置则不生效和上面相反
缺省赋值替换 ${Var:=value}
若Var变量未被设置,则永久设置为value 若被设置了值,不会替换
缺省错误替换${var:?string}
若Var变量未被设置,则错误输出为string 不会赋值非var 只是错误提示