首页 > 代码库 > linux基本知识2
linux基本知识2
vi三种模式:
1.浏览模式(命令模式)
2.输入模式
3.末行模式
三种模式切换:
浏览模式(命令模式) 按"i" "a" 输入模式
输入模式 按"esc" 浏览模式(命令模式)
浏览模式(命令模式) 按shif+: 末行模式
浏览模式经常使用的命令:
删除一行 dd
删除多行 ndd (n=1,2,3)
复制一行 yy
复制多行 nyy (n=1,2,3)
粘贴 pp
大写写切换 shift+~
光标文件开头 :gg
光标文件结尾 :GG
排版 :gg=GG
末行模式使用命令:
wq :保存退出
q!:不保存退出
w 文件名称 :另存为
!shell命令 :运行shell命令
set nu :显示行号
set nonu:取消显示行号
u:撤销上一次改动
%s/源字符/新字符/ :替换每一行第一次出现源字符
%s/源字符/新字符/g :替换全部源字符
%s/ad/88888/g
%s/\/home\/etc/1231232/g //转移字符"\"
linux用户管理
/etc/passwd:用户信息(password凭证)
/etc/group:用户组信息
/etc/shadow:用户password及其password有效期
root: x :0 :0 :root: /root: /bin/bash
username password凭证 uid gid 初始组名 用主文件夹 shell脚本解 释器
root::0:0:root:/root:/bin/bash//取消"x",能够不须要password
uid>=0 && uid<=999 系统预留UID
uid>=1000 系统一般用户
添加用户命令
useradd/adduser username
useradd test//改动/etc/passwd /etc/shadow /etc/group /home/test
-d:指定用户主文件夹名称
-u:指定uid
-M:不会创建用户主文件夹
初始组:
a.adduser创建用户时,系统自己主动创建一个与username同名组
b.-g:选项指定新用户所属初始组(组必须先存在,可能与username一样)
有效组:
a.-G:指定用户除了属于初始组之外的组
一个用户能够有多个有效组,仅仅能有一个初始组
-g:指定用户初始组
adduser -g test test4 //初始组:test
-G:指定用户有效组
adduser -G test test5//初始组:test5 有效组:test
设置/改动password
passwd username
[root@localhost etc]# passwd test
[root@localhost etc]# passwd //改动当前rootpassword
切换用户
su
root -->一般用户: su test//无需输password
一般用户-->root : su /su root//须要输入root用户password
[root@localhost etc]# su test
[test@localhost etc]$ su
改变用户信息
a.username
b.用户提示信息
c.冻结/解冻用户
usermod
usermod -l usernewname useroldname
usermod -c "sdfdsfdsfsd" test
usermod -L test //冻结用户
usermod -U test //解冻用户
添加组
groupadd
groupadd group1
删除用户
userdel
userdel test2//删除username,用户主文件夹不会删除 rm -rf test2
userdel -r test4//删除username,用户主文件夹也删除
删除组
groupdel
groupdel group1
网络常使用命令
/etc/sysconfig/network-scripts/ifcfg-p3p1 //网卡配置文件
网卡一般为:eth0 eth1 ethn
查看网络信息:
ifconfig
设置IP地址:
1.设置永久性
setup
servie network restart|start|stop //必需要重新启动服务,否则设置将无效
2.暂时 ifconfig p3p1 192.168.226.3 netmask 255.255.255.0
linux 与window 网络通信:
1.查看网络适配器(VMware Network Adapter VMnet1),ip:192.168.80.1//每台机器不一样
2.vm-->setting-->network adapter 右下角 选择第四项(customer adapter -->vm1(host only))
3.[root@localhost network-scripts]# ifconfig p3p1 192.168.80.3 netmask 255.255.255.0
4.[root@localhost network-scripts]# ping 192.168.80.1//linux ping window
5.ping 192.168.80.3 //window ping linux
关闭防火墙:
linux:setup --->firewall config
samb共享服务
linux共享文件 window訪问
samb服务配置步骤:
1.[root@localhost network-scripts]# service start
2.[root@localhost home]# mkdir share //创建共享文件夹
3.[root@localhost etc]# cd /etc
[root@localhost etc]# cd samba/
4.[root@localhost samba]# cp smb.conf smb.conf4 //备份配置文件
5.改动smb.conf配置文件
vim smb.conf
118 security = share
322 [share]
323 comment= wshare
324 path= /home/share
325 public= yes
326 guest ok =yes
327 writable= yes
6.[root@localhost samba]# service smb restart//重新启动服务
7.window 执行:\\192.168.80.3
8.改动权限
[root@localhost /]# chmod 777 home
[root@localhost home]# chmod 777 share
[root@localhost home]# setenforce 0
重新启动机器后须要设置:
1.[root@localhost network-scripts]# ifconfig p3p1 192.168.80.3 netmask 255.255.255.0
2.[root@localhost samba]# service smb restart//重新启动服务
3.window 执行:\\192.168.80.3
4.[root@localhost home]# setenforce 0
linux 进程管理命令
进程与程序差别
进程:动态 正在执行的程序
程序:静态 实现代码
查看显示进程
ps
ps -aux
a:显示全部进程(前台进程与后台进程)
x:显示内核进程(内核服务)
u:显示当前用户的进程
ef:显示父亲进程(PPID)
进程状态:
S:睡眠状态
R:正在执行状态
D:睡眠状态不可中断
T:暂停
Z:僵死
"&":运行命令时,直接成为后台进程
ctrl+C:结束当前进程
ctrl+D:把当前进程改为后台进程
fg +pid //把后台进程改变成前台进程
fg +pid
[root@localhost share]# fg + 4641
top:动态查看当前进程状况
pstree :树结构显示进程
kill pid //进程ID杀死
kill -9 pid//强制杀死进程
killall bc//进程名
killall -9 bc//强制杀死进程
清屏
clear
echo -e ‘\033c‘
作业:
1,创建组account,mis,sales
groupadd account
groupadd mis
groupadd sales
2,创建用户a
adduser a
3,创建用户b,不创建家文件夹
adduser -M b
4,创建用户c,家文件夹为/home/cc
并设置初始化组为sales,有效组为mis
adduser -d /home/cc -g sales -G mis c
5,改动a用户的password为a123456
echo a12345 | passwd a --stdin
6,把c用户冻结
usermod -L c
usermod -U c
8,删除sales组
groupdel sales
环境变量
为了保存系统一些信息,定义的变量
环境变量名通常是大写
常见的环境变量
PATH:保存系统shell命令可运行文件路径
HOSTNAME:主机名
LD_LIBRARY_PATH:动态库载入路径
USER:当前登录username
查看环境变量命令
env
env | grep HOSTNAME
echo $HOSTNAME//输出HOSTNAME变量值
echo HOSTNAME//输出变量名HOSTNAME
echo $PATH
export 导入
让改动环境变量新值有效
改动PATH环境变量值:
1.暂时改动
[root@localhost etc]# export PATH=$PATH:/sbin:/bin
2.永久改动
一般用户:
/home .bash_logout .bash_history
.bash_profile(用户环境变量或启动程序设置)
.bashrc
root用户:
.bash_logout .bash_history
.bash_profile(用户环境变量或启动程序设置)
.bashrc
etc: bashrc profile
PATH永久设置:
用户: .bash_profile
export PATH=$PATH:/sbin:/bin
/etc: profile
export PATH=$PATH:/sbin:/bin
自己定义换将变量
root@localhost etc]# export AA=12345
[root@localhost etc]# unset AA //删除环境变量
[root@localhost etc]# export AA=12345
[root@localhost etc]# readonly AA
linux 解压/压缩
.tar.gz
.tar.gz2
.rpm
解压/压缩命令
tar
-x:解压
-c:压缩
-v:输出压缩\解压的信息
-z:压缩文件gzip/zip
-f:文件名称(一般放在选项最后面)
-C:改变指定解压文件的文件夹(默认解压到当前文件夹)
压缩文件:
tar -cvzf
tar -cvf
[root@localhost yj]#tar -cvzf abc.tar.gz a b c
[root@localhost yj]# tar -cvf abc.tar.gz2 a b c
解压文件:
[root@localhost yj]# tar -xvzf abc.tar.gz
[root@localhost yj]# tar -xvf abc.tar.gz2
[root@localhost yj]#tar -xvzf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C/usr/local
linux文件安装
a.带源代码安装
b.解压安装
带源代码安装步骤:
以安装:sqlite-3.3.7.tar为例:
1.tar -xvzf sqlite-3.3.7.tar.gz -C /usr/local
2.cd sqlite-3.37
3.[root@localhost sqlite]# ./configure --prefix=/usr/local/sqlite //生成一个makefile文件
4.make //编译
5.make install //安装
RPM包(reahat package manager)
rpm 经常使用选项:
-q:查询
-a:全部包
-i:安装
-e:删除
-v:验证
-h:显示安装进度
vim-filesystem-7.3.315-1.fc16.i686.rpm
vim-filesystem:包名(功能)
7.3.315-1:版本号
fc16:os版本号
i686:处理器类型
rpm -qa 包名//依据包名搜索安装包
rpm -ivh vim-filesystem-7.3.315-1.fc16.i686.rpm
rpm -evh 包名
linux挂在cdrom步骤:
1.vm-->setting-->cd dvd 勾选connected 指定虚拟镜像文件
2.[root@localhost /]# mount /dev/cdrom /media
3.cd media
正則表達式
一种用来来描写叙述文本模式的特殊语法
由普通字符(比如a到z 0-9)以及特殊字符(称为元字符,如.*[]^{}\+?|() $等)组成
^a
b$
@.qq.com
abcd123qwer
*
正則表達式特殊符号:
^:以字符开头 如:^a ^abc ^aabc
$:以字符结尾 如:cdf$ cf$ f$
.:匹配随意单个字符: 如:a.d 匹配:a1d aad add
*:前面一个字符反复出现0次/1次/多次
如:da*cd 匹配:dcd dacd daacd daaaacd
\:转义字符 如:a\.c
\{n\}:前面单个字符连续出现n次(n=0,1,2...)
\{n,\}:前面单个字符至少连续出现n次(>=n)
\{n,m\}:前面单个字符连续出现次数为:n<=次数<=m
[list]:从list集合中选择随意一个字符 a[123]c a1c a2c a3c
[list1-list2]:从list1-list2区间集合中选择随意一个字符
a[0-9]z a0c a1c ... a9c
a[A-Z]z aQc aAc ... aZc
[^list]:除开list集合中随意字符 a[^0-9]b aab a\+b
+:前面单个字符仅仅能出现1次 多次 a+b ab aab aaab
?:前面单个字符仅仅能出现0次 1次 a?b b ab
|:二选1 1a|b4 1a4 1b4
(|):多选1 1(ab|cd|ef|23)9 1ab9 1cd 9 1ef9 1239w
/d:数字[0-9]
/D:非数组[^0-9]
/w:字母[a-zA-Z]
/W:非字母[^a-zA-Z]
^a[0-9]\{2\}[A-Z]\{3,4\}s$
a23ASDs
a23ASDFs
abcd123qwer
[a-zA-Z]\{4\}[0-9]\{3\}[a-zA-Z]\{4\}
grep 搜索查找字符命令
-n:输出目标字符所在行号
-c:统计目标字符查找出现的次数
-i:忽略大写和小写
-a:在二进制文件查找
[root@localhost yj]# grep ‘root‘ passwd
[root@localhost yj]# grep -n ‘root‘ passwd
[root@localhost yj]# grep -ni ‘root‘ passwd
[root@localhost yj]# grep -n ‘t[ae]st‘ passwd
[root@localhost yj]# grep -n ‘ro\{2,4\}t‘ passwd
[root@localhost yj]# grep -n ‘r[^g]o‘ passwd
[root@localhost yj]# grep -n ‘r[^a-z]o‘ passwd
[root@localhost yj]# grep -n ‘r[^a-z0-9A-Z]o‘ passwd
[root@localhost yj]# grep -n ‘^$‘ passwd
[root@localhost yj]# grep -n ‘^r‘ passwd
[root@localhost yj]# grep -n ‘^[0-9]‘ passwd
[root@localhost yj]# grep -n ‘^[a-zA-Z]‘ passwd
[root@localhost yj]# grep -n ‘\.$‘ passwd
egrep 查找,主要是适合(+ ?
* | (|))
[root@localhost yj]# egrep -n ‘ro+t‘ passwd
[root@localhost yj]# egrep -n ‘ro?t‘ passwd
[root@localhost yj]# egrep -n ‘ro*t‘ passwd
练习:
写出一个正則表達式:
字母‘m‘开头后面是4个连续的随意字母后面是‘:‘后面是3个连续的字母‘a‘最后是‘s‘结尾
[root@localhost yj]# grep -n ‘^m[a-zA-Z]\{4\}:a\{3\}s$‘ passwd
awk 使用
依据指定符号对一行数据分解成多个数据域
数据域:数据行依据指定符号分解之后产生的子数据
-F 符号
awk -F ,
awk 默认分解符号是空格
awk 命令语法:
awk -F 分解符号 ‘命令‘ 数据源(文档 管道输入数据)
特殊符号
$0:全部数据域
$1:第一个数据域
$2:第二个数据域
$3:第三个数据域
[root@localhost yj]# awk -F , ‘{print $4}‘ awkfile
[root@localhost yj]# awk -F , ‘{print $0}‘ awkfile
[root@localhost yj]# awk -F , ‘{print $1"\t"$3"\t"$5}‘ awkfile
[root@localhost yj]# awk -F , ‘{print $1" "$3" "$5}‘ awkfile
[root@localhost yj]# awk -F , ‘{print $1,$3,$5}‘ awkfile
[root@localhost yj]# awk ‘{print $1}‘ awkfile
awk 运行命令组成部分:
1.BEGIN
2.数据行
3.END
[root@localhost yj]# awk -F , ‘BEGIN{ print "adfdsfdsf"}‘ awkfile
[root@localhost yj]# awk -F , ‘BEGIN{ print "name\tscore"} {print $1"\t"$6}‘ awkfile
[root@localhost yj]# awk -F , ‘BEGIN{ print "name\tscore"} {print $1"\t"$6} END{print "total="}‘ awkfile
[root@localhost yj]# awk -F , ‘BEGIN{total=0} {print $1"\t"$6;total=total+$6} END{print "total="total}‘ awkfile
[root@localhost yj]# awk -F , ‘{if($4=="Yellow") print $0;else print "error"}‘ awkfile
[root@localhost yj]# awk -F , ‘{if($4=="green" || $4=="Green") print $0}‘ awkfile
[root@localhost yj]# awk -F , ‘{if($4 ~/[gG]reen/) print $0}‘ awkfile
[root@localhost yj]# awk -F , ‘$4~/[gG]reen/‘ awkfile
[root@localhost yj]# awk -F , ‘{if($4 !~/[gG]reen/) print $0}‘ awkfile
[root@localhost yj]# awk -F , ‘{if($6<=$7) print $0}‘ awkfile
[root@localhost yj]# awk -F , ‘{if($5<=$6 && $6<=$7) print $0}‘ awkfile
[root@localhost yj]# awk -F , ‘$1~/^...a/‘ awkfile
[root@localhost yj]#awk -F , ‘$4 ~ /Yellow|Brown/‘ awkfile
[root@localhost yj]#awk -F , ‘$0 ~ /^J/‘ awkfile
[root@localhost yj]# cat awkfile | awk -F , ‘{print $2}‘
[root@localhost yj]# echo "a,b,c,d" | awk -F , ‘{print $2}‘
[root@localhost yj]# echo "a,b,c:1,2,3:e,r,t" | awk -F : ‘print $1"\n"$2"\n"$3}‘ | awk -F , ‘{print $2}‘
[root@localhost yj]# data=http://www.mamicode.com/`echo "a,b,c:1,2,3:e,r,t" | awk -F : ‘{print $1"/n"$2"/n"$3}‘ `
//反 `` 把``中的命令运行的数据赋值给变量
[root@localhost yj]# data=http://www.mamicode.com/`echo "a,b,c:1,2,3:e,r,t" | awk -F : ‘{if($0!~/^$/) print $1"/n"$2"/n"$3}‘ | awk -F , ‘{print $2}‘`
awk内部特殊变量
FILENAME:文件名称
NR:行数
NF:列数
ARGC 命令行參数个数
ARGV 命令行參数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk读取的文件名称
FNR 当前文件已处理的记录行数
FS 设置域分隔符。相当于-F
NF 域的列数 $NF标识最后处理域
NR 已处理的记录总行数
OFS 设置输出字段域分隔符
RS/ORS 换行符
[root@localhost yj]# awk -F , ‘{print NR "\t" NF "\t" FILENAME}‘ awkfile
[root@localhost yj]# awk -F , ‘{if(NR==3) print $0}‘ awkfile
练习:
1.数据/etc文件夹下全部一般文件大小总和
[root@localhost etc]# ls -l | grep ‘^-‘ | awk ‘BEGIN{total=0} {total=total+$5} END{print total/1024}‘
sed
sed是在缓冲区中对文档中的内容 改动 添加 删除 替换,改动的结果都不会影响到原文件,利用管道把改动的内容提交到原文件里
sed语法
sed -nfi ‘commad‘ 文件名称
-n:仅仅输出sed改动的内容
-f:直接改动文件里内容(非缓冲区)
-i:直接对文件编辑
sed经常使用的命令
d:删除
a:添加一行和多行
p:打印输出
c:替换数据行
i:插入新行
s:替换数据行的局部数据
g:全部字符
删除行
[root@localhost yj]# sed ‘1d‘ awkfile //删除第一行
[root@localhost yj]# sed ‘1,2d‘ awkfile //删除第一行到第二行
[root@localhost yj]# sed ‘$d‘ awkfile //删除最后一行
[root@localhost yj]# sed ‘2,$d‘ awkfile
输出行
[root@localhost yj]# sed -n ‘1p‘ awkfile //输出第一行
[root@localhost yj]# sed -n ‘1,2p‘ awkfile
[root@localhost yj]# sed -n ‘$p‘ awkfile
模式查找
root@localhost yj]# sed -n ‘/green/p‘ awkfile
[root@localhost yj]# sed -n ‘/\//p‘ awkfile
添加数据行
oot@localhost yj]# sed ‘1a qweqwewq213123213‘ awkfile
[root@localhost yj]# sed ‘1,2a qweqwewq213123213‘ awkfile //在第一行和第二行后面分别添加一行新数据
[root@localhost yj]# sed ‘1a qweqwewq213123\n21376567567‘ awkfile //添加多行数据
替代一行或多行
[root@localhost yj]# sed ‘1c 3123123‘ awkfile
[root@localhost yj]# sed ‘1,2c 3123123\nqqwqw‘ awkfile
直接编辑文件
[root@localhost yj]# sed -i ‘$a 123123‘ awkfile
对一行局部数据替换
[root@localhost yj]# sed -n ‘/green/p‘ awkfile | sed -i ‘s/green/aaaa/g‘ awkfile
[root@localhost yj]# sed -n ‘/aaaa/p‘ awkfile | sed -i ‘s/aaaa//g‘ awkfile
获取字符长度
[root@localhost yj]# name=yj
[root@localhost yj]# echo ${#name}
截取字符
${name:startpos:charlen}//startpos从0開始 charlen所取字符个数
[root@localhost yj]# echo ${name:1:4}
shell脚本语句
shell脚本文件
/bin/bash:shell脚本文件解释器
shell脚本文件特点:
1. .sh结尾
2.shell脚本文件能够直接运行
#!/bin/bash//shell脚本文件解释器
#ls -l //"#"凝视符号
shell脚本运行:
1.sh shell脚本文件
2. [root@localhost shell2]# chmod 755 sh1.sh //授予运行权限
[root@localhost shell2]# ./sh1.sh
shell 脚本变量定义
变量名=值//变量名通常是小写,与环境变量区分
输出变量值
echo $变量名
name=aaa
age=20
score=34.56
echo ‘$name‘ //输出$name
echo "$age"
echo ‘$s"co"re‘
echo "$n‘am‘e";
age=20;变量名一般用‘{}‘括起
echo "my age is ${age}ee"
read 从输入设备读取数据给变量
read 变量名1 变量名2//输入值是,空格区分值分配,假设变量已经分配完毕,最后全部的值赋给最后一个变量
shell脚本參数值
./sh1.sh abcf 121 466
位置參数获取值:
$0:运行文件名称
$1:获取第一个參数值
$2:获取第二个參数值
$@:获取全部的參数值
$*:获取全部的參数值
几个特殊符号:
$$:获取当前进程ID(pid)
$?:上一次命令运行成功与否(0:成功 非0:失败)
echo 输出控制
\n:换行
\t:tab
\c:下一个echo不换行输出
-e :针对 \n \t \c 特殊输出
``
[root@localhost shell2]# da=`date`
语句结构:
a.顺序
b.选择
if 条件
then
//满足条件运行语句
else
//不满足条件运行语句
fi
if 条件;then
//满足条件运行语句
else
//不满足条件运行语句
fi
if 条件;then
//满足条件运行语句
elif 条件
then
//满足条件运行语句
else
//不满足条件运行语句
fi
条件
条件格式:
1.test 比較
2.[ 比較 ]
比較的结果:$?
文件測试:
-d 測试文件是否是文件夹文件
-f 測试文件是否存在
-w 測试文件是否可写
-r 測试文件是否可读
-s 測试文件是否非空
-L 測试文件是否是符号连接
-x 測试文件是否可运行
[root@localhost shell2]# test -d aaaa
[root@localhost shell2]# echo $?
[root@localhost shell2]# [ -d aaaa ]
[root@localhost shell2]# echo $?
数字比較
-eq:相等
-ne:不等
-le:小于等于
-ge:大于等于
-lt:小于
-gt:大于
字符比較
= :相等
!=:不等
-z:空字符
-n:非空字符
-a:多个条件而且
-o:多个条件或者
case语句
case语法:
case var in
value1) 运行语句;;
value2) 运行语句;;
esac
[root@localhost shell2]# echo `expr $a + $b `
[root@localhost shell2]# echo $[$a+$b]
[root@localhost shell2]# echo $[a+b]
[root@localhost shell2]# let ‘a=1+2‘
[root@localhost shell2]# echo $a
练习:
case实现+-*/四则运算
c.循环
linux基本知识2