linux基本知识2

Posted 伙上伴冰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux基本知识2相关的知识,希望对你有一定的参考价值。

vi/vim工具使用


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:用户信息(密码凭证)
/etc/group:用户组信息
/etc/shadow:用户密码及其密码有效期


root:   x         :0    :0   :root:    /root:   /bin/bash
用户名  密码凭证   uid  gid   初始组名 用主目录  shell脚本解                                                  释器
root::0:0:root:/root:/bin/bash//取消"x",可以不需要密码


uid>=0  && uid<=999  系统预留UID
uid>=1000 系统一般用户
  
增加用户命令
useradd/adduser  用户名
useradd test//修改/etc/passwd  /etc/shadow /etc/group   /home/test
-d:指定用户主目录名称
-u:指定uid
-M:不会创建用户主目录


初始组:
a.adduser创建用户时,系统自动创建一个与用户名同名组
b.-g:选项指定新用户所属初始组(组必须先存在,可能与用户名一样)


有效组:
a.-G:指定用户除了属于初始组之外的组
一个用户可以有多个有效组,只能有一个初始组
-g:指定用户初始组
adduser -g test test4 //初始组:test


-G:指定用户有效组
adduser -G test  test5//初始组:test5  有效组:test


设置/修改密码
passwd 用户名
[root@localhost etc]# passwd  test
[root@localhost etc]# passwd  //修改当前root密码




切换用户
su
root -->一般用户: su test//无需输密码
一般用户-->root : su  /su root//需要输入root用户密码
[root@localhost etc]# su test
[test@localhost etc]$ su 


改变用户信息
a.用户名
b.用户提示信息
c.冻结/解冻用户
usermod
usermod  -l   usernewname   useroldname
usermod -c "sdfdsfdsfsd"  test
usermod -L  test //冻结用户
usermod -U  test //解冻用户


增加组
groupadd  
groupadd  group1


删除用户
userdel
userdel  test2//删除用户名,用户主目录不会删除 rm -rf test2 
userdel  -r test4//删除用户名,用户主目录也删除


删除组
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用户的密码为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:当前登录用户名


查看环境变量命令
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 ENDprint "total="' awkfile 
[root@localhost yj]# awk -F , 'BEGINtotal=0 print $1"\\t"$6;total=total+$6 ENDprint "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=`echo "a,b,c:1,2,3:e,r,t" | awk -F :         'print $1"\\n"$2"\\n"$3' `
//反 `` 把``中的命令执行的数据赋值给变量
[root@localhost yj]# data=`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  'BEGINtotal=0 total=total+$5 ENDprint 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 $ageee"


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的主要内容,如果未能解决你的问题,请参考以下文章

Linux基本命令格式

原!linux脚本 expect命令 完成 输入密码交互 进行scp远程文件拷贝

linux系统目录介绍

Linux最基本命令

Linux笔记之压缩解压命令

Linux 基础知识