LINUX操作

Linux
1.目录:
安装系统

简单命令

文件系统

文本操作

VI

正则表达式

文本编辑

用户管理

权限管理

安装软件

脚本编程

2.Create:
安装操作系统 ----> 配置网络 ----> 克隆集群

3.Command:
以查看命令为例:
type:命令类型
#外部命令 & 内部命令: 外部在磁盘 path,内部在kernel,shell (内存两部分,kernel和可以用的)
#是个程序,子进程,跑完自动挂掉。

file:文件类型
#外部命令是可执行文件或者脚本文件(#!…)

echo:打印到标准输出
-n -e(识别转义)
$PATH: 环境变量:路径
#可以查看path echo $PATH

help:内部命令帮助
可以直接,查看有多少内部命令

man: 外部命令帮助
yum install man man-pages -y
类别:
1:用户命令(/bin, /usr/bin, /usr/local/bin)
2:系统调用
3:库用户
4:特殊文件(设备文件)
5:文件格式(配置文件的语法)
6:游戏
7:杂项(Miscellaneous)
8: 管理命令(/sbin, /usr/sbin, /usr/local/sbin)
man utf-8
#ASCI:一个字节,8位,但是第一位恒为0,所以表示0到127个字符
#000… 几个数字1代表用几个字节表示。 例如 1100… 1000… 11用两个 字符流

whereis : 定位命令位置

查看内容:
df -h
#查看分区的储存情况

