慕课网Linux达人养成技术&菜鸟编程&2本书
notice:菜鸟编程有的地方写的是错的,要自己敲一敲,改一改
发展史及基本特点
Andrew S.最早给学生为了给学生上课,买了一个Unix操作系统,修改之后改名为Minix,并将源代码公开。公开之后芬兰人Linus To受启发开发了Linux,1991年发布linux(Linus写的Unix),选用芬兰吉祥物企鹅为吉祥物。
Linux内核版本:说明2(主版本).6(次版本).18(末版本)
发行版本:readhat(主流),ubuntu(图形界面,服务器不合适),CentOS(与红帽一样,已被收购),fedoro(个人版,readhat发行)
开源软件:Apache、MySQL、Nginx、Ruby、python、php等
特点
使用自由--绝大多数开源软件免费
研究自由--可以获得软件源代码
散播及改良的自由---自由传播、改良甚至销售
应用领域:
- 企业服务器:常见的国内门户网站包括QQ,www.netcraft.com判断后台服务器What's site running
- 嵌入式应用:SSHd,3D场景平台
学习方法:
-
如何提问:自己尝试解决,-help,-文档,-示例
-
提问:问题详尽,报错截图
与Windows的不同
-
严格区分大小写
-
一切内容皆文件,包括硬件;而windows的文件、用户和硬件是区分的
-
不靠扩展名区分文件类型,而是权限,但有一些约定俗成的命名扩展名(方便管理员)
-
Windows下的程序不能直接在Linux中安装和运行,娱乐程序少得多
字符界面的优势 -
占用的系统资源少
-
减少了出错、被攻击的可能性
系统和安装
linux可分为的部分:
- linux内核:系统内存、软件程序、硬件设备、文件系统
系统内存管理:内核通过存储空间实现虚拟内存,被成为交换空间(swap space),内存不断地在交换空间和实际物理内存之间转换,促使其拥有更多的可用内存。
内存存储单元:存储单元的组被划分的模块成为页面,未访问的内存页面将被复制到交换空间,这个过程称为换出swapping out。当需要访问已被换出的内存A,则需要从现有的物理内存重换出另外一个B腾出空间,然后交换空间重的A被换入到物理内存。
这个过程有点像我的脑容量只有那么大,长期不想起的事情A放到了我的归档神经元,有一天突然想起来了,我的活跃记忆B将与归档进行交换,我的活跃记忆B被尘封了。
进程:Linux 操作系统运行中的程序叫做进程,第一个进程称为启动Init进程,启动运行级别分为5级。
监控进程:ps,top - GNU工具:
- 图形化桌面环境:
- 应用软件:
系统安装
服务器虚拟机:Vmware


安装傻瓜操作,虚拟机删除不干净的时候,使用VMware_install_clean 清除注册表
网络
桥接:使用真实网卡,能与其他网络设备通信
快照:保存虚拟机的状态
克隆:链接克隆和完整克隆,相当于快捷方式和复制
系统分区
逻辑上分成不同的储存空间

格式化主要是为了写入文件系统,完成后数据块block默认最低空间是4KB,写入前会把之前的数据清空,分成等大小的空间并记录node、权限、修改时间等
格式化后需要给分区起名,再分配盘符/挂载点


sda1, sd--sata硬盘, a--第一个银盘,1---第一块分区







centOS 默认文件类型,ext4,swap相当于虚拟内存,文件类型swap
linux界面不支持中文输入,可以装载zhcon等配置文件
命令基本格式
username@localhost previous_directory
使用分号可以运行一系列的命令列表,但不是进程列表;
命令列表想成为进程需要包含在括号里



r=4,w=2,x=1,因为上图权限为644,一般服务器分配权限是755,除了不能写入
不同的文件和目录
.开头,隐藏文件,系统文件,除非必要不要操作
d开头,文件夹
-开头,文件
l开头,Link,链接,类似于快捷方式
b 表示为装置文件里面的可供储存的接口设备(可随机存取装置);
c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
目录 | 用途 |
---|---|
/ | 虚拟目录的根目录,通常不会再这里存储文件 |
/bin | 二进制目录,存放许多用户级的GNU工具 |
/boot | 启动目录,存放启动文件 |
/dev | 设备目录,Linux在这创建用户目录 |
/home | 主目录,Linux在这创建用户目录 |
/lib | 库目录,存放系统和应用程序的库文件 |
/media | 媒体目录,可移动媒体设备的常用挂载点 |
/mnt | 挂载目录,另一个可移动媒体设备的常用挂载点 |
/opt | 可选目录,常用于存放第三方软件包和数据文件 |
/proc | 进程目录,存放现有硬件及当前进程的相关信息 |
/root | root用户的主目录 |
/sbin | 系统二进制目录,存放许多GNU管理员级工具 |
/run | 运行目录,存放系统运作时的运行时数据 |
/srv | 服务目录,存放本地服务的相关文件 |
/sys | 系统目录,存放系统硬件信息的相关文件 |
/tmp | 临时目录,可以再该目录中创建和删除临时工作文件 |
/usr | 用户二进制目录,大量用户级的GNU工具和数据都存储在这里 |
/var | 可变目录,用以存放经常变化的文件,比如日志文件 |
/etc | 系统配置文件目录 |

