linux常用命令记录

管理员 发布于 3年前   362

命令别名

alias CMDALIAS='COMMAND [options] [arguments]'

在shell中定义的别名公在当前shell生命周期中有效:别名的有效范围仅为当前shell进程

ualias CMDALIAS  撤消别名

\CMD 使用命令本身,跳过别名

命令替换

把命令中某个子命令替换为其执行结果的过程

$(CMD) `CMD`反引号

bash支持的引号:

``:命令替换

"":弱引用,可以实现变量替换

'':强引用,不完成变量替换


文件名通配,globbing

*:任意长度的任意字符

?:任意单个字符

[]:匹配指定范围内的任意单个字符

[abc],[a-m],[a-z],[A-Z],[0-9],[a-zA-Z],[0-9a-zA-Z]

以下再括一层[]   [[:space:]]

[:space:]空白字符

[:punct:]标点符号

[:lower:]小写字母

[:upper:]大小字母

[:alpha:]大小写字母

[:digit:]数字

[:alnum:]数字和大小写字母

# man 7 glob 看帮助说明

[^]:匹配指定范围之外的任意单个字符


用户:UID,/etc/passwd

组:GID,/etc/group


影子口令:

用户:/etc/shadow

组:/etc/gshadow


用户类别:

管理员:0

普通用户:1-65535

系统用户:1-499

一般用户:500-60000

用户组:

管理员组:

普通组:

系统组:

一般组:

用户组类别:

基本组:用户的默认组

私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组

附加组,额外组:默认组以外的其它组

/etc/passwd

accout:登录名

password:密码

UID:

GID:基本组ID

comment:注释

HOME DIR:家目录

SHELL:用户的默认shell


/etc/shadow

account:登录名

encrpyted password:加密的密码

加密方法:

对称加密:加密和解密使用同一个密码

公钥加密:每个密码都成对儿出现,一个为私钥(secret key),一个为公钥(public key)

单向加密,散列加密:提取数据特征码

1.雪崩效应

2.定长输出

MD5:128位定长输出

SHA1:160位定长输出

useradd username 新加用户

passwd username 改密码

/etc/default/useradd 增加用户配置文件

groupadd groupname 增加组

用户管理:

useradd,userdel,usermod,passwd,chsh,chfn,finger,id,chage


useradd -u 1000 user1

useradd [options] USERNAME

-u UID

-g GID(基本组)

-G GID,...(附加组)

-c "COMMENT" 指定注释信息

-d /path/to/somedirectory 指定家目录

-s /bin/bash 指定shell

-m -k /etc/skel/ 强行家目录

-M 不可创建家目录

-r:添加系统用户


/etc/login.defs useradd配置文件


userdel: 默认不删除家目录

userdel [option] USERNAME

-r:同时删除用户的家目录


id:查看用户的帐号属性信息

-u 用户

-g 组

-G 所有组

-n 名称

finger 查看用户帐号信息

finger USERNAME


修改用户帐号属性

usermod [option] USERNAME

-u UID

-g GID

-a -G GID附加组  不使用-a选项,会覆盖之前的附加组

-c

-d -m 改家目录 -m移动之前家目录文件到新目录

-s shell

-l 改用户名

-L 锁定帐号

-U 解锁帐号

chsh: 改用户默认shell

chfn: 修改用户注释信息

密码管理

passwd [USERNAME]

--stdin标准输入

-l 锁定

-u 解锁

-d 删除用户密码

pwck 检查用户帐号完整性


环境变量:

PATH

HISTSIZE

SHELL


组管理:

groupadd,groupdel,groupmod,gpasswd

创建组

groupadd 

-g GID

-r 添加为系统组,系统用户没有家目录


groupmod

-g GID

-n GRPNAME


groupdel

gpasswd 为组设定密码

newgrp GRPNAME <-->exit 登录组

chage

-d 最近一次的修改时间

-E 过期时间

-I 非活动时间

-m 最短使用期限

-M 最长使用期限

-W 警告时间

权限管理:

chown,chgrp,chmod,umask

r:只读

w:可写

x:可执行


三类用户:

u: 属主

g: 属组

o: 其它用户


chown: 改变文件属主(只有管理员可以使用此命令)

# chown USERNAME file,...

-R 修改目录及其内部文件的属主

--reference=/path/to/somefile file,... 引用参考