du -sh ./*
#* 代表分别统计该目录下子的大小

ls -l = ll
#-rw-r–r-- 1 root root 194 Nov 22 01:20 test
#ls -l的输出内容一般有七栏
#1,文件类型 -普通文本文件,
#d目录, bc设备文件(b字节,c字符),l 链接 , s(socket) , p管道
#2.[文件数] 被链接数量
#3,权限
#4,大小,时间,名称

4.Filesystem:
Structure:
目录树结构:虽然底层分区不一样,但是再抽象一层,全给封装成统一结构的虚拟树结构。

#例如第一分区的boot 目录 挂在第三分区的 \ 目录下。

结构:

–/boot: 系统启动相关的文件,如内核、initrd,以及grub(bootloader) 引导文件

–/dev: 设备文件

–/etc:配置文件

–/home:用户的家目录,每一个用户的家目录通常默认为/home/USERNAME

–/root:管理员的家目录;

–/lib:库文件

–/media:挂载点目录,移动设备

–/mnt:挂载点目录,额外的临时文件系统

–/opt:可选目录,第三方程序的安装目录

–/proc:伪文件系统,内核映射文件

–/sys:伪文件系统,跟硬件设备相关的属性映射文件

–/tmp:临时文件, /var/tmp

–/var:可变化的文件

–/bin: 可执行文件, 用户命令

–/sbin:管理命令

Command:
df:显示磁盘使用情况
du:显示文件系统使用情况

ls:显示目录
cd:切换工作目录
#cd - 上一次
#cd ~god god用户家目录 (~扩展)

pwd:显示当前工作目录

mkdir:创建目录
#深度:mkdir –p ./a/b
#横向:mkdir {a ,b} (只建一级目录不用./) (不能有空格,以及单双引号(否则不扩展了))

rm:删除
#-rf a/b (直接a不用前面的或者./)

cp:拷贝
#-r
#cp file newname && cp /file /new

mv:移动 (改名)
#没有r

ln:链接
#ll –i 实际地址
#硬:ln a_1 a_2 文件类型不变,实际地址一样,数量加1
#软:ln -s 文件类型为 l,实际地址不同。
#异同:
#本质:一方修改,都会变。
#硬删了a_1,文件没影响。软删了,爆红(类似留下快捷方式)

stat:元数据(属性)
#时间:浏览时间(Access),内容修改(modify),元数据(change)

touch:
#三时间统一和创文件
5.Operation:
显示文件内容

cat
#直接显示出来

more 分屏
#空格下一面,回车一行,b回翻,看完直接退出

less 分屏
#空格下一面,回车一行,b回翻,看完q退出

head tail
#游标 :head -4 file | tail -1

管道

echo “/” | xargs ls -l
#后面要是有输入的命令
6.VI:
open_close:
#打开:
vim somefile
vim +# :第#行 !
vim + :最后
vim +/what :第一次匹配到的行的行首 !

#关闭:
q #末行模式(esc) !
ZZ #直接
mode:
–编辑模式:按键具有编辑文本功能:默认打开进入编辑模式

–输入模式:按键本身意义

–末行模式:接受用户命令输入

1,转化:
​ 末行 <–> 编辑 <–> 输入

#编辑–>输入:
i: 字符前面 !
a: 字符后面 !

o:光标行下,新建一行           !
O:光标行上,新建一行	          !

I:光标行首
A:光标行尾

#输入–>编辑:
ESC

编辑–>末行:

末行–>编辑:
ESC, ESC
2,编辑:
​ #光标

#字符
h: 左;j: 下;k: 上;l: 右 !

#单词
w: 下词首 !
e: 当前或下词尾
b: 当前或前词首

#行内
0: 绝对行首
^: 行首的第一个非空白字符 !
$: 绝对行尾 !

#行间 !
G:文章末尾
3G:第3行
gg:文章开头

翻屏 !
ctrl:f,b

​ #操作

#删除&替换单个字符
x:删除光标位置字符
3x:删除光标开始3个字符
r:替换光标位置字符

#删除命令 : d
dw,2dd

#复制粘贴&剪切(d 内存缓冲区)
yw,yy
p P

#撤销&重做 !
u 撤销
ctrl+r 重做 撤销的操作
. 重复上一步的操作
3,末行:
#set:设置 !
set nu #number
set nonu #nonumber
set readonly

#/:查找 !
/word #查找到行首
#如果直接在编辑下/,直接开启末行,并且找到该词前
n,N #下上

#!:执行命令 !
!ls -l /

#1,$d :命令组合 #删除1到最后行

#s: 查找并替换 !
1,4s/a/b/gi

s/str1/str2/gi:
范围:
n:行号
.:当前光标行
+n:偏移n行
: 末 尾 行 , :末尾行, -3 !(在编辑中是一行内,这里是全文)
%:全文

分割:
临近s命令的第一个字符为边界字符:/,@,#

附加:
g:一行内全部替换 (默认是一行出现第一个)
i:忽略大小写

7.Regex:
1,grep:
grep word file
#返回满足的行
#-v 反显示 , -e 使用正则
#通配符: *:0到多 ?:1

grep -[acinv] ‘搜索内容串’ filename
-a 以文本文件方式搜索 #不要忽略二进制的数据
-c 计算找到的符合行的次数
-i 忽略大小写
-n 顺便输出行号
-v 反向选择,即找 没有搜索字符串的行
其中搜索串可以是正则表达式!

2,regex:
#匹配操作符:

\ 转义字符
. 匹配任意单个字符
[1249a],[^12],[a-k] 字符序列单字符占位
^ 行首
$ 行尾
<,> 单词首尾边界

| 连接操作符 。。。。。
() 选择操作符 。。。。。
\n 反向引用 。。。。。
#"(oo).*(xx)\2\1 "

#重复操作符:

  •  	匹配0到多次。 
    

? 匹配0到1次。 。。。。。

  • 	匹配1到多次。                        。。。。。
    

{n} 匹配n次。 。。。。。
{n,} 匹配n到多次。 。。。。。
{n,m} 匹配n到m次。 。。。。。

#与扩展正则表达式的区别:grep basic (扩展的 -E 或者 egrep。。。。)
#否则直接当做字符匹配了
?, +, { and |, (, and )

#匹配任意字符:
.*
8.Editing:
1,cut:
#cut:显示切割的行数据

f:选择显示的列
s:不显示没有分隔符的行
d:自定义分隔符

cut -s -d’ ’ -f1-3 file
2,sort:
#sort:排序文件的行

n:按数值排序  #默认字典序
r:倒序
t:自定义分隔符	
k:选择排序列
u:合并相同行

sort -t’ ’ -k2 -nr file
3,wc:
#wc: 统计

wc –[lLcm] file
-l (行数) ,L(长行里面字数), c(字节),m(字符)

#cat file | wc -l #直接wc file 显示3 filename
#ls -l /ect | wc -l
4,sed:
#行编辑器 &相当于VI(全屏阻塞)末行模式

sed [options] ‘AddressCommand’ file

#options:
-n: 静默模式,不打印出来
-i: 直接修改原文件
-e SCRIPT -e SCRIPT:可以同时执行多个脚本
#sed -n -e’/sad/p’ -ne’/asas/d’ abc (e空不空都行)
-f /PATH of SCRIPT :用脚本来处理 ?脚本sed还没会
-r: 表示使用扩展正则表达式

#Address:
可以没有
给定范围
查找指定行/str/

#Command:
d: 删除行
p: 显示行
=:显示文件行号
a \string: 行后加新行,内容为string
#\n:可以用于换行
i \string: 行前面加新行

r FILE: 将指定的文件的内容添加至符合条件的行处
w FILE: 将地址指定的范围内的行另存至指定的文件中;

s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串
	g: 行内全局替换
	i: 忽略字符大小写
	#s///, s# # #, s@ @ @	
	#配合\(\), \1, \2
	
	#扩大查找范围,留下想留下的。

#多范围中间用 ,
#多命令用{=;p} ??? 或者 -e

#sed -n ‘s/(id:)[0-6](:initdefault:)/\15\2/ig’ inittab
5.awk:
‘’’
awk是一个强大的文本分析工具。
相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。
简单来说awk就是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析理.
‘’’
awk -F ‘{pattern + action}’ {filenames}
1范围 2操作

0 支持自定义分隔符

1 支持正则表达式匹配

支持自定义变量,数组  a[1]  a[tom]  map(key)

2 支持内置变量
	ARGC               命令行参数个数
	ARGV               命令行参数排列
	ENVIRON            支持队列中系统环境变量的使用
	FILENAME           awk浏览的文件名
	FNR                浏览文件的记录数	
	FS                 设置输入域分隔符,等价于命令行 -F选项
!!	NF                 浏览记录列数
!!	NR                 已读的记录数
	OFS                输出域分隔符
	ORS                输出记录分隔符
	RS                 控制记录分隔符
	
2 支持函数
	print、split、substr、sub、gsub
	
2 支持流程控制语句,类C语言
	if、while、do/while、for、break、continue

例题:awk对每行都操作一遍。

#1,只是显示/etc/passwd的账户:CUT

awk -F’:’ ‘{print $1}’ passwd

#2,只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行开始前添加列#名name,shell,在最后一行添加"blue,/bin/nosh"(cut,sed)

awk -F’:’ ‘BEGIN{print “name,shell”} {print $1 “,” $7} END{print “blue,/bin/nosh”}’ passwd

#3,搜索/etc/passwd有root关键字的所有行

awk ‘/root/ { print $0}’ passwd

4.统计/etc/passwd文件中,每行的行号,每行的列数,对应的完整行内容

awk ‘/root/ { print NR “\t” NF “\t” $0}’ passwd
实战:

统计报表:合计每人1月工资,0:manager,1:worker
Tom 0 2012-12-11 car 3000
John 1 2013-01-13 bike 1000
vivi 1 2013-01-18 car 2800
Tom 0 2013-01-20 car 2500
John 1 2013-01-28 bike 3500
awk ’ { split($3,date,"-");
if(date[2]==“01”)
{ name[$1]+=$5 ;
if($2 == “0”){role[$1]=“M”}
else{role[$1]=“W”} } }
END{ for(i in name) {print i “\t” name[i]"\t" role[i]} }’ awk.txt

#每行处理用{} 弄在一起,一行{}内多命令 ; , 最后END
#括起来操作全单引号: ’ ’ ,有字符双引号“ ”

#init 文件 启动 3 文字,5图形

9.Right:
三位一体的概念: 用户 , 资源 , 权限

#操作系统的root和普通,,资源的管理和普通

用户

#1,创建
useradd use01
passwd use01
useradd use01
passwd use01
#服务器必须设置密码

#2,切换
su use01
#root切不要密码

#3,改组
groupadd useshare
usermod -a -G useshare use01
#user增加,组。

资源

#资源所属组
chown user:group file (不改可省略)
权限

#字符型和数字(421)

#改完权限还没刷新	
#文件的,,x  可执行
#文件夹,,x  cd

chmod [ugo][±][rwx] directory/file

chmod [数字] directory/file

#当创建完目录,再创建文件时,默认文件是属于use01这个组的,
#一种方法可以选择修改权限就行 (因为一般人还不能进入这个目录)

10.Install
src —-> rpm ——> yum

1,src:
#编译安装

#编译安装
配置文件:Makefile
编译,安装命令:make

#案例:编译安装nginx。
下载源码
tar xf 解压 (撕,定位文件,用这两个就行了)
README
./configure --prefix=/path :有错就按照要求改 创建Makefile
vi Makefile
make:(实际上读Makefile) 编译
make install (make 打开makefile 找install )

#注意:
编译环境
软件依赖
配置项
2,rpm:
#包(要自己管理) redhat packet manage

#安装
rpm安装:一般i
-i filename
–prefix

rpm升级:
-Uvh (v 打印)
-Fvh

rpm卸载: (包名 qa出来的)
-e PACKAGE_NAME
#查询
rpm -qa : 查询已经安装的所有包

rpm -ql PACKAGE_NAME: 查询指定包安装后生成的文件列表

pm -qf /path/to/somefile: 查询文件是由哪个rpm包安装生成的 (逆向)

#例子 (JAVA 安装后有些环境变量

-qa包(配合管道) , -ql(有啥文件)

有的释放有软连接,但是有的没有,要在 /etc/profile配置 (PATH)
#((末行模式:! ls) 查看地址
export JAVA_HOME=/usr/java/jdk1.7.0_67
export PATH=$PATH : $JAVA_HOME/bin(:附加)

配置好,重置资源
source file

#装了有记录,,数据库记录
#包安装:。。。缺点要自己下依赖
3,yum:
#仓库

#基本知识:

类似C / S yum不同是计算在客户端自己算
仓库有包和元数据(packages repodata) (/mnt 仓库在本地的地方)
客户先下元数据,和本地自己算缺啥。

#yum
命令:
yum repolist 看仓库
yum clean all 清
yum makecache 清缓存
yum update
查询:
yum list 包
yum search

安装&卸载:
yum install
remove|erase

分组:
#把包弄成组了 ”“引用当做一个整体 防止空格
yum grouplist
yum groupinstall
yum groupremove
yum groupupdate
#仓库变化:

#换仓库
#cd /etc/yum.repos.d/ (仓库信息在这,yum install会找这里)

#1,epo国内源:
http://mirrors.aliyun.com
centos–>help
before:yum install wget —一定要先下
… —接下来按照help

#2,本地库:

mount /dev/cdrom /mnt
#先挂个本地库盘(例子为一个base库),包不全,但是元数据写的全

cd /etc/yum.repos.d/
mv CentOS-Base local.repo
#留这一个,改名,后缀别错

Vi local.repo
dgg(从光标到开头删) ,dG(从光标到结尾删) , dd(一行) , D(光标以后删到行尾)

#留下并修改如下:

[local]     #repo id
Name=  		#repo name
baseurl=file:///mnt    (yum再找repodata,开启下载)
gpgcheck=0

yum clean all
yum makecache

#3 集群仓库:
#做服务器

例子:中文显示,查看中文文档 (临时赋值)

yum 的 repo 变成aliyun || 本地DVD

yum grouplist
yum groupinstall “Chinese Support“
#装中文

echo $LANG
#en_US.UTF-8
LANG=zh_CN.UTF-8
#改中文

#增加epel的repo仓库:
http://mirrors.aliyun.com
epel>>>>>help
wget centos6…

yum clean all
yum makecache

yum search man-pages
yum install man man-pages man-pages-zh-CN(epel仓库才有这个包)

man bash

#流程是先找 /etc/(这个仓库信息), 这个会告诉你仓库在哪.
11.Shell :
What is bash :
–解释器,启动器

​ •用户交互输入

​ •文本文件输入

读取方式:文件实行方式。

​ –当前shell:source/. #这两个一样 文本文件

​ –新建子shell:/bin/bash file #! /bin/bash chmod脚本(特殊文本,解释器)

-命令概念总结: shell, 外部, 函数 func(){}

-else:

​ ./file , func, #how to use

​ pstree,exit #show processing

Redirection:
-重定向:不是命令
–一切皆文件

–程序自身都有I/O

​ •0:标准输入

​ •1:标准输出

​ •2:错误输出

-控制程序I/O位置 : /proc/$$/fd (ll 出来文件操作符指向)

–1,实战:A界面,输出到B
exec n> /dev/pts/1 (当连接两次时候,会创建新的shell 1)

exec n>& last (指回去)

-2,输出
​ (thero A : 绑定顺序:从左到右)

•one file : 1> file >> (2>& 1 )

•more file:

​ •diff: **ll /usr /god 1> file1 2> file2 ** (god don’t exit)

​ •same:

​ –ll /usr /god 1> file 2> & 1 -A

​ –ll /usr /god > & file -特殊(& usually follow with file_num_discribe)

–ll /usr /god &> file
-3,输入
• read: (command, stuff the proc to input thing to init v until meet \n) , echo $v

•Cat :(not sensitive with \n)

​ •<<<: read v 0<<< “asdsd”

​ •<< : read v 0<< oo

​ »(u could input some rows,end with oo, but read\n

​ »Solution :cat v 0<< oo

​ »Or by .sh :

​ »Vi a.sh

​ »cat v 0<< oo: then input

​ •< : cat 0< file = cat file

socket case: (本来exec 用command 压如bash 结束后 挂掉连接。。。

​ 但是文件操作符,不是命令。然后改变指向。 )

​ exec 8<> /dev/tcp/www.baidu.com/80

​ echo -e “GET / HTTP/1.0\n” >& 8 请求头协议:请求,URL,协议

​ cat <& 8

Variable:
本地:
随shell, v=god

局部:
随函数,local v=god

位置:
(.sh )

echo KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲ (个数),,,,,(*,@ …{12})

​ ($$ 优先级大)

​ ($BASHPID 真实优先小) 管道:是创建了左右子进程

​ ($?) 0:成功

环境:
export

​ 定义: 父子进程 变量改变 互不影响 COW (copy on wirte)

​ 先是类似指向赋值,当变量需要改变时候,再拷贝,保证互不影响

​ 验证:

​ vi a.sh**

​ /bin.bash a.sh & (后台运行)

Quote & Expansion:
引用:
​ a=1 主要可以表达弄成一个元素

​ 1)“ ”,弱,可以扩展。 **echo “ $a” ** ——1

​ 2) ‘ ’ , 强, 不可嵌套。 echo ‘ a ’ — — a ’ —— aa

​ 3) 花括号不能被引用 。

​ 4)写括号,只能1) echo " " $a " " ——“ 1 ”

替换:
​ 表示是命令,值取出来,不输出: ls -l / or $ ( ls -l / ) 可嵌套

State & Logistic:
退出状态:
​ echo $?​ :0为成功,为真。

逻辑判断:
​ && and || : 常用在执行命令,前者先假就停,后者先真就停。

Expression:
算术表达式:
​ **let c = a + a+ a+b ** or c= $ (( a+b )) =后面都不空格

条件表达式:
​ test c or [ c ] 命令要留白 test = [ ]

​ 都用help 查看

总结例题1:
​ –添加用户 –用户密码同用户名 –静默运行脚本 –避免捕获用户接口 –程序自定义输出 :要求重定向了

#!/bin/bash

[ ! $# -eq 1 ] && echo "args error " && exit 1
#看参数个数是不是一个。 能same就same && or ||

id $1 &> /dev/null && echo "user exist " exit 2
#看是否存在。 这个地址类似为垃圾站 。

useradd $1 &> /dev/null && echo $1 | passwd --stdin $1 &> /dev/null && echo "ok " && exit 0

添加用户和密码。 要标准输入重定向

echo “other error”

exit 3

control :
​ help 来查看,一行分号,多行不要

if:
​ if [ 3 -gt 8 ]; then echo yes; else echo no ; fi

for:
​ in [ ] : for i in “asa sds” “sd dsds”; do echo i; done # 空格换行切割

​ ( ( : for ( ( i=0;i<4;i++) ); do echo i; done # ( (自动取值

while:
​ while COMMANDS; do COMMANDS; done

case:
​ case a in

​ 1) echo "You select 1"​ ;;​ 3) echo "You select 2"​ ;;

​ *) echo “a”

​ ;;

​ esac

总结例题2:
​ –用户给定路径 –输出文件大小最大的文件 –递归子目录 :用一定现有的。

#!/bin/bash
#新的shell 执行,省得exit 退出了。

old= I F S I F S = IFS IFS= IFSIFS=’\n’
#for 的 用三个空格分隔。 $’’ 取ASC

for i in du -a $1 | sort -nr;do
#du -sh ./* (分个目录统计,-s总和) -a 每个都算。 取值
filename=echo $i | awk '{print $2}'
#awk 分割
if [ -f $filename ];then
#[] -f 判断
echo f i l e n a m e e x i t 0 f i d o n e I F S = filename exit 0 fi done IFS= filenameexit0fidoneIFS=old
echo “no found”
eixt 1

总结例题3:
•循环遍历文件每一行:流程控制语句 –定义一个计数器num –打印num正好是文件行数

#!/bin/bash
old= I F S I F S = IFS IFS= IFSIFS=’\n’

#for in
num=0
for i in cat test.txt ;do
echo i ( ( n u m + + ) ) d o n e e c h o n u m : i ((num++)) done echo num: i((num++))doneechonum:num
IFS=old

#for((
num=0
lines=cat test.txt | wc -l
for (( i=1 ;i<=lines ; i++));do
head - i t e s t . t x t ∣ t a i l − 1 ( ( n u m + + ) ) d o n e e c h o n u m : i test.txt | tail -1 ((num++)) done echo num: itest.txttail1((num++))doneechonum:num

#while
exec 8<&0
exec 0< test.txt
#输入变成文件
num=0
while read line;do
#read v XXX 让XXX赋值给v,每次读一行
echo l i n e ( ( n u m + + ) ) d o n e e c h o n u m : line ((num++)) done echo num: line((num++))doneechonum:num
exec 0<&8
#不然一会输入口直接关闭,然后断开连接。。。子进程是同一个,和另外连接不一样

#while 的 $ 和上面一样 (简写)
num=0
while read line;do
echo l i n e ( ( n u m + + ) ) d o n e 0 < t e s t . t x t e c h o n u m : line ((num++)) done 0< test.txt echo num: line((num++))done0<test.txtechonum:num
exec 0<&8

#管道
cat testa | while read line; do echo $line; ((num++)) ;echo $num; done

#创了新进程,num 父进程还是不变。改进:写进文件

知识总结:
•1,花括号 mkdir -p sdfsdf/{a,b,c}sdfsdf

•2,波浪线 cd ~god #用户名前缀 root用户

•3,变量&参数 $ $$ $()

•4,命令替换 ls -l ` echo $path 反引号

•5,算术扩展 num=$((3+4))

•6,word拆分,$IFS 制表符,换行 ,空格

•7,路径 *(零到多个任意字符)?

•8,引用删除 echo “hello”

•*,重定向 >

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值