amazing linux basic

用户定义:就是能够获取系统资源的权限的集合

系统识别用户靠用户UID

Linux三类用户

1:管理员 uid=0

2::普通用户 uid=500-65535

3:系统用户 uid=1-499 (一般没有密码,不需要登陆,保障系统运行,不需要家目录)

用户放在/etc/passwd/

Accont:x(密码占位符,表示密码存储在/etc/shadow):uid:gid:描述:家目录:shell

组的分类

1:基本组,也叫主组(就是/etc/passwd里面那个gid所指的组)

2:系统组

3 :附加组

当默认情况下用useradd创建一个用户,它会有一个与它用户名一样的基本组,也叫主组(),

rm �Cf /etc/.passwd.swp,可以删除缓存中的临时文件

ifconfig | grep "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}" -o --colour=auto

cat /etc/shell可以查看当前系统可用的shell类型,有一个特殊的/sbin/nologin是一个不能登陆的shell

组是权限容器,关于组的所有属性信息都在/etc/group下,/etc/group的密码放在/etc/gshadow, /etc/group最后一个user-list是用户的附加组,要想使一个用户加入改组们只需编辑/etc/group,将用户写入对应user-lis即可

groupadd 可以添加一个组

newgrp 组名 可以将当前登陆用户加入到改组中(d当加入时需要密码,所以事先需要为改组创建一个密码,gpasswd),此时对于该用户而言,这个组是该用户附加组,但这是暂时的,可以用exit退出改组,用永久生效需要编辑/etc/group

useradd

-u指定用户uid(默认从上向下排,)

-g 指定用户gid(事先这个组必须存在)

-c 给用户输入注释信息 形式 “string”

-d指定用户家目录(默认除了root,新建用户家都在/home/username,如果指定的家目录存在,则不为你此用户复制初始化环境变量)

-s 指定用户的shell类型

-G 指定用户的附加组

-M禁止为用户创建家目录 -m 必须为用户创建家目录 �Cp为用户指定密码

passwd -l 锁定用户密码 -u 解锁用户密码

Chsh改变用户shell类型 chfn改变用户finger信息,就是-c指定的描述信息

uermod

-u 改变用户uid -g改变用户gid �CG改变用户附加组,一般需要输入-a选项表示追加一个附加组,不覆盖

-d 改变家目录 形势 �Cd /path �Cm username

-L锁定账号 �CU 解锁账号

Userdel 删除用户 �Cr 同时删除用户家目录

id/finger username都可以查看用户的信息

用户信息相关联目录

/etc/passwd (windows的密码用户信息在sam库里的)

/etc/shadow /etc/group /etc/gshadow

Linux密码加密时不仅仅对用户密码MD5加密,还需要加入salt,以便区别相同密码

Openssl passwd �Cl salt hahahoho passwd 123456 可以临时生成一个密码

$ salt $ 生成的密码$

权限有:用户权限,文件权限,进程权限

rwx

对文件而言

r :查看文件 w :用户编辑并保存 x 执行此文件的命令或程序

对目录而言

r :可以使用ls命令查看此目录的文件信息

w :表示用户可以在此目录中创建文件,也可以删除文件

x :表示用户可以cd进这个目录,并且可以使用ls �Cl命令查看此目录的文件,如果你只有r权限,只能ls,不能ll

chmod u+x og=rwx 755 filenamer改变文件权限

chown user:group filename 改变文件的属主属组

chown user filename chgrp更改属组的

chown :group filename

chmod

-R 可以递归改变目录内的文件权限

echo  “123456” |passwd �Cstdin user (在shell脚本中可以直接给用户添加密码,也可以用useradd �Cp 直接指定用户的密码)

chmod - -reference=x c    以x为标准,将c的权限改变成像x的样子

umask值

umask值默认为0022,默认创建目录的权限为rwxrwxrwx-(。。。。w。。w。)

默认的文件权限是rw。rw。rw。-(。。。。w。。w。)