chown USERNAME:GRPNAME file,...

-R

chown USERNAME.GRPNAME file,...


# chgrp GRPNAME file,...

-R

--reference=/path/to/somefile file,...


chmod: 修改文件的权限

修改三类用户的权限:

chmod MODE file,...

-R 递归

--reference=/path/to/somefile file,...

修改某类用户或某些类用户权限:

u,g,o,a

chmod 用户类别=MODE file,...


修改某类用户的某位或某位权限:

u,g,o,a

chmod 用户类别+|-MODE file,...

文件默认不能具有执行权限,如果算得的结果中有执行权限,则奖其权限加1;

umask:遮罩码

666-umask 文件  

777-umask 目录


站在用户登录的角度来说SHELL的类型:

登录式shell:

正常通常某终端登录

su - USERNAME

su -l USERNAME

非登录式shell:

su USERNAME

图形终端下打开命令窗口

自动执行的shell脚本


bash的配置文件:

全局配置

/etc/profile, /etc/profile.d/*.sh, /etc/bashrc

个人配置

~/.bash_profile, ~/.bashrc


profile类的文件:

设定环境变量

运行命令或脚本


bashrc类的文件:

设定本地变量

定义命令别名

登录式shell如何读取配置文件?

/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashre --> /etc/bashrc

非登录式shell如何读取配置文件?

~/.bashrc --> /etc/basrc --> /etc/profile.d/*.sh

bash:脚本解释器


I/O重定向

Linux

>: 覆盖输出

>>: 追加输出

set -C: 禁止对已经存在文件使用覆盖重定向;

强制覆盖输,则使用 >|

set +C: 关闭上述功能


2>: 重定向错误输出

2>>: 追加方式

&>: 重定向标准输出或错误输出至同一个文件


<: 输入重定向

<<: 此处文档

<< EOF

# cat >> /tmp/file.txt << EOF

把输入的内存追加到/tmp/file.txt里


管道:命令

命令1|命令2|命令3| ...


tee 输出到文件和标准输出

wc -l /etc/passwd 输出文件行数


正则表达式(贪婪模式)

.: 表示任务单个字符

[]: 匹配指定范围内的任意单个字符

[^]: 匹配指定范围外的任意单个字符

[abc],[a-m],[a-z],[A-Z],[0-9],[a-zA-Z],[0-9a-zA-Z]

以下再括一层[]   [[:space:]]

[:space:]空白字符

[:punct:]标点符号

[:lower:]小写字母

[:upper:]大小字母

[:alpha:]大小写字母

[:digit:]数字

[:alnum:]数字和大小写字母


匹配个数:

*:匹配其前面的字符的任意次

.*:任意长度的任意字符

\?:匹配其前面的字符1次或0次

\{m,n\}:匹配其前面的字符至少m次,至多n次


位置锚定:

^:锚定行首,此字符后面的任意内容必须出现在行首

$:锚定行尾,此字符前面的任意内容必须出现在行尾

^$:空白行

\<或\b:锚定词首,其后面的任意字符必须作为单词首部出现

\>或\b:锚定词尾,其前面的任意字符必须作为单词的尾部出现

\<root\>


分组:

\(\)

\(ab\)*  ab可以出现任意次

后向引用

\1: 引用第一个左括号以及与之对应的右括号所包括的所有内容

\2: 

\3:

He love his lover.

She like her liker.

He like his lover.

bash

变量声明

本地变量:

VARNAME=VALUE 作用域为整个bash进程:

局部变量

local VARNAME=VALUE 作用域为当前代码段

环境变量:作用域为当前shell进程及其子进程;

export VARNAME=VALUE

VARNAME=VALUE

export VARNAME

"导出"

脚本在执行时会启动一个子shell进程;

命令行中启动的脚本会继承当前shell环境变量;

系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量;


位置变量:

$1,$2,$3, ...

shift 踢除参数

./filetest.sh /etc/fstab /etc/inittab

$1:/etc/fstab

$2:/etc/inittab

特殊变量

$? :上一命令的执行状态返回值

程序执行结果

程序状态返回代码(0-255)

0:正确执行

1-255:错误执行,1,2,127系统预留

$# : 参数的个数

$* : 参数列表

$@ : 参数列表


输出重定向:

>

>>

2>

2>>

&>

撤消变量:

unset VARNAME

查看当前shell中变量:

set

查看当前shell中的环境变量:

printenv

env

export

脚本:命令的堆砌,按实际需要,结合命令流程

bash中如何实现条件判断?

条件测试类型:

整数测试

字符测试

文件测试

条件测试的表达式:

[ expression ]命令

[[ expression ]]关键字

test expression

整数比较:

-eq:测试两个整数是否相等:比如 $A -eq $B

-ne:测试两个整数是否不等:不等,为真;相等,为假;

-gt:测试一个数是否大于另一个数:大于,为真,否则,为假;

-lt:测试一个数是否小于另一个数:小于,为真,否则,为假;

-ge:大于或等于

-le:小于或等于


命令间的罗辑关系:

逻辑与: &&

第一个条件为假时,第二个条件不用再判断,最终结果已经有;

第一个条件为真时,第二个条件必须得判断;

逻辑或: ||


条件判断,控制结构:

单分支if语句


if 判断条件; then

statement1

statement2

...

fi


双分支的if语句:

if 判断条件; then

statement1

statement2

...

else

statement3

statement4

...

fi


多分支的if语句

if 判断条件1; then

...

elif 判断条件2; then

...

elif 判断条件3; then

...

else

...

fi


shell中如何进行算术运算:

A=3

B=6

1. let 算术运算表达式

let C=$A+$B

2. $[算术运算表达式]

C=$[$A+$B]

3. $((算术运算表达式))

C=$(($A+$B))

4. expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用

C=`expr $A + $B`


exit: 退出脚本

exit #可自定义状态码

如果脚本没有明确定义退出状态码,哪么,最后执行的一条命令的退出码即为脚本的退出状态码


文件测试:

-e FILE:测试文件是否存在

-f FILE:测试文件是否为普通文件

-d FILE:测试指定路径是否为目录

-r FILE:测试当前用户对指定文件是否有读取权限 

-w 写

-x 执行

[ -e /ec/inittab ]

[ -x /etc/rc.d/rc.sysinit ]


测试脚本是否有语法错误

bash -n *.sh

bash -x *.sh 单步执行

/dev/null:软件设备,bit bucket,数据黑洞


编程能力:

脚本编程

grep,sed(流编辑器),awk

sed基本用法:

sed: Stream EDitor

行编辑器(全屏编辑器:vi)

sed: 模式空间

默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕


sed [options] 'AddressCommand' file ...

-n: 静默模式,不再显示模式空间中的内容

-i: 直接修改原文件

-e: SCRIPT -e SCRIPT:可以同时执行多个脚本

-f /PATH/TO/SED_SCRIPT

sed -f /path/to/scripts file

-r: 表示使用扩展正则表达式


Address:

1. StartLine,EndLine

比如1,100

$: 最后一行 

2. /RegExp/

/^root/

3. /pattern1/,/pattern2/

第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行

4. LineNumber

指定的行

5. StartLine, +N

从startLine开始,向后的N行;


Command:

d: 删除符合条件的行;

p: 显示符合条件的行;

a \string: 在指定的行后面追加新行,内容为string

\n: 可以用于换行

i \string: 在指定的行前面添加新行,内容为string

r FILE: 将指定的文件的内容添加至符合条件的行处

w FILE: 将地址指定范围内的行另存至指定的文件中

s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一个被模式匹配到的字符串

加修饰符

g: 全局替换

i: 忽略字符大小写

s///: s###, s@@@

\(\), \1, \2

l..e: like --> liker

love --> lover

sed 's#l..e#&r#g' sed.txt

set 's#\(l..e\)#\1r#g' sed.txt

set 's#l\(..e\)#L\1r#g' sed.txt

&: 引用模式匹配整个串

字符测试:

==: 等号两端要有空格,否则会显示为赋值,相等为真,不等为假

!=:是否不等,不等为真,等为假.

>

<

>=

<=

-n string: 测试指定字符串是否为空,空为真,不空为假

-s string: 测试指定字符厦是否不空,

fuser -mk 设备名   踢出正在访问该设备的所有用户

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

该博客于2020-12-7日,后端基于go语言的beego框架开发
前端页面使用Bootstrap可视化布局系统自动生成

是我仿的原来我的TP5框架写的博客,比较粗糙,底下是入口
侯体宗的博客

      订阅博客周刊

文章标签

友情链接

HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群
侯体宗的博客