Linux常用命令、脚本

Linux快捷键:
ctrl+v添加
1、ctrl+v 选中添加内容的行
2、shift+i 只插入第一行期望的内容
3、esc esc

ctrl+v删除
1、ctrl+v 选中需要删除的内容
2、d

批量添加
ctrl+alt + 选中的内容 为一个整块


sed -e '1,12d' a.txt

--打包
tar cf /tmp/etc-backup.tar /etc/

--打包+压缩
gz格式
tar czf /tmp/etc-backup.tar.gz /etc/

yum install bzip2
bz2格式
tar cjf /tmp/etc-backup.tar.bz2 /etc/

[root@localhost tmp]# ll -h
total 47M
-rw-r--r-- 1 root root  28M Jun 16 10:15 etc-backup.tar
-rw-r--r-- 1 root root 8.7M Jun 16 10:19 etc-backup.tar.bz2
-rw-r--r-- 1 root root 9.8M Jun 16 10:16 etc-backup.tar.gz

--解包
tar xf etc-backup.tar -C test/
--解gz压缩包
tar xzf etc-backup.tar.gz
--解bz2压缩包
tar xjf etc-backup.tar.bz2
缩写
.tgz .tbz2

vi vim
插入模式:
i 光标所在位置	I 光标所在行行首
a 光标所在位置的下一位	A 光标所在行的末尾
o 光标所在行的下一行	O 光标所在行的上一行

普通模式:
h 向左移动 l向右移动 j向下移动 k向上移动
yy 光标所在行整行复制 p粘贴
3yy 从光标所在行开始,复制三行
y$ 复制光标所在位置到光标所在行结尾内容
dd 剪切整行
d$ 剪切光标当前位置到行尾
u 撤销
ctrl+r 重做
x 删除光标所在位置的字符
r+新字符 调换光标所在位置的字符为新字符
:set nu 显示行号
7 shift+g 将光标移动到第7行
gg 文本的第一行
G	文本的最后一行
^ 行首	$ 行尾

命令模式:
:w /tmp/a.txt
:! ifconfig 命令行模式下,临时执行一条命令
/ 查找 n 查找下一个 N 查找上一个
:s/old/new  匹配光标所在行字符,并进行替换
:%s/old/new	  单次替换
:%s/old/new/g 全局替换
:6,8s/x/X/	6-8行单次替换
:6,8s/x/X/g	6-8行全局替换

:set nonu 不显示行号
vim /etc/vimrc

可视模式:
v	字符可视模式
V	行可视模式
ctrl+v 块可视模式
配合d和大写I可进行块的便利操作

ctrl+v I 123(插入内容) 连续两次esc
ctrl+v 将需要删除的块选中 小写d进行块删除

visudo
user3 ALL=/sbin/shutdown -c

vim /etc/shadow

文件类型:
- 普通文件	d 目录文件	b 块文件	c 字符特殊文件
l 符号链接	f 命名管道	s 套接字文件


[root@localhost shell]# chmod 4755 /root/shell/afile
[root@localhost shell]# ls -l afile
-rwsr-xr-x 1 root root 0 Jun 19 15:51 afile


[root@localhost shell]# chmod 1777 test/
[root@localhost shell]# ls -ld test/
drwxrwxrwt 2 root root 6 Jun 19 15:53 test/


网卡命名规则受biosdevname net.ifnames两个参数影响
编辑/etc/default/grub  biosdevname=0 net.ifnames=0
更新grub grub2-mkconfig -o /boot/grub2/grub.cfg

重启 reboot

biosdevname net.ifnames	网卡名
0			1			ens33
1			0			em1
0			0			eth0

查看网卡物理连接情况:mii-tool eth0
查看网关:route -n

网络配置修改:
ifconfig eth1 172.22.144.10 netmask 255.255.255.0

ifconfig eth1 up

ifconfig eth1 down