Umask可以设置 uamsk=033,这些只是暂时的,要想永久生效,需要编辑用户环境的变量

创建文件一般不能拥有执行权限

Wild card(通配符)

l * 匹配任意字符

l ? 匹配单一个任意字符

l [0-9] 匹配 0-9中的任意一个字符

l [a-z] 匹配任意一个小写字母

l [A-Z ] 匹配任意一个大写字母

l [ abc] 匹配[ ]内的单一个字符

l [^abc] 匹配所有,除了abc

l [:keyword:]  匹配一个关键词

l [:alpha:] =[A-Za-z]

l [:upper:]= [A-Z ]

l [:lower:] =[a-z]

l [:punct:] 标点符号

l [:space:] 空格或tab

l [:alnum:] 数字加字母

l [:digit:]显示数字

以上所有的全部整体(包括外面的中括号)才表示其含义,所以需要使用时需要在外面在家一层中括号 []

例如:

ls [a-z] = ls [[:alpha:]] 显示一个字符

ls [[:alpha:]] [[:punct:]]* a.txt

一次创建多个文件或目录

mkdir//touch {a,b}{1,2,3} 可以一次创建多个文件或目录

ls [[:alpha:]]??。[jpg]

命令补全

在$PATH路径下寻找

文件名补齐

History可以显示之前执行的命令

echo $HISTORYSIZE 可以查看默认记录多少条历史记录

echo $HISFILE

history 10 显示最近的十条命令

!ec 命令历史里最近一个一ec开头的命令

!165 表示执行命令历史的第165条命令

!?abc 从后面最近一个包含abc命令

!-n 执行倒数第三条命令

引用上一个命令的最后一个参数

!$ 如 ls /var/log/message       cat !$=cat/var/log/message

Esc/alt+.(点号),也可以引用上一个命令的参数

默认情况下history会保存所有命令,包括重复的行,要想消除重复的行或者可以空格,可以通过设置一个环境变量

Export HISTORYCONTROL=ignorespace 表示消除异空格结束的行,也就是如果你在输入命令前加一个空格,命令将不保存在history历史中

Export HISTORYCONTROL=ignoresdups 表示消除连续的重复行,也就是如果你连续输入了两个或多个历史,只保存一个history记录

Export HISTORYCONTROL=erasedups 表示消除不连续的重复行,即不管你输入放入相同历史命令是否连续,均只保存一个

~+用户名 表示别人的家目录

命令替换 ( ` ` ) touch �Ca ` date +"%s:%m"` = touch �Ca $( date +"%s:%m")

变量的定义:变量是系统定义一个可以赋值的参数

变量的分类:(命名规则可以包含字母数字下划线,但只能一字母下划线开头)

本地变量 :用户变量 一般声明变量只对当前shell生效,要想对其他shell生效必须export

环境变量 :定义用户shell环境的变量

预定义变量(位置变量) ($0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $0表示命令本身,而后面的1-9表示对应位置的变量)