补充.代表 Acl权限
常见命令
基本文件处理命令


touch 命令可创建空目录
mkdir -p sdf/ckf 先建立sdf,再在sdf下建立ckf
ctrl+L 清屏, clear 也可清屏



rmdir 删除空目录
rm -rf 递归并强制删除目录,谨慎操作


常见目录
lin的CN博客
菜鸟编程


硬链接相当于同一个存储文件的两个入口
软链接相当于win的连接方式,注意软链接的权限是777,不代表对源文件的权限
新建链接最好写绝对位置,以免相对位置发生改变

基本文件搜索命令


locate 搜索较快,只能按照文件名搜索

命令的搜索命令
whereis 命令名
*搜索命令所在路径及帮助文档位置,只能查外来系统命令
whereis -b 只查找可执行文件
whereis -m 只查找帮助文件
which 命令名
搜索命令所在位置及别名,只能查外来系统命令
命令的环境变量
PATH环境变量定义了用于进行命令和程序查找的目录,PATH中目录使用冒号分隔。
$ echo $PATH
/usr/local/mvapich/bin:/usr/lpp/mmfs/bin:/opt/intel//impi/5.0.1.035/intel64/bin:/opt/intel/composer_xe_2015.0.090/bin/intel64:
/opt/intel/composer_xe_2015.0.090/mpirt/bin/intel64:
/opt/intel/composer_xe_2015.0.090/debugger/gdb/intel64_mic/bin:
/gss2/home/galaxy/galaxy/database/dependencies/bowtie/1.1.2/iuc/package_bowtie_1_1_2/a1c1a92e13a6/:/usr/local/mvapich/bin:
/gss2/lsf/9.1/linux2.6-glibc2.3-x86_64/etc:
/gss2/lsf/9.1/linux2.6-glibc2.3-x86_64/bin:/usr/local/sbin:/usr/local/bin:
/sbin:/bin:/usr/sbin:/usr/bin:/opt/ibutils/bin:/root/bin:/gss1/home/bigbear/bin
添加新的环境变量
PATH=$PATH: 新添加东西的路径
这样只能持续到退出或重启系统
通配符
*匹配任意内容
?匹配任意一个字符
[]匹配任意一个括号里的字符

没有所有者的文件可能是垃圾文件,内核产生的文件可能没有所有者,外来文件也没有所有者



grep [选项] 字符串 文件名
选项:
-v 取反,对结果取反
-I 忽略大小写

帮助命令

man -f 命令 查看命令级别
相当于 whereis 命令
man passwd 不写登记号或-f的话,直接查看最低等级的命令
man -k 命令 查看所有包含该命令的帮助文件
相当于apropos 命令
Help命令:
- 命令名 --help 选项命令帮助
- help shell内部命令(whereis找不到执行文件就是内部命令)
info命令
详细命令帮助info
压缩命令——常用压缩格式1
.zip:和windows通用
-zip 压缩后的文件名 需要压缩的源文件
-zip -r 压缩后的目录名 需要压缩的源目录
-unzip 待解压缩文件
.gz:和windows通用
-gzip 源文件 源文件被压缩成.gz压缩格式,同时本身消失
-gzip -r 目录 压缩目录下所有的子文件,但本身不被压缩
-gzip -d 压缩文件 解压缩文件
-gunzip 压缩文件 解压缩文件
-gunzip -r 压缩目录 解压缩其他子目录,但本身不被解压缩
.bz2:不能压缩目录
-bzip2 源文件 被压缩成.gz格式,同时本身消失
-bzip2 -k 源文件 被压缩成.gz格式,同时保留
-bunzip2 源文件 =-bzip2 -d 源文件 解压缩,同时压缩文件消失
-bunzip2 -k 源文件 =-bzip -d -k 源文件解压缩,同时压缩文件保留
压缩命令——常用压缩格式2
tar:解决目录不能直接打包问题
- 打包用法:tar -cvf 打包后的文件名 源文件 (-c 打包,-v 显示过程,-f显示打包后的文件名 )
- 解打包: tar -xvf 打包后的文件
.tar.gz:打包之后压缩成gz格式 - tar -zcvf 压缩包名.tar.gz 源文件 打包成 .tar.gz格式
- tar -zxvf 压缩包名.tar.gz 解除打包
.tar.zip2 - tar -jcvf 压缩包名.tar.bz2 源文件
- tar -jxvf 压缩包名.tar.bz2
关机和重启命令
shutdown命令
- 格式:shutdown [选项] 时间
选项:
-c 取消前一个命令
-h 关机
-r 重启
其他关机和重启命令:因为不够安全不推荐使用 - 关机:poweroff 、halt、 init 0
- 重启:reboot(相对安全)、init 6
系统运行级别
可通过runlevel命令查看当前系统运行级别
cat /etc/inittab 可定义默认定义界面
大写X 一般代表图形界面
退出远程代理登录:logout
用户查看命令