[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.29.80.1     0.0.0.0         UG    100    0        0 eth0
0.0.0.0         172.22.144.2    0.0.0.0         UG    101    0        0 eth1
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-2ccb41533acc
172.22.144.0    0.0.0.0         255.255.255.0   U     101    0        0 eth1
172.29.80.0     0.0.0.0         255.255.240.0   U     100    0        0 eth0
删除默认网关
[root@localhost ~]# route del default gw 172.29.80.1

添加默认网关
route add default gw 172.29.80.2

route add -host 172.0.0.1 gw 172.29.80.2

route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.29.80.3


网络故障排除命令:
ping
traceroute	traceroute -w 1 www.baidu.com
mtr
nslookup	nslookup www.baidu.com
telnet		telnet www.baidu.com 80
tcpdump		tcpdump -i any -n port 80	tcpdump -i any -n host 172.0.0.1	tcpdump -i any -n host 172.0.0.1 and port 80
netstat		netstat -ntlp
ss

systemctl list-unit-files NetworkManager.service
systemctl disable NetworkManager

chkconfig --list network

chkconfig --level 2345 network off
chkconfig --level 2345 network on

修改主机名
hostnamectl set-hostname caoyu

源码编译安装软件
wget https://openresty.org/download/openresty-1.15.8.1.tar.gz

tar -xzf openresty-1.15.8.1.tar.gz

cd openresty-1.15.8.1

yum -y install gcc gcc-c++

yum -y install pcre-devel

yum -y install openssl-devel

gmake -j2

make install

内核升级
yum install gcc gcc-c++ make ncurses-devel openssl-devel elfutils-libelf-devel -y

tar -xvf linux-6.3.8.tar.xz -C /usr/src/kernels/

cp /boot/config-3.10.0-957.el7.x86_64 /usr/src/kernels/linux-6.3.8/.config

make menuconfig

make -j2 all

make modules_install

make install

grub配置文件介绍
默认引导项
grub2-editenv list

grep ^menu /boot/grub2/grub.cfg

grub2-set-default 0		--引导项设置为0

root密码破解
reboot e rd.break	ctrl+x

mount -o remount,rw /sysroot
chroot /sysroot
echo 123456|passwd --stdin root
vim /etc/sysconfig/selinux  disbale
exit

reboot

ps和top命令查看进程
ps
pstree
top

[root@caoyu ~]# ps -eLf| more
UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD


进程kill命令:
[root@caoyu-1 yum.repos.d]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

kill -9 pid

守护进程
nohup与&	daemon
screen进入screen环境
ctrl+a d 退出(detached)screen环境
screen -ls 查看screen会话
screen -r sessionid 恢复会话
screen -S 12345 -X quit	删除会话并关闭
nohup tail -f /var/log/messages &

[root@caoyu-1 ~]# ps -ef|grep tail
root     23862     1  0 11:58 ?        00:00:00 tail -f /var/log/messages	--父进程为1 孤儿进程
root     23934 23784  0 11:59 pts/3    00:00:00 grep --color=auto tail

[root@caoyu-1 23862]# cd /proc/23862/

[root@caoyu-1 23862]# ls -l cwd
lrwxrwxrwx 1 root root 0 Jun 22 11:58 cwd -> /root

[root@caoyu-1 23862]# ll fd
total 0
l-wx------ 1 root root 64 Jun 22 12:02 0 -> /dev/null
l-wx------ 1 root root 64 Jun 22 12:02 1 -> /root/nohup.out
l-wx------ 1 root root 64 Jun 22 11:58 2 -> /root/nohup.out
lr-x------ 1 root root 64 Jun 22 12:02 3 -> /var/log/messages


[root@caoyu-1 ~]# screen -ls
There is a screen on:
        5968.pts-1.caoyu-1      (Detached)
1 Socket in /var/run/screen/S-root.

[root@caoyu-1 ~]# screen -r 5968

exit 退出当前screen会话

service启动脚本位置:
[root@caoyu-1 init.d]# pwd
/etc/init.d

systemctl启动脚本位置:
[root@caoyu-1 system]# pwd
/usr/lib/systemd/system

系统运行级别
[root@caoyu-1 system]# systemctl get-default
multi-user.target

[root@caoyu-1 system]# ll runlevel*.target
lrwxrwxrwx 1 root root 15 Mar 23 16:19 runlevel0.target -> poweroff.target		关机
lrwxrwxrwx 1 root root 13 Mar 23 16:19 runlevel1.target -> rescue.target		救援模式
lrwxrwxrwx 1 root root 17 Mar 23 16:19 runlevel2.target -> multi-user.target	多用户
lrwxrwxrwx 1 root root 17 Mar 23 16:19 runlevel3.target -> multi-user.target    多用户
lrwxrwxrwx 1 root root 17 Mar 23 16:19 runlevel4.target -> multi-user.target    多用户
lrwxrwxrwx 1 root root 16 Mar 23 16:19 runlevel5.target -> graphical.target     图形
lrwxrwxrwx 1 root root 13 Mar 23 16:19 runlevel6.target -> reboot.target		重启

[root@caoyu-1 ~]# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.

[root@caoyu-1 ~]# cd /usr/lib/systemd/system
----a.service在sshd服务之前启动
[root@caoyu-1 system]# vim sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service a.service
Requires=a.service

内存查看命令:
free	free -h
top

磁盘查看命令:
fdisk
df
du
parted -l

[root@caoyu-1 ~]# dd if=/dev/zero bs=4M count=10 seek=10 of=bfile	--seek跳过10块
10+0 records in
10+0 records out
41943040 bytes (42 MB) copied, 0.0272657 s, 1.5 GB/s
[root@caoyu-1 ~]# ll -h bfile
-rw-r--r-- 1 root root 80M Jun 27 15:13 bfile
[root@caoyu-1 ~]# du -h bfile
40M     bfile

常见文件系统:
ext4
xfs
NTFS
[root@caoyu-1 ~]# ls -i
393682 afile  393978 bfile  393348 nohup.out

xfs/ext4默认创建的数据块大小为4k

[root@caoyu-1 ~]# echo 1 > afile
[root@caoyu-1 ~]#
[root@caoyu-1 ~]# du -h afile
4.0K    afile

[root@caoyu-1 ~]# ll -i
total 812
393977 -rw-r--r-- 1 root root      2 Jun 27 15:31 afile
393978 -rw-r--r-- 1 root root      2 Jun 27 15:35 afile2

[root@caoyu-1 ~]# mv afile2 afile3
[root@caoyu-1 ~]# ll -i afile*
393977 -rw-r--r-- 1 root root 2 Jun 27 15:31 afile
393978 -rw-r--r-- 1 root root 2 Jun 27 15:35 afile3

echo > 写入文件内容,不会改变文件的i节点

[root@caoyu-1 ~]# ln afile bfile		--创建链接文件,链接文件的inode相同
[root@caoyu-1 ~]# ll -i afile bfile
393977 -rw-r--r-- 2 root root 2 Jun 27 15:31 afile
393977 -rw-r--r-- 2 root root 2 Jun 27 15:31 bfile
[root@caoyu-1 ~]# rm -f bfile
[root@caoyu-1 ~]# ll -i afile bfile
ls: cannot access bfile: No such file or directory
393977 -rw-r--r-- 1 root root 2 Jun 27 15:31 afile

创建软链接文件ln -s
[root@caoyu-1 ~]# ll -i afile
393977 -rw-r--r-- 1 root root 2 Jun 27 15:31 afile
[root@caoyu-1 ~]# ln -s afile aafile
[root@caoyu-1 ~]# ll -i afile aafile
393682 lrwxrwxrwx 1 root root 5 Jun 27 15:57 aafile -> afile
393977 -rw-r--r-- 1 root root 2 Jun 27 15:31 afile

[root@caoyu-1 ~]# getfacl afile
# file: afile
# owner: root
# group: root
user::rw-
group::r--
other::r--

[root@caoyu-1 ~]# setfacl -m u:user1:r afile
[root@caoyu-1 ~]# getfacl afile
# file: afile
# owner: root
# group: root
user::rw-
user:user1:r--
group::r--
mask::r--
other::r--

[root@caoyu-1 ~]# ll afile
-rw-r--r--+ 1 root root 2 Jun 27 15:31 afile

[root@caoyu-1 ~]# setfacl -x u:user1 afile

内存和磁盘管理

用户磁盘配额
mkfs.xfs /dev/sdb1
mkfs.xfs -f /dev/sdb1
mkdir /data
mount -o uquota,gquota /dev/sdb1 /data
chmod 1777 /data
xfs_quota -x -c 'report ugibh' /data	--查看磁盘配额
xfs_quota -x -c 'limit -u isoft=5 ihard=10 user1' /data		--用户限制磁盘配额

磁盘分区与挂载
fdisk
mkfs
parted	--分区大于2T
mount

/etc/fstab

--创建分区
[root@caoyu-1 ~]# fdisk /dev/vda
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
1	--分区号
回车	--起始扇区
+50G	--指定分区大小
d	--删除分区
q	--退出
w	--保存退出

--磁盘分区格式化
mkfs.ext4 /dev/vda1

mkdir /data

mount /dev/vda1 /data

vim /etc/fstab
/dev/vda1	/data   ext4    defaults        0 0


交换分区swap的查看与创建
磁盘扩充交换分区swap
mkswap /dev/sdb1
swapon /dev/sdb1
swapoff /dev/sdb1

文件方式扩充交换分区swap
dd if=/dev/zero bs=4M count=100 of=/swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

vim /etc/fstab
/dev/sdb1	swap   swap defaults        0 0
/swapfile	swap   swap defaults        0 0


RAID与软件RAID技术
RAID的常见级别及含义
RAID 0	striping条带方式,提高单盘吞吐率
RAID 1	mirroring镜像方式,提高可靠性
RAID 5	有奇偶校验
RAID 10	是RAID 1与RAID 0的结合

mdadm -C /dev/md0 -a yes -l1 -n2 /dev/sd[b.c]1

mdadm -D /dev/md0

echo DEVICE /dev/sd[b.c]1 >> /etc/mdadm.conf
mdadm -Evs >> /etc/mdadm.conf
mkfs.xfs /dev/md0


Linux启动过程
BIOS-MBR-BootLoader(grub)-kernel-systemd-系统初始化-shell

[root@caoyu-1 grub2]# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-1160.88.1.el7.x86_64) 7 (Core)
[root@caoyu-1 grub2]# pwd
/boot/grub2

[root@caoyu-1 system]# pwd
/etc/systemd/system

逻辑卷LVM的用途与创建
pvcreate /dev/sd[b,c,d]1	--创建pv
dd if=/dev/zero of=/dev/sdb1 bs=4M count=1 --破坏超级块
pvs	--查看pv
vgcreate vg1 /dev/sdb1 /dev/sdc1	--加入到vg1卷组
vgs	--查看卷组

lvcreate -L 100M -n lv1 vg1 创建大小为100M名称为lv1 所属vg1卷组
mkdir /data
mkfs.xfs /dev/vg1/lv1

vgextend centos /dev/sdd1		--vg扩容
lvextend -L +100G /dev/centos/root	--逻辑卷扩容
xfs_growfs /dev/centos/root		--磁盘文件系统扩容

系统综合状态查询
sar
iftop -P	观察网络流量情况

sar -u 1 10 每隔一秒查看一次cpu状态,总共查看10次
sar -r 1 10	内存读写情况
sar -b 1 10	IO读写情况
sar -d 1 10	磁盘读写情况
sar -q 1 5	进程使用情况

什么是shell
[root@caoyu-1 ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

Unix的哲学:一条命令只做一件事
为了组合命令和多次执行,使用脚本文件来保存需要执行的命令
赋予该文件执行权限


4种脚本不同执行方式的影响
bash ./filename.sh		--内建命令对当前shell生效
./filename.sh			--内建命令不需要创建子进程
source ./filename.sh	
.filename.sh


管道与重定向
重定向符号:
输入重定向符号:"<"

输出重定向符号:">" ">>" "2>" "&>"
echo 123 > /path/to/file

输入和输出重定向组合使用
cat > /path/to/file << EOF
I am $USER
EOF

[root@caoyu-1 ~]# wc -l < /etc/passwd
27

[root@caoyu-1 ~]# read var
123
[root@caoyu-1 ~]# echo $var
123

[root@caoyu-1 ~]# vim a.txt
123
~

[root@caoyu-1 ~]# read var2 < a.txt
[root@caoyu-1 ~]# echo $var2
123

[root@caoyu-1 ~]# echo $var2 > b.txt
[root@caoyu-1 ~]# cat b.txt
123

[root@caoyu-1 ~]# echo $var2 >> b.txt
[root@caoyu-1 ~]#
[root@caoyu-1 ~]# cat b.txt
123
123

#错误重定向
[root@caoyu-1 ~]# telnet
-bash: telnet: command not found
[root@caoyu-1 ~]# telnet 2> c.txt
[root@caoyu-1 ~]# cat c.txt
-bash: telnet: command not found

#正确或错误重定向都输出
[root@caoyu-1 ~]# telnet &> d.txt
[root@caoyu-1 ~]# cat d.txt
-bash: telnet: command not found

[root@caoyu-1 ~]# vim 3.sh
#!/bin/bash
cat > /root/a.sh << EOF
echo "hello bash"
EOF

变量:
变量的定义
变量的赋值
变量的引用
变量的作用范围
系统环境变量
环境变量配置文件

变量的命名规则
字母、数字、下划线
不以数字开头

为变量赋值的过程,称为变量替换
变量名=变量值
a=123	#等号=左右不能有空格

使用let为变量赋值
let a=10+20

将命令赋值给变量
l=ls

将命令结果赋值给变量,使用$()或``
letc=$(ls -l /etc)

变量值有空格等特殊字符可以包含在""或''中

[root@caoyu-1 ~]# cmd1=`ls /root`
[root@caoyu-1 ~]# cmd2=$(ls /root)
[root@caoyu-1 ~]# str=hello bash
[root@caoyu-1 ~]# echo $str
hello
[root@caoyu-1 ~]# str2="hello bash"
[root@caoyu-1 ~]# echo $str2
hello bash
[root@caoyu-1 ~]# str3='hello bash'
[root@caoyu-1 ~]# echo $str3
hello bash

变量的引用及作用范围
变量的引用
${变量名}称作对变量的引用
echo ${变量名}查看变量的值
${变量名}在部分情况下可以省略 $变量名

变量的默认作用范围
变量的导出
	export
变量的删除
	unset
	
#变量a的作用范围默认在当前bash,子进程不生效
[root@caoyu-1 shell]# a=1
[root@caoyu-1 shell]# bash
[root@caoyu-1 shell]# echo $a

[root@caoyu-1 shell]#

#子进程变量只在子进程生效,在父进程是不生效的
[root@caoyu-1 shell]# a=2
[root@caoyu-1 shell]# exit
exit
[root@caoyu-1 shell]# echo $a
1
[root@caoyu-1 shell]#

#bash ./ 子进程的方式运行的; export 变量名,子进程获取父进程的变量值
[root@caoyu-1 shell]# demo_var1="hello subshell"
[root@caoyu-1 shell]# vim 4.sh
#!/bin/bash

echo $demo_var1

[root@caoyu-1 shell]# chmod +x 4.sh
[root@caoyu-1 shell]# ./4.sh

[root@caoyu-1 shell]# bash 4.sh

[root@caoyu-1 shell]# source 4.sh
hello subshell
[root@caoyu-1 shell]# . 4.sh
hello subshell
[root@caoyu-1 shell]# export demo_var1
[root@caoyu-1 shell]# bash 4.sh
hello subshell
[root@caoyu-1 shell]# ./4.sh
hello subshell

#变量赋值取消
[root@caoyu-1 shell]# unset demo_var1


环境变量、预定义变量、位置变量
环境变量:每个shell打开都可以获得到的变量
set和env命令
$? $$ $0
$PATH
$PS1

位置变量
$1 $2 ... $n

环境变量:
[root@caoyu-1 ~]# vim 5.sh
[root@caoyu-1 ~]# chmod +x 5.sh
[root@caoyu-1 ~]# ./5.sh
hello bash
2.6M    .
[root@caoyu-1 ~]# 5.sh
-bash: 5.sh: command not found
[root@caoyu-1 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@caoyu-1 ~]# pwd
/root
[root@caoyu-1 ~]# PATH=$PATH:/root
[root@caoyu-1 ~]# 5.sh
hello bash
2.6M    .
[root@caoyu-1 ~]# cd /var/
[root@caoyu-1 var]# 5.sh
hello bash
788M    .

预定义变量:
[root@caoyu-1 var]# echo $?		#上一条命令是否执行成功
0
[root@caoyu-1 var]# echo $$		#进程状态监测
26704
[root@caoyu-1 var]# echo $0		#当前进程名称
bash

[root@caoyu-1 var]# bash 6.sh
29256
6.sh
[root@caoyu-1 var]# . 6.sh
26704
bash

#位置变量
[root@caoyu-1 ~]# vim 7.sh
#!/bin/bash

# $1 $2 $3...$9 ${10}

pos1=$1
pos2=$2

echo $pos1
echo $pos2
~

[root@caoyu-1 ~]# ./7.sh -a -l
-a
-l

[root@caoyu-1 ~]# vim 7.sh
#!/bin/bash

# $1 $2 $3...$9 ${10}

echo $1
echo $2

[root@caoyu-1 ~]# ./7.sh -a -l
-a
-l

[root@caoyu-1 ~]# vim 7.sh
#!/bin/bash

echo $1
echo ${2}_

[root@caoyu-1 ~]# ./7.sh -a
-a
_

#当位置变量$2为空,$2输出_;当位置变量有值则输出对应的值
[root@caoyu-1 ~]# vim 7.sh
#!/bin/bash

# $1 $2 $3...$9 ${10}

pos1=$1
pos2=${2-_}

echo $pos1
echo $pos2

[root@caoyu-1 ~]# ./7.sh -a -l
-a
-l
[root@caoyu-1 ~]# ./7.sh -a
-a
_


环境变量配置文件
/etc/profile
~/.bash_profile
~/.bashrc
/etc/bashrc
/etc/profile.d/

数组
定义数组
IPTS=(10.0.0.1 10.0.0.2 10.0.0.3)
显示数组的所有元素
echo ${IPTS[@]}
显示数组元素个数
echo ${#IPTS[@]}
显示数组的第一个元素
echo ${IPTS[0]}

转义与引用
转义
特殊字符:一个字符不仅有字面意义,还有元意。
#注释 ;分号 \转义符号 " '引号
单个字符前的转义符号
\n \r \t 单个字母转义
\$ \" \\ 单个非字母的转义
[root@caoyu-1 ~]# echo "$a"

[root@caoyu-1 ~]# echo "\$a"
$a
[root@caoyu-1 ~]# echo "ascb"x"asfq"
ascbxasfq
[root@caoyu-1 ~]# echo "ascb\"x\"asfq"
ascb"x"asfq

引用
常用的引用符号
" 双引号
' 单引号
` 反引号
[root@caoyu-1 ~]# var1=123
[root@caoyu-1 ~]# echo '$var1'
$var1
[root@caoyu-1 ~]# echo "$var1"
123

运算符
赋值运算符
= 赋值运算符,用于算数赋值和字符串赋值
使用unset取消为变量的赋值
= 除了作为赋值运算符还可以作为测试操作符

算数运算符
基本运算符
+ - * / ** %
使用expr进行运算
expr 4 + 5	数字中间有空格

数字常量
数字常量的使用方法
let "变量名=变量值"
变量值使用0开头为八进制
变量值使用0x开头为十六进制

双圆括号
双圆括号是let命令的简化
((a=10))
((a++))
echo $((10+20))

num1=`expr 4 + 5`

[root@caoyu-1 ~]# (( a=4+5 ))
[root@caoyu-1 ~]# echo $a
9

特殊符号大全
引号
' 完全引用	'$var1'输出$var1,不做变量解释
" 不完全引用 "$var1"输出具体的值,做变量解释
` 执行命令

括号
() (()) $()圆括号
 单独使用圆括号会产生一个子shell(xyz=123) 父shell是看不到这个值的
 数组初始化IPS=(ip1 ip2 ip3
[root@caoyu-1 ~]# ( abc=123 )
[root@caoyu-1 ~]# echo $abc

[root@caoyu-1 ~]# echo $abc

[root@caoyu-1 ~]# echo $(( 10+20 ))
30

[root@caoyu-1 ~]# echo $(ls)
3.sh 5.sh 6.sh 7.sh a.sh a.txt b.txt c.txt d.txt nohup.out shell


[][[]]方括号
单独使用方括号是测试(test)或数组元素功能
[root@caoyu-1 ~]# [ 5 -gt 4 ]
[root@caoyu-1 ~]# echo $?
0
[root@caoyu-1 ~]# [ 5 -gt 6 ]
[root@caoyu-1 ~]# echo $?
1
两个方括号表示测试表达式
[root@caoyu-1 ~]# [[ 5 -gt 4 ]]
[root@caoyu-1 ~]# echo $?
0

<>尖括号,重定向符号
[root@caoyu-1 ~]# ls > a.txt
2> 错误重定向

{}花括号
输出范围 echo {0..9}
[root@caoyu-1 ~]# echo {0..9}
0 1 2 3 4 5 6 7 8 9
文件复制 cp -v /etc/passwd{,.bak}

运算和逻辑符号
+ - * / % 算数运算符
><=	比较运算符
&& || ! 逻辑运算符

转义符号
\	转义某字符
 \n 普通字符转义之后有不同的功能
 \' 特殊字符转义之后,当做普通字符来使用

其他符号
# 注释符
; 命令分隔符
[root@caoyu-1 ~]# #ls
[root@caoyu-1 ~]# ls ; pwd
3.sh  5.sh  6.sh  7.sh  a.sh  a.txt  b.txt  c.txt  d.txt  nohup.out  shell
/root

 case语句的分隔符要转义
case $isIncr in
Y | y)
        isIncremental=true;;
N | n)
        isIncremental=false;;
*)
        echo "error"
esac

: 空命令
.和source命令相同
~ 家目录
, 分隔目录
* 通配符
? 条件测试或通配符
$ 取值符号
| 管道符
& 后台运行
_ 空格


test比较
测试与判断
退出与退出状态
退出程序命令
 exit
 exit 10 返回10给shell,返回值非0位不正常退出
 $? 判断当前shell前一个进程是否正常退出

测试命令test
test命令用于检查文件或者比较值
test可以做以下测试:
 文件测试
 整数比较测试
 字符串测试
test测试语句可以简化为[]符号
[]符号还有扩展写法[[]]支持&&、||、<、>

使用if-then语句
 if [ 测试条件成立 ] 或 命令返回值是否为0
 then 执行相应命令
 fi 结束
 [root@caoyu-1 ~]# if [ $UID = 0 ]
 > then
 > echo " root user "
 > fi
 root user

使用if-then-else语句
if-then-else语句可以在条件不成立时也运行相应的命令
 if [ 测试条件成立 ]
 then 执行相应命令
 else 测试条件不成立,执行相应命令
 fi 结束
 
 if [ 测试条件成立 ]
 then 执行相应命令
 elif [ 测试条件成立 ]
 then 执行相应命令
 else 测试条件不成立,执行相应命令
 fi 结束

嵌套if的使用
if条件测试中可以再嵌套if条件测试
 if [ 测试条件成立 ]
 then 执行相应命令
   if [ 测试条件成立 ]
	then 执行相应命令
	fi
 fi 结束
 
case分支
case语句和select语句可以构成分支
 case "$变量1" in
	"情况1")
	 命令... ;;
	"情况2")
	 命令... ;;
	*)
	 命令... ;;
 esac
 