特殊变量 ($?(上一个执行结果的状态量0表示成功,>0表示失败) $! (后台运行的最后一个进程pid)$#(位置参数的数量))

变量加{}与不加的区别

Echo $var echo ${var}string 加还可以在变量后加字符串

Echo $var 显示var变量内容

echo ${var}string 显示var内容加字符串

执行 bash /bin/bash可以在当前shell中打开一个子shell

Sh历史

Sh(贝尔实验室) csh  ksh(现在为商业版本)

Bash (born again shell,加强版的shell,一般linux都用,许多Unix有装有bash)

开发语言

编译:c c++ ,静态语言,

解释语言:bash , perl(),Python,php,ruby

Bash shell 是一种弱类型的语言,且不进行浮点运算

#!/bin/bash 这叫shabang

bash �Cn shellscript 查看脚本是否有语法错误

bash �Cx shellscript 可以详细查看脚本执行的过程

bash �Cu shellscript 把脚本中不声明的变量均认为是错的

bash shellscript可以执行脚本

当要执行脚本时,不可以直接以脚本名称执行,因为你的脚本命令不再path路径中

要想直接执行,echo $PATH,在你的当前目录下创建一个/bin目录mkdir bin ,,然后mv script bin 下,然后cd bin 即可直接执行了

echo “redhat”| passwd �Cstdin user 可以直接给用户添加密码

第一个脚本 :添加用户,并且用上面的一句话添加密码

cp �Cav

变量数学运算三种方式

Let D=$A+$B D=$[$A+$B] D=$(($A+$B))

同样道理还可以进行其他的运算(加减乘除)

grep �CE �Ccolour

Sed(stream editor)的非交互式编辑器,本身不对源文件修改,以行为处理单位

工作流程

文本文件――――sed的模式空间(缓冲区)――――sed的输出到屏幕

Sed的命令 sed  '/匹配空间,可以是字符,数字,也可以是范围 /        / '

s 查找替换行 sed 's/this/' file s命令必须写在模式空间第一个斜杠前面

d 删除行 sed '/this/d' file

p 打印匹配行 sed '/this/p'  file 默认会把匹配到的行显示两次,且把模式空间内的内容一并打印出来,如果不想这样,可以加 ―n选项,只显示匹配到的行

即 sed �Cn '/^this/p'

sed 's/ ^this/ the/' file 把以this开头的行中的this换成the,模式空间支持正则表达式,所以sed的匹配先得异常强大,复杂

(数字指定范围)sed '2,3s/line/LINE/'   指定规定连续行的操作,注意当用s命令是/ / /,三个斜杠必须写完,特别是最后一个,否则就报错,逗号是行的分隔符

(字符串指定范围) sed '/is/,/second/s/line/LINE/'  FILE 同样本例中的is,second是用来寻址的,也必须用逗号分隔开,值得注意的是is,second都用 // 包括了起来,这是表示is,second是字符串

修饰符

g 表示全局 ,意思是替换匹配到的行内所有的要替换的,默认是只匹配匹配行的第一个

i 表示忽略大小写 修饰符都必须写在最后面 / 后

引用 (sed引用时必须用括号括起来 /(/) )

& 表示引用模式空间的整个内容,

sed 's/\(^[Tt]his\)/ & is/' file 表示把this或This 替换成this is This is

sed  's/\(this \) \& is/'   file

-e 选项,可以支持多编辑/

sed �Ce  's/ \(this\)/&is/g' �Ce 's/ line/ LINE/gi'  file

-e 可以被 ,分开效果是一样的,也可以实现多编辑

sed �Ce 's/ \(this\)/&is/g' ,'s/ line/ LINE/gi'   file

这样的多编辑可以相同也可以不同,上面的都是替换

Sed '/first/,/third/d'  -e   's/forrth/four/g'   file

插入 i 命令表示在匹配行之前插入一行

sed '/this/i’ file 表示在出现this的那行前面

插入多行

Sed   '/you/ i   \(续行符)

>

>

>file 直到遇到file插入采结束

也可以用另外一种方法,不用续行符

sed   ' /you/i

>

……

>(最后一行要输入文件)

' (直到遇到另一个点号结束)

sed   '/this/r /etc/issue'        file 表示在file 文件中匹配到this的行后读入(即加入/etc/issue)的内容 ,如果文件中出现多个包含this的行,则在每个行后都追加/etc/issue内容,这与插入 i a 命令 一样,如果该文件中有一个this则在该this下面加入一行,如果有n个就该this后面加入n个

y 有点类似tr

sed  'y/t/T' FILE     将FILE小t 替换成大T

将line 换为neli

Sed   's/\(l .*ine\)/ne&/g'   file     此时只是在line前加了一个ne后面也仍有ne

Sed   's/\(l .*\)\(ne\)/\2\1g'  file   此时实现了将line中li与ne调换位置

sed �C i 表示修改源文件

mktemp /tmp/menu.XXXXXX 可以创建一个文件,文件名是随机生成的,所以不会产生重复的文件

cat &gt;&gt; filename <&lt; eof

这样可以交互式输入内容,直到遇到eof结束

文本处理工具

Cat concatenate可以将一个或多个文件输出到标准输出

cat >&gt; filename <&lt; eof 把cat后的所有执行结果都输入到filename中,知道遇到eof结束

-a = vEt 显示所有字符,包括非打印字符

-n 给输出的文件内容编号

-s 可以压缩多个空白行成一个显示

/bin 下的二进制文件一般不要用cat查看,查看会出现一堆乱码,二进制文件可能被损坏,如果查看了,可以用reset(初始化终端)初始化一下

less 既可以向前翻页也可以先后翻页 man的翻页功能就是调用less

/text 搜索字符串

Enter 向下翻一行 k 向上翻一行

空格向下翻一页 b 向上翻一页

-N 可以显示行号

-M可以再文件最后一行显示文件的行数,即现在处于哪个行

more与less 用法基本相同,但是more不能向前翻页

head与tail

默认都显示前十行或者后十行

-n num 可以显示前或后num行

如果要显示某一行,可以head,tail嵌套

如:head -5 1.txt |tail �Cn 1 (在shell中可以挑选出某一行) (其实 tail -n 1=tail 1,以后就可以省略使用)

-f 选项 可以不退出动态查看,可以应用监控web的日志

Grep (Global search Regular Expression and Print out of the line)

Grep "pattern" /path/to/file

grep  "root" /etc/passwd

正则表达式

^ 行首铆钉符,表示行首出现

$ 行尾铆钉符

. 匹配单个字符 grep “t..s”

* 表示匹配0个或多个空格后的字符

grep  "cb*"   file    表示搜索 c ,cb ,cbbbb ,*可以为零,所以单个C也可以被搜索到

[ ]匹配一组字符中的任意一个

[ x―y ] 表示匹配x到y中的一个

有特殊含义的字符必须转义才能得到 如 \$  \.  \?  \#

\&lt; 必须以this开头的一个串

\> 必须以this结尾的一个串

如果要精确匹配一个单词,可以\< thsi>\

\(….\) 分组调用

例 grep "is.*is" = grep "\(is\).*\1"

grep   "a\(bc\).*cd\(cb\).*\2\1"   file

x\{m\} x 出现m次

x\{m,\} x 出现至少m次

x\{m,n\} x 出现m到n次

grep    "6[0-9]\{7}\&gt;"   file

grep   "\<6[2-8][0-9]\{6}\>"   file

grep  "[Cc]at"   file   找猫

grep  "^installing.* lib"   install.log

finger redhat |grep -I “on”

grep 选项

-v 反响显示,匹配到的不显示,匹配不到的显示

-c 显示匹配行数,不显示内容

-n 可以显示匹配行的原文中的行号

-B2显示匹配行的前两行,一共显示三行

-A2显示匹配行的后两行,一共显示三行

-C2显示匹配行的前后各两行,一共显示五行

grep支持正则表达式

当遇到选择时,最好使用扩张正则表达式

g rep �CE=egrep

grep �CE "cat|dog"  filename

一般情况下使用grep即可当遇到选择或者是分组时,使用egrep可能会简化一些

"  " 对grep时弱引用 例如 grep “$1”那么grep就寻找$1这个字符串,不翻译为变量

'  ' 单引号是强引用 它会对 $1翻译,找$1代表的变量值

egrep是扩张正则表达式,他的选项与正则表达式有所不同

amazing linux basic_第1张图片

cut 按照以指定分隔符(默认分隔符为空格或tab)获取某些字段

-d 可以指定分隔符 如 cut �Cd :以冒号为分隔符分成若干字段

-f 表示获取那几段,可以直接加数字cut �Cd :-f 2,3

-c 可以指定显示指定的几个字符 cut �Cc2-4 file 显示file中每行的第2,3,4个字符

经典例子

ifconfig |grep “Inet addr”|cut �Cd : -f2 |cut �Cd ‘ ’ �Cf1|grep �Cv“127.0.0.1” 显示网卡中的ip地址

wc

-l 查看文件有多少行

-w 查看文件有多少单词

一般wc - l 经常用到

rpm �Cqa |wc �Cl 查看系统安装了多少个软件包

sort 为文件排序,默认是从a到z 正向排序

-r 反向排序从 z-a

-f 忽略大小xie

-u 排序并去除重复行

-o (等于重定向)输出到一个文件中去

-t

sort

uniq

-u 显示只出现一次的行(去除重复行)

-d 显示出现多次的行,但只显示一次

-c 显示某一行到底出现了多少次

例 sort userlist。txt|uniq �Cc

diff

比较文件的差异。diff以逐行的方式,比较文本文件的异同处。所是指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。

diff

diff file1 file2 表示以file2为标准,将file1变成file2的样子

path

path file.txt <path 将path打到file上

path -R file.txt &lt;path 将path补丁拆下来

-c 使用上下文输出格式

- u 生成标准格式的补丁

path原理

patch指令让用户利用设置修补文件的方式,修改,更新原始文件。倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行。如果配合修补文件的方式则能一次修补大批文件,这也是Linux系统核心的升级方法之一。

tr

tr ‘ a-z’ ‘A-Z’ &lt;FILENAME 将文件中的小写换成大写

tr ‘ex’ ‘AB’ FILENAME

下面总结一下shell中关于循环的几个结构体

条件测试:

整数测试

字符串测试

文件测试

组合测试条件

算术运算

if条件判断

case条件判断

条件测试使用方式:

test expression 或

[□expression□] 或

[[□expression□]]

说明:

“test”和”[“ 均为命令,”[[”是关键字

上面的形式中的□为空格,必须

整数测试

-eq 等于 [ "$a" -eq "$b" ]

-ne 不等于 [ "$a" -ne "$b" ]

-gt 大于 [ "$a" -gt "$b" ]

-ge 大于等于 [ "$a" -ge "$b" ]

-lt 小于 [ "$a" -lt "$b" ]

-le 小于等于 [ "$a" -le "$b" ]

<, <=,>, >= 此些需要在双括号“(())”中才能使用

(( “$A” > “$B“ ))

字符串测试

= 等于 [ "$a" = "$b" ]

!= 不等于 [ "$a" != "$b" ]

< 小于 [ “$a” \&lt; “$b” ] ,转义

> 大于 [[ “$a” &gt; “$b” ]]

-z 字符串为"null", 意思就是字符串长度为零

-n 字符串不为"null"

文件测试

-f file 测试文件是否为普通文件

-d dir 存在且为一个目录时为真

-h或-L file 测试文件是否为符号链接

-r 文件是否具有可读权限(正在运行此测试命令的用户)

-w 文件是否具有可写权限(正在运行此测试命令的用户)

-x 文件是否具有可执行权限(正在运行此测试命令的用户)

-e 判断文件是否存在

-s 判断文件大小是否为0,不为0时返回真

f1 -nt f2 文件f1比文件f2新

f1 -ot f2 文件f1比文件f2旧

f1 -ef f2 文件f1和文件f2是相同文件的硬链接

! "非" -- 反转上边所有测试的结果

if循环格式(特别注意if elif 后均需要加then)

if [ condition1 ]

then

command

elif [ condition2 ]

then

command

else

command

fi

for循环

for arg in [list]

do

command

done

while循环 需要注意的是对判断条件的修改

while [conditions] while在满足condition时执行条件,不满足是不执行do循环

do

command

done

until循环

until [conditions]

until 在不满足conditions条件时,执行循环,不满足不执行都正好与while相反

do

command

done

你可能感兴趣的:(linux,职场,basic,休闲,Amazing)