Linux常用命令和shell命令

Linux常用命令和shell命令

1. 文件目录

创建目录

mkdir 目录名1 目录名2 ...

创建多级目录

mkdir -p 目录名

查看当前所在目录

pwd

创建文件

touch 文件名

删除文件/目录

rm [文件|目录]

删除目录

rmdir [目录]

剪切/重命名

mv [文件|目录] [目标路径]

复制文件、目录

cp [文件] [目标路径]
cp -r [目录] [目标路径]

创建软链接文件

ln -s [文件|目录] [软链接名]

文件搜索

find [搜索范围] [选项]

# 选项:
# -name 指定文件名 			 *:匹配多个字符	?:单个字符
# -user 指定用户名所有文件
# -size 文件大小			 
# -type 文件类型 			d: 目录	c: 字符装置		b: 区块装置		p: 具名贮列 	f: 一般文件 	l: 符号连结		s: socket
# and: -a 	or: -o  非:!
# 例:查找/etc下50M~100M的文件
find /etc -size +50M -a -size -100M

2. 文件权限

u: 所有者 g; 所有组 o: 其他人 a: 所有人( u、g、o )

r = 4w = 2x = 1
目录lsrm, mkdir, cp, mvcd
文件cat、more、lessvim可执行权限

2.1 更改权限

# 第一种
chmod [{u|g|o|a}{+|-|=}{r|w|x}] [文件名|目录名]
# 第二种
chmod [mode=421] [文件名|目录名]
#更改目录下所有文件权限  (-R 递归)
chmod -R [权限] [目录]

2.2 更改所有者

chown 用户名 文件名

2.3 更改所属组

chgrp 组名 文件名

2.4 权限掩码

umask [-S]
# -S 文字方式

3. 用户

3.1 添加用户

useradd 用户名

3.2 添加密码

passwd 用户名

3.3 查看用户

cat /etc/passwd

3.4 删除用户

userdel -r 用户名

3.5 修改账号

usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][用户帐号]

3.6 将用户添加到组中

usermod -a -G 组名 用户名

4. 用户组

4.1 添加一个组

groupadd [组名]

4.2 查看组

cat /etc/group

4.3 修改组名

groupmod -n [新组名] [原组名]

4.4 删除组

groupdel [组名]

4.5 查看当前在线账户

who 

4.6 查看当前用户及执行命令的消耗时间

w

5. 帮助命令

5.1 获取指令帮助

man [指令名称]
# 回车换行,空格翻页,按q退出

# 查看配置文件详细信息
man [配置文件]

[指令] --help

whatis [指令]

6. 解压和压缩

6.1 压缩

gzip [xxx.gz] [压缩内容]	# 只能压缩文件

zip [xxx.zip] [压缩内容]	# 压缩文件和目录

bzip2 [选项:-k 保留源文件] [文件] # 只能压缩文件

6.2 解压

gunzip [xxx.gz]

unzip [xxx.zip]

bunzip2 [xxx.bz2]

6.3 打包

tar [选项] [xxx.tar.gz] [打包的内容]

# 例
tar -zcvf etc.tar.gz etc/

tar -jcvf etc.tar.bz2 etc

6.4 解包

# 解压到当前目录
tar -zxvf etc.tar.gz

tar -jxvf etc.tar.bz2

#解压到指定目录
tar -zxvf etc.tar.gz -C [目录]

7. 网络指令

7.1 查看当前网络服务

netstat [选项: -t:tcp  -u:udp	 -l:监听的端口  -r:路由]

8. 外设

# 创建挂载点
mkdir cdrom

mount [-t iso9660] /dev/cdrom /media/cdrom

# 卸载
umount [设备文件/挂载点]
# 不允许在当前光盘目录中卸载

9. 网络指令

9.1 查询当前在线用户

w

who

9.2 发送信息

write [当前在线用户]

# 发送:ctrl+d
# 回到命令行:ctrl+c

9.3 发送广播信息

# wall  全称:write all
wall [发送内容]

9.4 发送邮箱信息

# 发送邮件
mail [用户名]
subject:主题
# ctrl+d 发送

# 接收邮件
mail

# 查看邮件
邮件id

# 显示邮件列表
h

# 删除一条邮件内容
d [邮件id]

9.5 网络配置

# (centos7)
nmtui

# centos6
第一步:执行setup指令,选择网络配置
第二步:选择配置设置
第三步:选择eth0
第四步:网络配置
	使用dhcp时 用空格键

9.6 查看用户登录状态

lastlog

10. 关机/重启