循环
使用for循环遍历命令的执行结果
使用for循环遍历变量和文件的内容
C语言分格的for循环命令
while循环
死循环
util循环
break和continue语句
使用循环对命令行参数的处理
for循环的语法
	for 参数 in 列表
	do 执行的命令
	done 封闭一个循环
使用反引号或$()方式执行命令,命令的结果当作列表进行处理
列表中包含多个变量,变量用空格分隔
对文本处理,要使用文本查看命令取出文件内容
默认逐行处理,如果文本出现空格会当做多行处理

[root@caoyu-1 ~]# echo {1..9}
1 2 3 4 5 6 7 8 9

[root@caoyu-1 ~]# #touch a.txt b.txt c.txt
[root@caoyu-1 ~]# for filename in `ls *.txt`
> do
>   mv $filename $(basename $filename .txt).csv
> done


以下是一些常用的Docker命令:

镜像相关命令:

docker images:列出本地所有的镜像
docker pull <镜像名称>:拉取远程镜像到本地
docker rmi <镜像名称>:删除指定的镜像
容器相关命令:

docker ps:列出当前正在运行的容器
docker ps -a:列出所有容器(包括已停止的)
docker run <镜像名称>:创建并运行一个容器
docker start <容器ID或容器名称>:启动一个已停止的容器
docker stop <容器ID或容器名称>:停止一个正在运行的容器
docker restart <容器ID或容器名称>:重启一个容器
docker rm <容器ID或容器名称>:删除指定的容器
日志和查看命令:

