Linux
Linux可以做什么
-
个人桌面系统
- 管理桌面
- 听音乐,看视频
- 使用文字处理,电子表格等文件
- 使用网页,发送电子邮件
- 网络聊天
- 玩游戏
-
系统服务器
- 连接Internrt网络
- 使用Linux作为防火墙,路由器和DHCP服务器来保护和管理专用网络
- 运行WEB服务器(Apache,MySQL和PHP)
- 运行邮件服务器(使用exim或其他邮件传输代理)
- 运行邮件服务器(使用CUPS)
- 运行文件服务器(使用FTP,samba,NFS)
嵌入式系统
- 嵌入式系统是以应用为中心,以计算机为基础,并且硬件可裁剪,适用于对功能,可靠性,成本,体积,功耗有严格要求的专用计算机系统。
Linux的特性
- 自由,免费,开源
- 无需不停的重新引导
- 在不干扰其他服务的情况下启动/停止服务
- 软件的可移植性
- 可下载的应用程序--绿色软件
- 没有隐藏在代码或寄存器中的设置
- 成熟的桌面系统:GNOME,KDE,X Windows
- 不受病毒的困扰
流行的Linux版本
- Red Hat
- Fedora Core
- SUSE
- Ubuntu
Linux的市场
- 汽车市场
- 办公Office
- 医疗器械
- 飞机航空
- 智能家居
- 手机
- 路由器
- 办公设备
Linux下的操作系统组件
-
Linux内核
- 内核是Linux系统的最底层,提供了系统的核心功能,并允许进程以一种有序的方式访问硬件
Shell
文件系统
实用程序
- LINUX启动过程
- 设备加电————BIOS自检————Grub/Lilo引导启动————装载Linux内核————系统初始化————用户登录
- 系统初始化:内核的初始化将启动系统进程和脚本,INIT进程是系统开始的第一个工作,他是其他所有进程的父进程,并一直处于运行状态。使用top命令查看进程,可以发现init进程的id号永远是第一个。
- Linux文件系统类型
- EXT2和EXT3都是操作系统默认使用的文件系统类型,EXT3属于日志文件系统,是EXT2文件系统的升级版,EXT4是EXT3的升级版
- swap类型的文件系统在Linux系统的安装系统。
- Linux的目录结构
- Linux目录使用树形目录结构,在整个系统中只存在一个根目录
- /bin:存储用户命令,/usr/bin/存放用户命令。
- /boot:Linux的内核及引导系统程序所需要的文件
- /home:如果建立一个用户“XX”,那么在home下会出现一个对应的/home/XX路径,作为用户的主目录。
- /root:根用户(超级用户的主目录)
- /dev:储存设备文件
- /mnt:系统引导后被挂载的文件系统的挂载点
- /usr:系统中占用硬盘空间最大的目录,很多程序与文件都存放在该目录下
- /tmp:用户程序的临时目录。
- /:根目录
- /etc:系统相关配置的文件
- /lib:共享库目录
Linux操作:
-
打开终端
- ctrl+alt+t
- 点击左上角的搜索按钮,输入terminal,出来一个终端选项
注意:点击左边图表终端,将终端锁定在桌面
-
关闭终端
- exit/logout
-
关机
- 右上角
- 在终端下怎么关机
- sudo shutdown -h now
- sudo init 0
-
怎么获取超级管理员权限
- su+一个数:
- 如果认证失败
- sudo passwd进行修改超级用户管理员权限的密码
- 从超级用户--普通用户exit
- su+一个数:
-
修改登录/用户密码
- sudo passwd XXX用户
-
shell基本命令
- pwd:显示当前工作路径
- ls:list显示当前工作路径下的目录或文件
- ls -l:显示当前目录下所有文件并且告知文件的相关属性。-l 加文件名。
- ls -a:显示当前目录下所有文件(包括隐藏文件:点开头)
- ls -al:上两种操作集合。
- ls 具体路径:显示具体目录下的子文件或者子目录。
- 清屏
- ctrl + l
- clear
- 切换目录:
- cd:change directory:改变当前的工作路径
- cd +具体路径:切换到具体路径下面
- cd :切换到用户主目录下面
- cd .:代表当前路径
- cd ..:代表当前目录的上级目录
- cd :代表用户主目录/home/xx用户
- cd -:代表回到上一次操作的目录
- cd Tab:补全当前系统下已有的文件名,补全文件名
-
新建目录
- mkdir:makedirectory:创建目录
- mkdir+文件名:在当前工作路径下进行创建目录文件
- mkdir -p 1010/1009:创建1010的同时创建1009(递归创建)
- 删除目录:
- rmdir:remove directory:删除目录。
- rmdir+目录名:删除空目录,不能删除非空目录。
- rm -r +目录名:删除非空目录
- touch:创建普通文件
- touch+文件名:在当前目录下创建普通文件
- 删除文件:
- rm+文件名:在当前目录下删除对应的文件
- 拷贝文件
- cp 要拷贝的文件 拷贝去的目录
- 移动或是重命名
- mv:move移动文件
- mv 要移动的文件 目标文件夹
- mv 要修改的文件 新的文件名
- 查看文件却不打开文件
- cat 文件名
- 文件权限的修改:
- //- rw- r-- r--
- 第一个字母决定文件是什么文件
- -代表是普通文件
- d代表是目录文件
- 第2到第4个字母,决定文件属主用户对齐文件执行的权限rwx;r:可读,w:可写,x:可执行。
- 第5到第七个,决定于属主用户同组的其他用户执行的权限
- 最后几个决定与他不同组的其他用户执行的权限。
-chmod的使用- Chmod 744 1.sh
- chmod u+x 1.sh u+x1.sh——————u:user代表属主用户,g:group代表同组其他用户,o:other不同组的用户。a:代表所有用户。‘+’代表加某个权限,‘-’代表减某个权限。
- chmod u+x,g+w,o+x 1.sh
-
shell操作
-
安装包
- sudo apt-get install
-
vi
vi是一个文本编辑器
vim是vi的升级版
sudo apt-get install vim
-
vim的使用
- 打开文件 vim 1.sh
- 插入数据 按下i键,等待左下角出现Insert,开始写数据
- 保存:按下ESC进入非可编辑模式输入w:保存,q退出,q!不保存退出,wq!忽略前面内容,wq:保存退出。
- vim的快捷键:
- dd删除光标所在的一行
- u撤销上一次的操作
- yy复制一行p粘贴刚才那一行
- 数字+yy或dd复制删除这么多行
- shift+v进入可视化模式上下键选择多行进行删除或复制
-
gedit
- gedit 是一个文本编辑器
-
vim 的基本配置
-
cd/etc/vim
sudo vim vimc
set mouse=a /设置鼠标选中
set nu/行号
syntax on /语法高亮
set autoindent/自动缩进
set tabstop=4/设置tab宽度
-
-
shell脚本执行
- chmod +x 1.sh
./1.sh
- sh 1.sh
注意:最好用第一种
-
:代表注释单行
- shell脚本是一种弱类型语言,不需要指定数据类型。
- 如果shell脚本某一行出错,不会影响我整个程序的运行。
-
标识符的硬性规范:
- 不能由数字开头
- 只能由字母,下划线,数字构成
- 不能与shell脚本的关键字相同,如 if,printf,echo,case等。
- 建议:
- 不准用拼音,多查字典
- 建议使用驼峰命名规范numOfStudent
- 见名知义
-
变量
- 变量的定义
变量=值
- 如果变量没有定义,那么这个变量默认为空
注意点:
1 变量一定以出来就要给他一个值,否则会语法错误。
2 =左右两边不能由空格
3 如果右边是字符串,用""栝起来-
变量的使用
以$符号开头
变量的删除
value=9 echo "$value" unset value echo "$value"
- unset:删除变量,不要加$ - 删除之后,默认为空
- 只读变量
- readonly value=7表明这个变量不能再被赋值
- readonly的变量修饰的变量不能被unset删除。
-
echo简单用法
value="hello" echo "$value",'$value',$value echo "{$value}1"可输出hello1
- echo:表示输出命令,输出echo后面的内容,会自动换行。
- echo后面加"",'',不加
- 'value',输出$value
- 不加,降低程序的可读性
- 加""能避免上面两个缺点
-
shell转义字符
- \n:代表换行
- \t:相当于敲了tab的宽度
- \c:关闭echo命令本身换行的功能
- 如果是./XX.sh运行shell脚本,必须开启转义
value="hello" echo "$value\n"是不会换行的 开启转义字符对特殊字符的处理 echo -e "${value}\n"
- 如果是sh XX。sh运行shell脚本,必须开启转义
value="hello" echo -e "${value}\n"
字符串相关处理
value="hello" lengh=${#value} echo "${lengh}"
- 字符串拼接
value="hello" value1="world" value2="${value} ${value1}" echo "${value2}"
- 字符串裁剪
value="hello world" value1="${value:6:5}"(:6代表字符串从0开始数到了第6位开始裁,:5为截取的长度)
- printf
- %s:是一个占位符,严格意义上是输出字符串类型的,但是在shell脚本里任何类型都能输出。
- %f:也是一个占位符,如果是%f,后面必须是小数类型的占位。
- %.3f代表小数点后面保存3位
- %6.3符,6代表整个数据所占宽度为6个字符,如果不够,左边用空格补全。
- %m.nf,如果m<n+1+小数点前面的数字个数,m无效。反之有效。
- %-m.nf:左对齐。
- %d:也是一个占位符,如果是%d,后面必须是整数类型的占位。
- %c:没错,还是一个占位符,后面必须是字符类型。
- \n:转义字符
value="hello" value1=999 printf "value=%s\n" "${value}"//输出一行 printf "value=%s\nvalue1=%d" "${value}" "${value1}"//输出多个变量的值 用法:printf是输出""里面的内容
- read使用
printf "请输入一个值:" read value printf "这个数为%s\n" "${value}"
此处已经有点乱,和C语言差别好多
- read 尽量不要同时输入多个值:如——read value value1
- 运算符的使用+ — * /
expr是计算整数类型行的数据
运算符左右都要有空格
``和$()是取结果集
注意*必须要通过\转义,不然会出错
``与$()不但可以取整数运算的结果,还可以取shell命令的结果集,比如:result=
ls
或者$(ls)result='expr num1 % num2'=num1/num2商...余数
num=1 num1=2 num2=`expr $num + $num1` //num2=`expr $num \* ¥num1` echo "${num2}"
- let关键字
num1=1 num2=2 let num3=num1+num2 echo "${num3}"
- 可以用在 + - * / % ++ --
- ++ --(都只能用在let里,不能在expr里使用)
- 后缀++
num1=1 let num2=num1++ printf "num1=%s\n" "${num1}" printf "num2=%s\n" "${num2}"//num2=1,num=2
- 前缀++
num1=1 let num2=++num1 printf "num1=%s\n" "${num1}" printf "num2=%s\n" "${num2}"//num2=2,num=2
- 后缀--
num1=1 let num2=num-- printf "num1=%s\n" "${num1}" printf "num2=%s\n" "${num2}"//num2=1,num=0
- 前缀 --
num1=1 let num2=--num printf "num1=%s\n" "${num1}" printf "num2=%s\n" "${num2}"//num2=0,num=0
- +=
num1=1 let num2+=num1 printf "num2=%s\n" "${num2}"//num2=3
- 整数之间的关系运算符
- \ > \ < \ >= \ <= != ==
- -gt -ge -lt -le -eq -nq
- 在关系运算符中,运算结果是一个逻辑,如果关系表达式成立,逻辑值为1,否则为0。
- 除!=,==都要用\转义
- !=可以用\转义也可以不用\转义
- \ =,=,==,==(由编译器决定,mac支持=,=)
num1=1 num2=2 num3=`expr $num1 \> $num2` echo "${num3}"
- 如果一个数大于5,然后输出这个数,否则如果这个数小于5,然后说明这个数小于5
if [] then 语句体 elif then 语句体 else 语句体 fi 注意点1. []左右两边都要有空格 2. 关系运算符用-gt 等表示
printf "请输入一个数:" read num if [ $num -gt 5 ] then echo "${num}" elif [ $num -lt 5 ] then printf "%s小于5\n" "${num}" else printf "这个数等于5" fi
- 总结:
- else可以没有,如果有else,必须放在最后面,else下面没有then
- elif可以没有,必须要放在if与else中间的位置
- if语句只能执行一个分支
- if结束的标志fi
-