1. 服务器不要关机,只能重启

2. 重启之前先关闭服务器上的服务

# 关机   
poweroff

shutdown [选项] [时间]
	选项: -h  关机  halt
		  -r  重启
		  -c  取消
shutdown -h now

halt

# 查看系统级别 
cat /etc/inittab
runlevel

init [选项]
	0:halt
	1:single user mode
	2:Multiuser
	3:Full multiuser mode
	6:reboot

# 重启
reboot 

# 注销
logout

11. vim编辑器

11.1 插入

i	# 当前光标前
a	# 当前光标后
I	# 光标所在行最前
A	# 光标所在行最后
O	# 当前光标行的上一行
o	# 当前光标行的下一行

11.2 编辑

x	# 删除一个字符
dd	# 删除当前行
u	# 撤销上一步指令
yy	# 复制光标当前一行
p	# 粘贴
$	# 回到行尾
0	# 回到行首

11.3 命令

:set nu	# 设置行号
:w		# 保存
:q		# 退出
:qw		# 保持并退出
:q!		# 强制退出

12. 软件安装

rpm: red hat系

对于大型web架构:主包使用源码包安装,次包使用rpm安装;gcc使用yum安装

包全名:未安装软件使用包全名

包名:已安装软件使用包名

12.1 二进制安装

rpm包安装,系统默认包安装

rpm包安装的依赖关系:

  1. 线性依赖

    a->b->c->d 有些软件的依赖有几十个依赖包

    被依赖包安装顺序,从被依赖包依次安装,安装完成后不清楚软件包中间还有那些被依赖的包,这个时候吧安装包重新安装一次。

  2. 环形依赖

    a->b->c->a

    一起安装

  3. 模块依赖

优点: 不需要安装,直接编译,效率高;通过指令直接执行就可以安装

缺点: 不能看到源码;安装过程需要依赖包;安装过程还依赖模块

12.2 源码包安装

  • 优点: 可以看到源码,代码开发,便于升级维护,二次开发;裁剪代码;软件服务搭建起来非常干净,安装指定目录

  • 缺点: 需要手动编译;编译时间长;编译过程出现问题难以解决

安装步骤:

  1. 下载 上传

  2. 解压

tar -zxvf 包全名

3.1. gcc编译器

# 查看
rpm -q gcc
# 安装
yum -y install gcc
# 测试
gcc hello.h

3.2. make编译工具

rpm -q make

yum -y install make
  1. 编译

    1. 检测当前编译环境和配置相关安装配置参数

      ./configure

      指定安装路径 一般安装到/usr/local/ 目录

      ./configure --prefix=/usr/local/apache

    2. 编译apche

      make

  2. 安装apache

    make install

  3. 启动

    /usr/local/apache/bin/apachectl start

  4. 测试

    cd /usr/local/apach/htdocs

    vim index.html

    开启80端口iptables -I INPUT -p tcp --dport 80 -j ACCEPT

    访问默认页面

  5. 实现定时检测脚本

    编写日志文件

    #!/bin/bash
    
    

    安装crontab 定时插件

    设置定时

    crontab -e

    # {minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script} 
    0 5 * * * sh /root/bin/backup.sh
    # 这将会在每天早上5点运行 /root/bin/backup.sh
    

12.3 光盘安装apache

  1. 挂载光盘

  2. 进入光盘中的package目录中安装rpm包

    1. rpm -ivh 包全名

      -i 安装

      -v 显示进度

      -h 进度

      # 安装依赖
      apr-1.4.8-5.el7.x86_64.rpm
      apr-util-1.5.2-6.el7.x86_64.rpm
      apr-util-ldap-1.5.2-6.el7.x86_64.rpm
      postgresql-libs-9.2.24-1.el7_5.x86_64.rpm
      mailcap-2.1.41-2.el7.noarch.rpm
      
      httpd-tools-2.4.6-90.el7.centos.x86_64.rpm
      
      httpd-2.4.6-90.el7.centos.x86_64.rpm
      
  3. 启动服务

    service httpd start  /  stop  /  restart
    
  4. 访问服务

    localhost/index.html

    写一个页面 /var/www/index.html

    www.rpmfind.netf

12.4 rpm包