docker logs <容器ID或容器名称>:查看容器的日志
docker inspect <容器ID或容器名称>:查看容器的详细信息
docker exec -it <容器ID或容器名称> <命令>:在容器内部执行命令
网络相关命令:

docker network ls:列出当前存在的网络
docker network create <网络名称>:创建一个网络
docker network connect <网络名称> <容器ID或容器名称>:将容器连接到指定的网络
docker network disconnect <网络名称> <容器ID或容器名称>:将容器断开指定的网络
镜像和容器清理命令:

docker system prune:清理未使用的镜像、容器、网络和存储卷
docker image prune:清理未使用的镜像
docker container prune:清理未运行的容器
docker volume prune:清理未使用的存储卷

sync;echo 1 > /proc/sys/vm/drop_caches


desc extended your_table_name;

pu dirmeta pangu://localcluster/product/aliyun/odps/

parted /dev/vdb mklabel gpt
parted /dev/vdb mkpart primary 1 100% 

大于2TB磁盘格式化及挂载:
查看磁盘
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  30G  0 disk 
└─vda1 253:1    0  30G  0 part /
vdb    253:16   0   5T  0 disk 
数据盘已成功挂载到实例上,并被识别为/dev/vdb。

使用以下命令对数据盘进行分区:   
parted /dev/vdb mklabel gpt
parted /dev/vdb mkpart primary ext4 0% 100%
这将创建一个名为/dev/vdb1的新分区,并以ext4文件系统格式化该分区。

格式化分区为ext4文件系统。执行以下命令:
sudo mkfs.ext4 /dev/vdb1

创建一个用于挂载数据盘的目录。执行以下命令:
mkdir /data

将数据盘挂载到刚创建的目录。执行以下命令:
mount /dev/vdb1 /data

确保数据盘在每次启动时都会自动挂载。编辑/etc/fstab文件,添加以下行:
/dev/vdb1 /data ext4 defaults 0 0

你可能感兴趣的:(linux,运维)