挂载命令
mount -t -o 设备文件点 挂载点
挂载命令需要实战,需要挂载的有光盘、移动硬盘、固态硬盘等
挂载命令练习建议使用虚拟机
shell
shell是一个命令行解释器和以及解释执行的脚本语言,在shell中可以直接调用linux系统命令。

#!/bin/bash
echo "Hello World !"
两种运行办法,第一作为可执行程序
chmod +x ./test.sh #使脚本具有执行权限,一定要加./,否则会去path里找,当前目录通常不在path里
./test.sh #执行脚本
第二,作为解释器参数
/bin/sh test.sh
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本,有点类似于python的print
vim脚本编辑
vim 文件名,进入vim命令模式,此时是无法编辑的;
单击“i”进入输入模式,可进入编辑,单击"Esc"退出输入模式;
单击“:”进入末行模式,单击“w”写入保存,单击“q”退出
变量的命名规则:
命名只能英文字母、数字和下划线,中间不允许空格,可下划线,首字母不能以数字开头,不能使用标点符号,不能使用bash关键字
使用变量
使用一个定义过的变量,只需要在变量名前面添加“$”
变量名外需要加花括号{},这是个好习惯
readonly可以将变量定义为只读,unset命令可以删除变量
变量类型
- 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
字符串
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
- 双引号里可以有变量
- 双引号里可以出现转义字符
获取字符串长度:使用#
string="abcd"
echo ${#string} #输出 4
提取子字符串,使用切片,类似于python
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo
查找子字符串:查找字符 i 或 o 的位置(哪个字母距离`更近就计算哪个):
string="runoob is a great site"
echo `expr index "$string" io`# 输出 4,计算的是o
# notice 这边的符号`是一个反引号,位置在数字1旁边,需要用英文输入法,不要粗心搞错了
数组
bash 只支持一维数组,以()表示数组,并且没有限定数组的大小,需要使用下标来访问,下标要求大于等于0,用空格隔开
读取数组
${数据名[下标名]}
@ 符号可获取数组所有元素
echo ${array_name[@]}
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
eg
输入
#!/bin/bash
your_name=("tom" "su" "few")
echo ${your_name[1]} #位置为1的数组
echo ${your_name[@]} # 获取数组所有元素
echo ${#your_name[@]} # 获取数组所有元素的个数
echo ${#your_name[*]} #获得数组所有元素的个数
echo ${#your_name[1]} # 获取位置为1元素的长度
输出
su
tom su few
3
3
2
shell注释
- shell以#注释
- 多行注释
多行注释还可以使用以下格式:
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
EOF 也可以使用其他符号:
:<<!
注释内容...
注释内容...
注释内容...
!
第三种方法,这里是个空格,后面也可以用双引号
: '
注释内容...
注释内容...
注释内容...
'
Shell传递参数
执行 shell 脚本时,向脚本传递参数,脚本内获取参数的格式为
$n,其中 $0 为执行的文件名(包含文件路径)
eg vim的输入
echo "Shell 传递参数实例!"
echo "执行的文件名:$0"
echo "第一个参数为:$1"
echo "第二个参数为:$2"
echo "第三个参数为:$3"
echo "参数个数为:$#"
echo "传递的参数作为一个字符串显示:$*"
echo "传递的参数作为一个字符串显示:$@"
for i in "$*";do
echo $i
#*是通配符,3个字符作为一个参数被传送
done
for i in "$@";do
echo $i
# @不是通配符,单独传递参数
done
执行
chmod +x test.sh
./test.sh big bear yeah
输出
Shell 传递参数实例!
执行的文件名:./test.sh #就是$0指向的原文件
第一个参数为:big # 传递给$1的参数big
第二个参数为:bear # 传递给$2的参数bear
第三个参数为:year #传递给$3的参数yeah
参数个数为:3 # 获取字符串的个数
传递的参数作为一个字符串显示:big bear yeah # 引用了所有参数
传递的参数作为一个字符串显示:big bear yeah # 引用了所有参数
big bear yeah # 引用的参数被当成了一个
big # 引用的参数第一个
bear # 引用的参数第二个
yeah # 引用的参数第三个

Shell 运算符
shell 和其他编程语言一样,支持多种运算符,包括:
算数运算符
关系运算符
布尔运算符
字符串运算符
文件测试运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr 最常用。
#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为 : $val"
两点注意:
- 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
- 完整的表达式要被 反引号`` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
算术运算符
shell做运算我用的不多,其他逻辑运算、关系运算啥的参考https://www.runoob.com/linux/linux-shell-basic-operators.html
流程控制
条件与其他语言类似
if condition
then
command1
command2
...
commandN
else
command
fi
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
while condition
do
command
done
Shell 函数
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。
shell中函数的定义格式如下:
[ function ] funname [()]
{
action;
[return int;]
}
输出重定向
重定向一般通过在命令间插入特定的符号来实现。特别的,这些符号的语法如下所示:
command1 > file1
输出重定向会覆盖文件内容

linux命令大全
https://www.runoob.com/linux/linux-command-manual.html
网友评论