# 查询 已安装的包全名
rpm -q [包名]
# 查询 所有已经安装的rpm包
rpm -qa 
# 查询 该已安装rpm包涉及到的目录及文件
rpm -ql [包名] 
# 查询 该未安装rpm包会涉及到的目录
rpm -qlp [包全名] 
# 查询 已安装rpm包信息
rpm -qi [包名] 
# 查询 未安装rpm包信息
rpm -qip [包全名] 
# 通过路径 查询rpm包
rpm -qf [目录]
# 查询 已安装服务 的依赖
rpm -qR [包名]
# 查询 未安装服务 的依赖
rpm -qRp [包全名]
# 卸载rpm
rpm -e [包名]
# rpm包手机
rpm -Uvh [包名]

#rpm包校验 检查是否被修改
rpm -V [包名]
S.5....T. c /etc/httpd/conf/httpd.conf
	s:文件大小发生改变
	5:md5校验
	T:时间
	c:配置文件
	d:文档文件
	g:ghost 幽灵
	/etc/httpd/conf/httpd.conf:被修改文件路径

12.5 提前rpm包内的文件

rpm2cpio 指: rmp to cpio

#从rpm包提取文件
rpm2cpio rpm包路径 | cpio -idv ./文件绝对路径
	-i:copy-in模式,还原
	-d:按照路径创建文档
	-v:显示过程
###例子#####
# 方法一:从rpm包提取文件到当前目录,再拷贝到bin目录
# centos7
rpm2cpio /media/cdrom/Packages/coreutils-8.22-24.el7.x86_64.rpm | cpio -idv ./usr/bin/ls
# centos6
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls
cp ./bin/ls /bin/
# 方法二:提取全部,然后移动需要的文件目录到指定目录
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idmv

12.6 yum

yum,全称“Yellow dog Updater, Modified”,是一个专门为了解决包的依赖关系而存在的软件包管理器

/etc/yum.repos.d/

大型应用服务不提倡yum安装

1. 通过网络yum源安装–网络软件池
# 配置文件
/etc/yum.repos.d/CentOS-Base.repo

优点:软件版本更新比较快

缺点:需要联网,大多数yum源在国外,访问慢

​ 注意:存在操作失误可能导致系统级更新

yum [-y] install [包名]
2. 建立本地yum源安装–光盘

优点:速度快

缺点:软件版本滞后

# 修改网络yum配置 使其失效
mv CentOS-Base, repo CentOS-Base.repo.bak
mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
mv CentOS-Vault.repo CentOS-Vault.repo.bak

# 修改Centos-Media.repo文件
vim CentOS-Media.repo

    [c6-media]
    name=CentOS-$releasever - Media
    baseurl=file:///mnt/cdrom
    #地址为你自己的光盘挂载地址
    #file:///media/cdrom/
    #file:///media/cdrecorder/
    #注释这两个的不存在地址
    gpgcheck=1
    enabled=1
    #把enabled=0改为enabled=1, 让这个yum源配置文件生效
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

# 验证
yum list

12.7 进程

# 查看进程
ps -el
ps aux
# 查看某个进程
pstree -p | grep httpd

# 分析当前进程服务
top
# 判断服务器的稳定性 >200稳定性好
up 时间  # linux服务器运行的时间长度

# 杀掉进程
kill 进程号
kill -9 进程号  # 强制
kill -1 进程号  # 关闭并重启

12.8 安装apache、mysql、php

yum -y install httpd
yum -y install mysql mysql-server
yum -y install php php-mysql

## apache
service httpd start # 启动apache
cd /var/www/html # 默认访问地址

## mysql
service mysqld start # 启动mysql
mysqladmin -u root -p password "123456" #修改root密码
mysql -u root -p # root 登录

# 创建数据库
create database web_com;
# 创建表
creare table user(id int primary key auto_increment,
				  username varchar(60),
				  password varchar(60));
# 插入
insert into user(`username`,`password`) values(`zhangsan`,`123456`)
# 查询
select [字段1,字段2...] from [表名 where 条件]
# 修改
update 表名 set [字段1=内容,...]
# 删除
delete from 表名 [where 条件 ]

# dbms 数据库管理系统
# db 数据库
# table 表
# field 字段

## php
vim /var/www/html/index.php

12.8.1 mysql修改密码
方法1: 用SET PASSWORD命令

  mysql -u root

  mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');

方法2:用mysqladmin

  mysqladmin -u root password "newpass"

  如果root已经设置过密码,采用如下方法

  mysqladmin -u root password oldpass "newpass"

方法3: 用UPDATE直接编辑user表

  mysql -u root

  mysql> use mysql;

  mysql> UPDATE user SET Password = PASSWORD('newpass') WHERE user = 'root';

  mysql> FLUSH PRIVILEGES;

