linux命令大全:
su 用户
sudo su 用户
修改密码:passwd 用户名
更改所有者:chown 用户名:用户名(组) /文件
更改权限:chmod 777 文件 以root身份进去
ps -ef 查看进程,可以用grep筛选
查看所有端口:
netstat -antp
查看所有的进程
ps -ef
关机命令:shutdown.up
pwd 查看当前目录
r 4 读
w 2 写
x 1 运行
ll 当前文件夹下面的文件(夹)明细
dir 等同于 ls
马哥讲解:
操作系统组成结构:
硬件,内核(平台,kernel),库(包,api),ide(集成开发环境)
dll动态链接库(windows系统)
so(共享对象)
认证机制:Authentication
授权:Authorization
审计:Audition(日志)
命令提示符:prompt
命令:
magic number:魔数
shebang(开始的必须写的shell)
命令:command options argument
有些选项是可以带参数的
ls:list 列表,列出
目录也是文件,路径映射文件
路径:从指定起始点到目的地所经过的位置
系统里面所有的位置都是目录
FHS:文件系统标准文件夹
pwd:当前目录(pringting working directory)
ls -l dev
ls -l 显示长的
-rw------- 一共10位
第一位是 文件类型 -:普通文件,d:目录文件,b:块设备文件,c:字符设备文件,l:符号链接文件,p管道文件,s:套接字文件
后面9位是权限:每三位一组,每一组都是由:rwx(读,写,执行)
数字:文件硬链接的次数
文件的属主
文件的属组
文件大小(size,默认是字节)
时间戳(timestamp),最近一次访问时间,最后一次修改时间,最后一次改变的时间,在这里显示的是最后一次修改时间
ls -lh:变成多少kb,多少兆啊
隐藏文件以.开头
ls -a:显示隐藏文件
ls ..:表示显示上级目录
ls -A : 显示所有目录,但是不显示隐藏文件
ls -i 文件的缩影节点(*)
ls -r 逆序的显示
ls -R 显示所有的文件(文件中的文件)
liunx的主目录:home这个目录
cd ~用户名 这是管理员进入指定目录的家目录
cd - 在前一个目录和当前目录来回切换
命令类型:
内部命令(shell内置)
外部命令:在文件系统的某个路径下有一个与命令名称相同的可执行文件
type 命令 显示指定命令属于哪种命令
which 命令 属于哪个文件夹
hash 使用了多少次该命令
缓存为王
ntp 网络时间服务协议
获得命令的使用帮助:
内部命令:help 命令
外部命令:命令 --help
命令使用手册:
man 命令
man这个命令
分章节:
1:用户命令
2:系统调用
whatis 命令 查看该命令出现在哪些章节
[]:可以多选
...:可以出现多次
|:多选一
cal 日历
echo (内置命令)重要脚本命令
printf (内置命令)默认不打印换行符,后面跟字符或者格式
0 000 ---: 无权限
1 001 --x:
2 010 -w-
3 011 -wx
4 100 r--
5 101 r-x
6 110 rw-
7 111 rwx
777 rwxrwxrwx 这样的 ,一般都是9位
用户:uid /etc/passwd 这里面定义了所有用户的的id
组:gid /etc/group 这里定义了组的id
影子口令:/etc/shadow 用户密码在这里面
/etc/gshadow 组密码在这里面
用户列表:
管理员:id为0
普通用户:1-65535 一般有这么多用户(以二进制的方式)
(1)系统用户:1-499 在这里面是系统用户(后台自动运行的用户)
(2)一般用户:500-60000 一般用户的id
组列表:
管理员组;
普通组:
(1)系统组:
(2)一般组:
加密方法
(1)对称加密:加密和解密使用同一个密码
(2)公钥加密:每个密码都成对出现,一个对私,一个对公
(3)单向加密:散列加密:提取数据特征码---》也叫指纹加密
手动添加组
group 组名
手动给用户指定id -u id号 这样使用
useradd -u 1000 用户名
手动新增用户指定某个组 -g 组id 组一定要先存在,这是指定到基本组
手动新增用户指定某个组 -G 组id 这个加载附加组
用户的注释信息:-c “信息”
用户的家目录: -d 家目录路径
-s shell的路劲
-m 强制给用户创建家目录,一般与-k一起使用
-M
-r 添加一个系统用户(id小于500)
/etc/shells 查看所有可用shell
系统里面的环境变量:
PATH
HISTSIZE
SHELL 使用:echo $SHELL 查看当前用户的shell
/etc/login.defs 这里面有一些基本数据
删除用户:
userdel [选项] 用户名 一般删除用户默认不会删除家目录
-r 用户名 删除用户的家目录和用户
id:查看用户的基本信息
-G 当前用户的所属组
-n 显示名称
finger 用户名 查看用户账号信息
usermod与useradd用法差不多
-a -G GID 不使用-a会覆盖此前的附加组
-d -m 修改为新的家目录,并且复制原来里面的文件
-s 修改shell
-l 修改用户名
-L 锁定用户
-U 解锁用户
chsh 用户 修改用户的默认shell
chfn 用户 修改用户的注释信息
passwd 用户 修改用户密码
--stdin 从标准输入接收字符串
-l 锁定用户
-u 解锁用户
-d 删除用户密码
-n 使用最小天数
-x 使用最大天数
pwck 检查用户账户完整性
组管理:
groupadd 创建组
-g 指定id
-r 添加一个系统组(id小于500的)
groupmod 修改组的信息
-g 修改gid
-n 修改组名
groupdel 删除一个组
gpasswd 组名 给一个组加上密码
chage 修改密码属性
-d 最近一次修改时间
-E 过期时间
-m 最短使用期间
-I 非活动期限
-M 最长使用期限
-w 警告时间
tar zxvf ./jdk-7-Linux-i586.tar.gz -C /usr/lib/jvm
echo $LANG 查看编码
locale 查看是否安装了中文包
en_US.UTF-8 这是英文版的
zh_CN.UTF-8 这是中文的
LANG='zh_CN.UTF-8' 这是切换中文
tar
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
下面的参数-f是必须的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
解压
tar -xvf file.tar //解压 tar包
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2 //解压 tar.bz2
tar -xZvf file.tar.Z //解压tar.Z
unrar e file.rar //解压rar
unzip file.zip //解压zip
总结
1、*.tar 用 tar -xvf 解压
2、*.gz 用 gzip -d或者gunzip 解压
3、*.tar.gz和*.tgz 用 tar -xzf 解压
4、*.bz2 用 bzip2 -d或者用bunzip2 解压
5、*.tar.bz2用tar -xjf 解压
6、*.Z 用 uncompress 解压
7、*.tar.Z 用tar -xZf 解压
8、*.rar 用 unrar e解压
9、*.zip 用 unzip 解压
vi etc/profile 在这里面设置环境变量
权限:
chown :改变文件属组(只有管理员才有)
用户 文件,..... 可以多个 ,把后面的文件改为该用户
-R :修改目录及其内部文件的属组
--reference=/path/to/somefile file,... 参考,把file的文件修改为somefile一样(这是组名和用户一起修改的)
chown USERNAME:GRPNAME file,.... 即改变名称和组名
:GRPNAME 这是只修改组名
USERNAME.GRPNAME file,..效果是一样的
chgrp 组名 文件名,....
--reference=/文件 修改为的文件
修改文件的权限:
chmod :修改文件权限
(1)修改三类用户的权限
chmod 777 file,....
-R
--reference/文件 修改成的文件
(2)修改某类用户或某些类用户权限
u,g,o,a (u:开始的3位,g:中间3位,o:后面3位,a:所有的)
chmod 用户类别=MODE file,....
例子:chmod u=rwx 文件名
chmod g=r 文件名 这是这组只有读这个功能
chmod g=r,o=r 文件名 这是组和其他用户有读的功能
chmod go=r 文件名 这是简写
chmod g=rx,o= 文件名 这是其他的为空---
(3)修改某类用户的某位或某些类权限
u,g,o,a
chmod 用户类别 +|- MODE 文件名
例子:chmod u+r,g-x 文件名 把用户的权限加上读,把组权限减去执行
chmod +x 文件名 把3类用户全部加上执行
chmod -rwx 文件名 可以同时操作多钟权限
手动添加用户:
(1)etc/group 添加组
(2)etc/passwd 添加用户
(3)etc/shadow 添加用户基本信息,包括密码这些
手动生成密码:
passwd
openssl passwd -1 -salt ‘随便输’ 这是生成一窜加上掩的密码
bc是计算器
umask:遮罩码
创建文件:666-umask
创建目录:777-umask
umask 查看当前用户的umask
umask 数字 修改用户的umask 默认数字是0022 第一位不用看
touch 文件名 这是创建的文件 文件默认的是没有执行权限的,如果算的结果又执行权限,则将结果加一
站在用户角度,shell的类型:
一,登录式shell
(1)正常通过某终端登录的shell
(2) su -USERNAME su -l USERNAME
二,非登录式shell
(1)su USERNAME
(2)图形终端下打开命令窗口
(3)自动执行的shell脚本
bash的配置文件:
全局配置
/etc/profile,/etc/profile.d/*.sh,/etc/bashrc
个人配置
~/.bash_profile,~/.bashrc
profile类的文件:
(1)设定环境变脸
(2)运行命令或脚本
bashrc类的文件:
(1)设定本地变量
(2)定义命令别名
登录式shell如何读取配置文件
/etc/profile --> /etc/profile.d/*.sh -->~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非登录式shell如何读取配置文件
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
nano .bashrc 在这里面增加别名的
profile这个文件里面是命令这些东西的
alias 别名=‘命令’
find / -name 需要查找的名字
tr 实现字符集转换或删除命令
管道和重定向
运算器,控制器:cpu
存储器:RAM
输入设备/输出设备
程序:指令
系统设定
默认输出设备:标准输入,STDOUT,1
默认输入设备:标准输入,STDIN,0
标准错误输出:STDERR,2
标准输入:键盘
标准输入和错误输出:显示器
I/O重定向:
> 覆盖输出 这里不能覆盖错误输出 例如:ls /var > /opt/var.out
>> 不覆盖输出
set -C 这是禁止覆盖输出
set +C 开启覆盖
在set -C这种情况 还是想强制覆盖 则 >| 这样就可以了
2> 覆盖输出 这里会覆盖错误输出
2>> 不覆盖输出
&> 重定向所有输出
< 输入重定向 tr ‘a-z’ 'A-Z' < adsSDSSDdsd
<< 符号 文档结束符号
运用这种方式 在脚本中生成文档
管道:前一个命令的输出,作为后一个命令的输入
命令1 | 命令2 | 。。。。
cut -d: -f1 /etc/passwd 查看passwd的第一列
grep和正则表达式:
grep:根据模式搜索文本,并将符合模式的文本行显示出来
grep ‘’ 和 grep “” 第一个是强匹配,后面是若匹配 若里面没有正则表达式的话,可以不用''或“”
-i 忽略大小写
--color 颜色
-v 显示没有被匹配的行
-o 只显示被模式匹配到的字符串
正则表达式:是匹配的贪婪模式
元字符
.:表示匹配任意字符
[];匹配指定范围内的任意单个字符
[^];匹配指定范围外的任意单个字符
字符集合:
[:digit:];数字 使用方式:grep '[[:digit:]]$' /... 这是最后一个字符是数字的行
[:lower:]:小写字母
[:upper:];大写字母
[:punct:]:标点
[:space:]:空白
[:alpha:];所有字母
[:alnum:]:所有字母和数字
匹配次数:
*:匹配其前面的字符任意次
.*:任意长度的任意字符
?:匹配其前面的字符一次或零次(一般要用转义字符\)
\{n,m\}:查找出最少n次,最多m次
位置锚定:
^:这是锚定行首,此字符后面的任意内容必须出现在行首 例如:grep ‘^root’
$:这是锚定行尾,此字符后面的任意内容必须出现在行尾 例如:grep 'bush$'
^$;这是表示空白行
\<或\b:其后面的任意字符必须作为单词首部出现 锚定词首
\>或\b;其前面的任意字符必须作为单词的尾部出现 锚定词尾
fgrep:不支持正则表达式,速度快
shell编程:
编译器,解释器
编程语言:机器语言(0,1),汇编语言,高级语言
静态语言:编译型语言
强类型(变量)
关键字:
c,c++,java,c#
动态语言:解释型语言
弱类型
边解释边执行
asp,php,shell,python,perl
nua
变量:内存空间,命令
内存:编址的存储单元
进程:
编程能力:
脚本编程:是面向过程的
bash变量类型:
环境变量:
本地变量:
位置变量:
特殊变量:
本地变量:
VARNAME=VALUE 作用域为整个bash进程
局部变量:
local VARNAME=VALUE 作用域为当前代码段
环境变量:作用域为当前shell进程及其子进程
export VARNAME=VALUE
位置变量:
$1,$2,.....
特殊变量:
$?:上一个命令的执行状态返回值
程序执行之后,可能有2类返回值
程序执行结果
程序状态返回代码(0-255)
0:正确执行
1-255;错误执行 (1,2,127系统预留的,其他的将来我们写脚本可以自己定义)
输出重定向的位置:/dev/null 这里是软件模拟设备 数据黑洞(执行结果不会显示)
>
>>
2>
2>>
&> 不论错误还是正确
撤销变量:
unset VARNAME 撤销该变量
查看当前shell的变量
set
查看当前shell中的环境变量:
printenv
env
export
脚本在执行的时候会启动一个子shell进程
命令行中启动的脚本会继承当前shell环境变量
系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量
bash:
引用变量:${变量名}
echo 即等于打印
''是强引用的,里面不能用变量
脚本:命令的集合,按照实际需要,结合命令流程控制机制实现
第一行必须是:
shebang:魔数
#!/bin/bash 这个路径是一个解释器
#注释行,不执行
查看
yum repolist | grep mysql
yum repolist
yum clear
yum makecahe
yum repolist
cd /etc/yum.repos.d/
bash中条件判断:
判断类型有三种
整数测试
字符窜测试
文件测试
条件测试的表达式:
[ 表达式 ]
[[ 表达式 ]]
test 表达式
整数比较(一般需要2个):
-eq:测试两个整数是否相等:比如[ $a -eq $b ] 相等为真,不等为假
-ne:测试2个整数是否不等 不等为真,相等为假
-gt:测试一个数是否大于另一个数:大于为真,小于为假
-lt:测试一个数是否小于另一个数,小于为真,否则为假
-ge:大于或等于
-le:小于或等于
bash中语句中的逻辑关系:
逻辑与:&& a&&b a为真,b执行 a为假,b不执行
或:|| a||b a为真,b不执行 a为假,b执行
非:! !a a为真,则为假:a为假,则为真
grep,egrep,fgrep 文本查找
文件查找:
locate :
非实时,模糊匹配,查找是根据全系统文件数据库进行的(大致是一天保存一次到默认数据库)
updatedb,手动生成文件数据库
速度快
find:
实时查询,精确,通过遍历指定目录中的所有文件,速度慢,支持许多中查找标准
例如: find 查找路径 查找标准 查找到以后的处理运作
查找路径(默认为当前目录)
查找标准:默认为指定路径下的所有文件
处理动作:默认为显示
匹配标准:
-name 文件名 对文件名做精确匹配(严格区分大小写)
支持文件名统配
*
?
[]
-iname 文件名; 对文件做精确匹配(不区分大小写)
-regex 模式 正则表达式; 基于正则表达式模式进行匹配
-user 属主
-group 属组
-uid 根据uid查找
-gid 根据gid查找
-nouser 查找没有属主的文件
-nogroup 查找没有属组的文件
-type 根据文件类型查找
f:普通文件
d:目录文件,
b:块设备文件,
c:字符设备文件,
l:符号链接文件,
p:管道文件,
s:套接字文件
-size 查找文件大小 find /home -size 1M
[+|-]#k 前面的加减是大于小于,如果没有,就是精确
M
G
组合条件:
-a 2个都匹配 find /opt -nouser -a -type d -ls
-o 其中一个匹配
-not 没有匹配 find /opt -not -type d
文件系统访问列表
tom
tom,tom基本组
jerry:other:rw-
FACL:filesystem access control list
利用文件扩展保存额外的访问控制权限
进程:
线性内存
物理内存
TCP/IP:安全
脚本编写:
编译器,解释器
编程语言:机器语言,汇编语言,高级语言
静态语言:编译型语言
强类型(变量)
事先要先转换成可执行格式
c c++ java
动态语言:解释器语言
弱类型
边解释边编译
.net php shell python perl
bash:脚本解释器
面向过程:shell,c
面向对象:java,python,perl,c++
变量:内存空间,命令
内存:编址的存储单元
变量类型:事先确定数据的存储格式和长度
强类型:变量在使用前,必须事先声明,甚至还需要初始
弱类型:shell,变量随时用随时申明,甚至不区分类型
编程能力:
脚本编程
bash变量类型:
环境变量:
作用为当前shell进程以及子进程
定义环境变量关键字:export
脚本在执行时会启动一个子shell进程
命令行中启动的脚本会继承当前shell环境变量
系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量
本地变量:
bash:
引用变量:${变量名},避免混淆的时候才加括号
局部变量:需要加上一个local的关键字,只对当前代码段
位置变量:
$1,$2....
shift
特殊变量:
$?,上一个命令执行状态返回值
$#:传入参数的个数
$*:传入参数的列表
$@:传入参数的列表
输出重定向的位置:/dev/null
变量撤销:unset 变量名 操作变量的时候是不需要加$的
查看当前shell的变量 set --这是查看所有的变量
shell的默认变量都是字符串的
bash条件判断:
类型:整数测试,字符串测试,文件测试
表达式:[ 表达式 ]
[[ 表达式 ]]
test 表达式
变量名称:只能包含字母,数字和下划线,并且不能以数字开头,不能跟系统中已有的变量相同
wc -l 查询文件的行数
cut -d 截取
liunx截取:
var=http://www.google.com/test.htm
echo ${var#*//} ---结果:www.google.com/test.htm 注释:其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
echo ${var##*/} ---结果:test.htm 注释:##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
echo ${var%/*} ---结果:http://www.google.com 注释:%/* 表示从右边开始,删除第一个 / 号及右边的字符
echo ${var%%/*} ---结果:http: 注释:%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
echo ${var:0:5} ---结果:http: 注释:其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
echo ${var:7} ---结果:www.google.com/test.htm 注释:其中的 7 表示左边第8个字符开始,一直到结束。
echo ${var:0-7:3} -结果:test 注释:其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
echo ${var:0-7} ---结果:test.htm 注释:表示从右边第七个字符开始,一直到结束。
条件判断:(返回的值必须是状态的0)
单分支的if语句
if 判断条件;then
内容。。
fi(这个必须是单独一行)
双分支的if语句
if 判断条件;then
内容。。
else
内容。。
fi
多分支的if语句
if 判断语句;then
内容。。
elif
内容。。
else
内容。
fi
shell脚本的算数运算:
前面加let 表名这是一个算数
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 数字 这是自定义退出之后的状态
定义退出状态码:如果脚本没有定义退出状态码,那么最后一条命令的执行状态就是退出状态码
如何进行文件测试:
bash中常用的条件测试
-gt
-le
-lt
-eq
-ge
文件测试:
-e FILE:测试文件是否存在
-f FILE:测试文件是否为普通文件
-d FILE:测试指定路径是否为目录
-r FILE:测试指定文件对当前用户是否有可读权限
-w FILE:测试指定文件对当前用户是否有可写权限
-x FILE:测试指定文件对当前用户是否有可执行权限
例如:[ -e /etc/profile ] [ ! -e /etc/profile ]
测试脚本是否是否有语法错误
bash -n 脚本
bash -x 脚本 会把脚本执行的语句全部显示出来*很重要的测试
脚本带参数
利用的是位置变量 $1,$2......
位置变量:shift 用于当引用参数过多之后,就用这个轮替(默认踢掉一个,但是后面可以加数字)
判断参数不能为空的一个特殊符号
$#:判断参数的个数
$*:参数列表
$@:参数列表
字符串比较:字符串测试
==或=:判断2个字符串是否相等 [ "$a" = "$b" ] 等号2遍要有空格,可以不加引号
!= :记住是要加空格
-n 字符串 ; 测试指定字符串是否为空
-s 字符串 : 测试指定字符串是否不为空
bc
脚本for循环
进入条件,退出条件
for
for 变量 in 列表;do
循环体
done
列表的指定数:1、{1..100}这是1到100
2、seq [起始数] [步进长度] 结束数
declare -i SUM=0
-i 表示整形
-x 将一个变量申请为环境变量
while
until
grep,sed(流编辑器),awk
sed的基本用法:stream EDitor
行编辑器(全屏编辑器:vi编辑器)
sed:模式空间,逐行读取
默认情况下,不编辑原文件,只对模式空间中的数据做处理
sed [选项] "指定地址(对于哪些行进行)命令" 文件(可以多个)
指定地址:
1、开始行,结束行 例如:1,,100 这就是1到100行 $:表示最后一行,$-1:倒数第二行
2、正在表达式 例如:/RegExp/ /^root/
3、/模式地址1/,/模式地址2/ 第一次被模式地址1匹配到的行开始,至第一次被模式地址匹配到的行结束,这中间的所有行
4、只给一个数值,这表示特定的这行
5、指定起始行,+n 从指定行开始,向后n行
command:命令
d:删除选定行
p:显示符合条件的行
a \内容: 在制定的行后面追加新行,内容为“内容”
i \内容: 在制定的行前面追加新行,内容为“内容”
r 文件路径: 将制定文件的内容添加至符合条件处
w 文件路径: 将地址制定范围内的内容另存至制定的文件中
s/模式/内容/修饰符:查找并替换 将模式里面的替换成内容(默认每一行中第一次被模式匹配到的字符串)
加修饰符 g:全局替换
i:忽略大小写
s///=s###=s@@@
选项:
-n 只显示符合条件的行