Linux的起源、历史、特点、定义
GNU GPL
常见的发行版本
商业、共享、自由和免费软件的区别和联系
Linux的安装方式(区别和联系,如何选择)、安装过程、远程连接方式
Linux内核版本号
Linux目录结构、常见目录的作用和存放内容
Linux终端是用户与操作系统之间的接口
这个接口的程序叫Linux Shell
【作用】
Shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令,返回执行结果
【注意事项】
一个用户同一时刻只能使用一个shell
查看当前系统支持的Shell列表
cat /etc/shells
查看当前用户使用的Shell版本
echo $SHELL
默认Shell
#
代表root用户$
代表普通用户tab
键clear、cd、rmdir、cat、
ls、echo、mkdir、touch、more、less、head、tail、cp、mv、pwd、rm
echo
-n
输出后不会自动换行-e
开启转义,即\t
这样的会被翻译为一个tab而不会当字符输出mkdir
-p
自动创建不纯在的中间目录touch
ls
mv
可以用作移动
也可以用作文件重命名,mv file1 file2
eg: mv /a.txt /tmp/a.txt
cp
tail
head与tail类似
more和less
pwd
rm
-r
递归删除子目录内容-f
强制执行,不提示【文件类型】
简写 | 类型 |
---|---|
- | 普通文件 |
d | 目录 |
l | 链接文件 |
b | 设备文件 – 区块 |
c | 设备文件 – 字符 |
p | 管道文件 |
s | Socket文件 |
【PS】:设备文件在 /dev 目录下
/
开始~
表示/root
下,普通用户在/home
下.
代表目录自己..
代表该目录的父目录每一行存储一个用户的账号信息
用户名 : 加密密码 : 用户ID : 用户组ID : 用户信息 : 用户主目录 : 登录Shell
root:x:0:0:root:/root:/bin/bash
超级用户root的UID是0
系统用户的UID在1000以内
每一行存储一个用户的登录密码信息
每一行记录系统中的用户组信息
组名:密码字段:用户组ID :用户名列表
root:x:0:
usermod、userdel、groupadd、groupdel、ln、gzip、unzip、sed、cut、
useradd、chmod、chown、chgrp、find、tar、awk、grep、tr
useradd
-u, -d, -g, -s
分别对应uid,目录,组别,shellpasswd
passwd 用户名
chmod :
chmod 权限 文件
chmod 640 a.txt
chown
chgrp
find
查找文件或目录
find 路径 [选项] 表达式
-name 查找名字
-type 文件类型
-type f
是普通文件-perm 文件权限
find / -name “*.conf”
查找根目录 “ / ” 下所有后缀为conf的文件
tar
awk
grep
-v
显示不包含该文本的行gzip
unzip
tr
【总结】简单来说,软连接只是一个快捷方式 + 一个源文件,硬连接则是在两个地方都出现了同一份文件,根源是一样的。
PS!!!需要指定绝对路径,否则链接失效
^xxx,匹配开头
xxx$,匹配结尾
[],陪陪指定范围内的字符
wc、sort、yum、sudo
cal、date、su、which、whereis、
su 用户名
which useradd
【命令模式】:
进入vi的默认模式
按下esc键后进入
光标移动
删除
恢复
复制粘贴
替换、切换到插入模式 (含课外补充内容)(含课后作业)
【插入模式】:
【末行模式】:
命令模式下按 " : " 进入
保存、退出
显示/取消行号
:set nu | :set number
:set nonu | :set nonumber
显示光标所在行号
:nu | :number
搜索
替换
保存与另存为
:w
写入:w filename
另存为ZZ与:x , :wq 作用一样
在末行模式下用“!”符号来访问Linux的Shell
删除 *.swp 文件
Linux下是unix格式
Windows下是dos格式
命令模式下的常见操作
课后作业
执行 man ls > out.txt ,生成out.txt文件
使用 vi 打开 out.txt
显示所有行号
:set nu | :set number
光标移动到100行,向右移动10个字符
100G
10w
移动到第一行,往下搜索“1024”,定位到第二个匹配项
gg
/1024
n
将50行到100行之间的小写“o”改写为大写"O"
:50,100 s/o/O/g
修改完了,突然反悔,如何恢复修改前?
复制65到73行之间这9行的内容,粘贴到最后一行
65G
9yy
G
p
删除21到42行之间的所有内容
:20,42 d
把当前文档另存为 out.txt.bak
:w filename #另存为
定位到28行,删除3个单词
/etc/sysconfig/network | 最基本的网络信息,系统启动时读取该文件 |
---|---|
/etc/sysconfig/network-scripts/* | 此目录下的文件是系统启动时用来初始化网络的一些信息,例如:第一块以太网卡对应的文件为ifcfg-eth0 |
/etc/host.conf | 域名解析的配置文件 |
/etc/hosts | 域名或主机名与IP地址的映射文件 |
/etc/resolv.conf | 域名服务器配置文件 |
/etc/protocols | 定义使用的网络互联协议及协议号 |
/etc/services | 设定主机的不同端口的网络服务 |
设置静态IP
在**/etc/sysconfig/network-scripts/ifcfg**文件中设置
BOOTPROTO=static
IPADDR=192.168.14.11 //IP地址
Stand-alone 与 xinetd模式
【区别】
配置文件
重启服务
PORT与PASV
X window由三部分组成
【1】X 服务端
【2】X 客户端
【3】X 通信通道
(1)X通信通道的主体是xlib(X函数库)
(2)X Client调用xlib,利用相应的通信功能向X Server发出请求
(3)X Server完成任务之后,同样调用xlib把结果显示指定的设备上去
临时更改
长期更改
shell程序可以认为是将shell命令按照控制结构组织到一个文本文件中,批量的交给shell去执行
不同的shell解释器使用不同的shell命令语法
shell程序解释执行,不生成可以执行的二进制文件
可以帮助用户完成特定的任务,提高使用、维护系统的效率
了解shell程序可以更好的配置和使用Linux,实现自动化运维
shell使用解释型语言,不需重新编译
需要增加可执行权限 chmod +x filename
【变量】
【read】
【位置变量】
$0则代表脚本的名字
$1、 2 … 2… 2…n分别代表参数1、参数2…参数n
$*:这个变量包括参数的列表(字符串)
$@:这个变量包括参数的列表(数组)
$#:这个变量包括参数的个数
【$HOME】
用户主目录
【$PATH】
寻找命令或可执行文件的搜索路径列表
【$?】
紧邻的前驱命令的返回值 0=成功 1=失败
【双引号】
【单引号】
【倒引号】
【数学运算】
expr arg
let
let语句更加简洁
【条件判断】
[ condition ]
+ 条件和左右括号之间要有空格
真:0
假:1
【逻辑运算】
逻辑与-a:condition1-a condition2,如果两个条件都为真,则结果为真
逻辑或-o:condition1-o condition2,如果两个条件有一个为真,则结果为真
逻辑非!:! condition,结果与condition相反
要求可以 手写shell程序
XFS为默认文件系统
把文件系统从操作系统和系统服务中分离出来,在它们之间使用了一个接口层,也就是虚拟文件系统VFS(Virtual File System)
只存在于内存,系统启动时建立,系统关闭时消亡
【VFS功能】
【1】查看设备:使用命令“fdisk -l”可以查看系统的存储设备
【2】挂载设备 :首先使用mkdir命令建立挂载点目录,然后再使用mount命令挂载相关设备
【3】访问设备
【4】卸载设备 :用户在使用完挂载设备后,不能直接将挂载设备从系统拔出,否则会出现问题,严重的会导致系统崩溃。用户必须先执行卸载umount 命令然后再该设备拔出
设备名称在/dev
目录下
挂载点,即设备挂载到/mnt
目录下
自动挂载文件/etc/fstab
mkfs、fdisk、mount、umount、whoami、who、w、jobs、bg、fg、&(后台进程启动)
df
du
【概念】
【区别】
【联系】
【】
【区别】
【联系】
at
用法:at [选项] [时间]
at -f 脚本文件
查看都是-l
at的删除是-d
,或者atrm
,contrab的删除是-r
ps:显示当前进程的状态
kill:-1 重新加载,-9杀死进程,但是kill只是发送信号,无法真正决定能否杀死。
所以kill -9 无法终止系统进程和守护进程
free“显示内存状态
【一次编译】
【分步编译】
分别编译每一个c文件
file | 指定需要进行调试的程序 |
---|---|
step | 单步(行)执行,如果遇到函数会进入函数内部 |
next | 单步(行)执行,如果遇到函数不会进入函数内部 |
run | 启动被执行的程序 |
quit | 退出gdb调试环境 |
查看变量或者表达式的值 | |
break | 设置断点,程序执行到断点就会暂停起来 |
shell | 执行其后的shell命令 |
list | 查看指定文件或者函数的源代码,并标出行号 |
xxx.a
xxx.so
ip addr
mv指令可以使用绝对路径,需要 " / " 开始描述目录
mv指令使用相对路径时,直接用文件夹名称开始
/etc/passwd 这个目录里面存放了用户信息
find 指令
tar zcvf 目标文件 目录 = 压缩文件
awk ‘{print $…}’
ls -S
将文件从大到小排序 |
分割head -n
指令取前n行wc -l
指令统计行数ln -s
创建软链接
ls a b
即 b -> a,b指向asu
指令进行某用户exit
指令退出某用户chmod 权限 文件
u=..., g=..., o=...
gg
第一行行首
G
末行行首
nG
移动到第n行行首
dd
删除
:n,m d
也是删除yy
复制
p
粘贴
:w filename
另存为
ndw
删除n个单词
nx
安装telnet
安装vsftpd
添加用户
useradd 用户名
查看进程信息
ps -ef
grep查找a内容,去掉其中包含的b内容
grep 'a' | grep -v 'b'
-v
表示显示不包含该字符串的行提取制定内容
cut命令
-d
定义分隔符-f
为提取字段cat /etc/passwd | cut -d: -f1,3,4
Chkconfig
定义函数
调用函数
死循环
while true
do
...
done
case
case ${...} in
..|..)
....
;;
..|..)
....
;;
*) #表示其他情况
exit
;;
esac
显示当前目录
pwd
显示文件名字
echo $0
显示日期
date +'%.....'
显示ip
ip addr
ifconfig
if语句
if [ x ];then
....
elif [ x ];then
....
else
....
fi
条件判断整数关系
-gt
for great than , 大于lt
小于-ge
大于等于-le
小于等于-eq
等于-ne
不等于条件判断
【完整代码】
#!/bin/sh
while true
do
echo "please input score:"
read score
if [ $score -lt 0 ];then
exit
elif [ $score -lt 60 ];then
echo "Failed!"
elif [ $score -lt 70 ];then
echo "Passed!"
elif [ $score -lt 80 ];then
echo "Medium!"
elif [ $score -lt 90 ];then
echo "Good!"
elif [ $score -le 100 ];then
echo "Execllent!"
else
echo "input error!"
fi
done
#!/bin/sh
while true
do
echo -e "input a directory:"
read dir
if [ $dir = "q" ];then
exit
elif [ -e $dir -a -d $dir ];then
for file in `ls $dir`
do
if [ ! -e "$dir$file" ];then
dd="$dir/$file"
else
dd="$dir$file"
fi
type=`ls -ld $dd | cut -c1`
echo "#{dd}_${type}"
done
else
echo "...."
fi
done
#!/bin/sh
yum install -y vsftpd
sed -i "s?anonymous_enable=YES?anonymous_enable=NO?" /etc/vsftpd/vsftpd.conf
service vsftpd start
【完整代码】
#!/bin/sh
echo "please input a number:"
read num
while [ $num -gt 0 ]
do
i=$num
while [ $i -gt 0 ]
do
echo -n "$i "
let i=$i-1
done
echo
let num=$num-1
done
Sort - u,去除重复
【完整代码】
#!/bin/sh
ips=`cat run.log | awk '{print $1}' | sort -u`
for ip in ${ips}
do
count=`cat run.log | grep ${ip} | wc -l`
echo ${ip} ${count}
done
格式
$?代表上一个命令执行的结果
0代表真,1代表假