在丢失root密码的时候,可以这样

  mysqld_safe --skip-grant-tables&

  mysql -u root mysql

  mysql> UPDATE user SET password=PASSWORD("new password") WHERE user='root';

  mysql> FLUSH PRIVILEGES;

13 防火墙配置

systemctl stop firewalld.service

# centos6
iptables -F  # 清除防火墙规则
iptables -I INPUT -p tcp --dport 80 -j ACCEPT #允许80通过

13.1 iptables

# 启动
service iptables start
# 保存规则
service iptables save

# iptables常用命令:

iptables -A 将一个规则添加到链末尾
iptables -D 将指定的链中删除规则
iptables -F 将指定的链中删除所有规则
iptables -I 将在指定链的指定编号位置插入一个规则
iptables -L 列出指定链中所有规则
iptables -t nat -L 列出所有NAT链中所有规则
iptables -N 建立用户定义链
iptables -X 删除用户定义链
iptables -P 修改链的默认设置,如将iptables -P INPUT DROP (将INPUT链设置为DROP)
常见设置参数介绍:

--dport 指定目标TCP/IP端口 如 –dport 80
--sport 指定源TCP/IP端口 如 –sport 80
-p tcp 指定协议为tcp
-p icmp 指定协议为ICMP
-p udp 指定协议为UDP
-j DROP 拒绝
-j ACCEPT 允许
-j REJECT 拒绝并向发出消息的计算机发一个消息
-j LOG 在/var/log/messages中登记分组匹配的记录
-m mac –mac 绑定MAC地址
-m limit –limit 1/s 1/m 设置时间策列
-s 10.10.0.0或10.10.0.0/16 指定源地址或地址段
-d 10.10.0.0或10.10.0.0/16 指定目标地址或地址段
-s ! 10.10.0.0 指定源地址以外的

# 查看监听的端口
lsof -i:端口
netstat -lnpt

14. shell脚本

14.1. 执行方式

# 执行方式一:
chmod u+x ./test.sh # 需要可执行权限
./test.sh

#!/bin/bash
echo "hello world"

# 执行方式二:  # 不需要修改权限
/bin/sh test.sh
bash test.sh

14.2. 基础

14.2.1. 单引号 双引号

单引号:不解析,直接输出,效率快

双引号:解析变量,效率稍慢

14.2.2. 格式化输出
echo -e "id\tname\tpassword"
	-n  # 不换行
14.2.3. 字体颜色
echo 
14.2.4. 重定向

重定向命令

命令说明
command > file将输出重定向到 file。
command < file将输入重定向到 file。
command >> file将输出以追加的方式重定向到 file。
n > file将文件描述符为 n 的文件重定向到 file。
n >> file将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m将输出文件 m 和 n 合并。
n <& m将输入文件 m 和 n 合并。
<< tag将开始标记 tag 和结束标记 tag 之间的内容作为输入。

标准的输入操作

指令说明
0stdin标准输入
1stdout标准输出
2stderr标准错误输出

正确的命令执行写入文件

命令 > 文件 覆盖

命令 >> 文件 追加 $>>

命令 > 文件 2>&1 把正确的指令执行结果或错误的执行结果写入到list文件

分号: 命令1:命令2:命令3 命令之间没有逻辑关系

​ ls : date

​ cd : ls : date

逻辑与 &&

命令1 && 命令2 1成功,执行2

命令1 && 命令2 || 命令3 1成功,执行2;否则执行3

命令2 || 命令3 都执行

管道符 |

1、查询passwd文件中的root用户

cat /etc/passwd | grep root

grep -n “root” --color=auto /etc/passwd

-n 行号

–color 颜色

1.正确的指令放在correct,错误的放在error

ls >> courrect 2 >> error

2.dd if=/dev/zero of=/tmp/test bs=lk count=100000

​ /dev/zero 生成空数据流

​ /dev/null 可以把文件扔到这个文件中

​ if:源目录文件

​ of: 目标目录文件

​ bs: 每次复制1个kb

​ count: 复制的次数

​ 显示开始的时间,显示复制完结束的时间

date: 命令:date

date && dd if=/dev/zero of=/tmp/test bs=lk count=100000

 && date

3.把用户信息写入一个txt文件,

user表

id name age

1 张三 18

2 李四 20

3 王五 30

从user表中查询比list年龄小的用户

echo -e 'id\tname\tage'
echo -e 'id\tname\tage\n1\t张三\t18\n2\t李四\tage\n3\t王五\t30'
14.2.5 通配符
字符含义
?匹配单个字符
*匹配零个或多个字符
[]匹配方括号中的任意一个,不能用于创建目录和文件
[a-z]在序列中匹配一个字符
^取反

$:调用变量

set:设置变量的值

unset:取消变量

变量赋值:后面默认的值类型为字符串

``:执行命令,把执行的命令结果赋值给变量

name = `date`
echo $name

( ) : 同 ‘ ‘ , 使 用 ():同``,使用 ()使()比较容易看,但不兼容部分unix

name = $(date)

#:代表注释

${ }:精确地界定变量范围

$(( )):与整数运算;还可以将其他进制转成十进制数显示出来

14.2.6 运算
算数运算
运算符说明举例
+加法`expr $a + $b` 结果为 30。
-减法`expr $a - $b` 结果为 -10。
*乘法`expr $a * $b` 结果为 200。
/除法`expr $b / $a` 结果为 2。
%取余`expr $b % $a` 结果为 0。
=赋值a=$b 将把变量 b 的值赋给 a。
==相等。用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false。
!=不相等。用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。

注意:条件表达式要放在方括号之间,并且要有空格,例如: [ a = = a== a==b] 是错误的,必须写成 [ $a == $b ]。

num1=1
num2=2
# 一、
declare -i sum=$num1+$num2
# 二、
sum=$(expr $num1+$num2)
# 三、set
sum=$(($num1+$num2))
# 四、
$[$num1+$num2]

注意:乘法加空格需要转义\*

关系运算
运算符说明举例
-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。
-ne检测两个数是否不相等,不相等返回 true。[ $a -ne $b ] 返回 true。
-gt检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。
-lt检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。
-ge检测左边的数是否大于等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。
-le检测左边的数是否小于等于右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。
14.2.7 参数传递
bash test.sh 1 2
	# $0=test.sh
	# $1=1
	# $2=2

注意 10 不 能 获 取 第 十 个 参 数 , 获 取 第 十 个 参 数 需 要 10 不能获取第十个参数,获取第十个参数需要 10{10}。当n>=10时,需要使用${n}来获取参数。

14.2.8 条件if
if[ ]
then
	...
else
	...
fi
if[ ]
then
	...
elif[ ]
then
	....
else
	...
fi
14.2.9 for循环
# 方法一、
for i in {1..4}
do
	print 'a'
done
echo 'a'

# 方法二、
for i in $(seq 1 10)
do 
echo 'a';
done

# 方法三、 C语言格式
for((i=1;i<=10;i++));
do 
echo $(expr $i \* 3 + 1);
done

# for $() 执行命令
x=0
for i in $( ls )
do  
  x=$(($x+1))
done
echo $x

# 星号
for num in {1..4}
do
	for j in $(seq $num 3) # seq 生成数字序列
	do
		printf '*'
	done
	echo '*'
done

in后面代表一个列表,可以使用数字,字符,字符串,以空格分隔

seq

seq [起点] [步长] [终点]
14.2.10 函数参数
参数处理说明
$#传递到脚本或函数的参数个数
$*以一个单字符串显示所有向脚本传递的参数
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
14.2.11 数组
# 数组定义不需要指定数组长度
name=(1 2 3)
# 通过下表给数组赋值
name[0]="张三"
# 获取数组元素
${name[0]}
# 获取数组全部元素 @和*
${name[@]}
${name[*]}
# 获取数组长度
${#name[@]}
${#name[*]}
# 获取数组某个元素的长度
${#name[0]}
# 数组切片
${name[@]:offset:number}
## offset: 要跳过的元素个数
## number: 要取出的元素个数
# 取偏移量之后的所有元素
${name[@]:offset}
# 向数组中追加元素:
ARRAY[${#ARRAY[*]}]
14.2.12 逻辑判断

括号两边需要加空格

  1. 判断是否为目录或文件

    • 目录: -d [ -d /root ]
    • 文件: -f [ -f /. ]
  2. 判断当前文件的权限是否存在

    • 写权限:-w [ -w /tmp/ ]

    • 读:-r

    • 执行:-x

  3. 字符串比较

    • 相等: == 注意:等号两边加空格
    • 不等: !=
    • 为空: -z
    • 非空: -n
  4. 逻辑判断

    • -a and 两个条件同时满足
    • -o or 满足一个条件
    • ! 非
14.2.13. 文本操作
  1. 提取行
    1. cat user | grep age 提取包含age的行
    2. cat user | grep -v age -v 取反,提取除age行所有
  2. 提取列
    1. cut -f3 user 提取第3列
      1. -d 分隔符,制表符可省略
    2. awk ‘{print $3}’
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BIN丶虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值