《Linux 命令行与shell脚本编程大全》

《Linux 命令行与shell脚本编程大全》

即将入职ETL架构师,我希望能对所学工作中需要的内容来做做记录,由于仅需要对Linux有基础了解,并不会涉及太多进阶的内容。这里会从应用出发,将该书结合课程和学习路径做一下整理。

Linux操作系统管理零基础入门到精通(基于CentOS7)_哔哩哔哩_bilibili

常用命令

1. 开关机

shutdown-h now(现在关机)+15''(15分钟后关机并'提示')
        -r(重启)
        -c(取消)
reboot(重启)
poweroff(关机)
init 0(关机)  6(重启)

2.文件权限

读取文件名信息

登录名匹配到对应的UID值——文件/etc/passwd(可编辑,但很危险,需要用Linux用户管理工具去执行

/etc/shadow
rich:$1$.FfcK0ns$f1UgiyHQ25wrB/hykCn020:11627:0:99999:7:::
用chage可以修改 -E 设置密码过期的日期
 与/etc/passwd文件中的登录名字段对应的登录名
 hykCn020--加密后的密码
 11627(-d)--自上次修改密码后过去的天数密码(自1970年1月1日开始计算)
 0(-m)--多少天后才能更改密码
 99999--多少天后必须更改密码
 7(-W)--密码过期前提前多少天提醒用户更改密码
 (-I)密码过期后多少天禁用用户账户
 用户账户被禁用的日期(用自1970年1月1日到当天的天数表示)
 预留字段给将来使用
文件权限符 rwx
-rw-rw-r-- 1 rich rich 50 2010-09-13 07:49 file1.gz
该文件rich可读写,系统其他用户仅可读
drwxrwxr-x 2 rich rich 4096 2010-09-03 15:12 test2 
该目录rich可读写执行,其他人仅可读

输出结果的第一个字段就是描述文件和目录权限的编码。这个字段的第一个字符代表了对象的类型:
 -代表文件
 d代表目录
 l代表链接
 c代表字符型设备
 b代表块设备
 n代表网络设备

之后有3组三字符的编码。每一组定义了3种访问权限:
 r代表对象是可读的
 w代表对象是可写的
 x代表对象是可执行的

若没有某种权限,在该权限位会出现单破折线。这3组权限分别对应对象的3个安全级别:
 对象的属主
 对象的属组
 系统其他用户
useradd添加新用户
useradd -u 1100 user1 指定user1编号为1100
-d /super super 创建用户,并指定家目录super(先不存在)
-c comment 给新用户添加备注
-e expire_date 用YYYY-MM-DD格式指定一个账户过期的日期
-f inactive_days 指定这个账户密码过期后多少天这个账户被禁用;0表示密码一过期就立即禁用,1表示禁用这个功能
-g initial_group 指定用户登录组的GID或组名
-G group ... 指定用户除登录组之外所属的一个或多个附加组
-k 必须和-m一起使用,将/etc/skel目录的内容复制到用户的HOME目录
-m 创建用户的HOME目录
-s/sbin/nologin -M 指定默认的登录shell,并不创建用户的HOME目录(FTP服务,验证身份来下载上传文件)
-n 创建一个与用户登录名同名的新组
-r 创建系统账户
-p passwd 为用户账户指定默认密码

例:创建一个用户manager,指定其基本组为admin,附加组为root,家目录为/man
useradd -g admin -G root -d/man manager
userdel删除用户信息
userdel-r[文件目录],userdel会删除用户的HOME目录以及邮件目录
usermod 修改账户用户字段
-c修改备注字段,-e修改过期日期,-g修改默认的登录组
-G[新组名] [文件名]更改附加组, -a -G[新组名] 添加到新组
-l[旧名] [新名]修改用户账户的登录名;-p修改账户的密码
-L锁定账户,使用户无法登录;-U解除锁定,使用户能够登录。
passwd,chpasswd和su
passwd[用户名]用passwd命令,能改你自己的密码,只有root用户才有权限改别人的密码
-e 选项能强制用户下次登录时修改密码
-d[用户名] 删除用户密码
-l 锁定用户账户; -u解锁
--stdin 从文件或管道读取密码
例:echo'123'|passwd --stdin user1
su -[用户名] 切换到用户名下
   su -root 需要root密码
chapasswd <users.txt 自动读取登录名和密码对(由冒号分割)列表,给密码加密,然后为用户账户设置
sudo 提升权限
sudo 用户不切换,但能获得部分root的权限命令
sudo useradd 用户名
chattr[-R]+/- i/a 文件 设置扩展属性
-R 递归修改
+、- 增加、减少扩展属性
i 只读,包括root用户都物权写入更高
a 追加,不能删除数据,多用于服务器日志文件安全
创建Linux组

组权限允许多个用户对系统中的对象(比如文件、目录或设备等)共享一组共用的权限/etc/group文件,不能通过直接修改/etc/group文件来添加用户到一个组,要用usermod-G命令。在添加用户到不同的组之前,首先得创建组。

groupadd[组名]
usermod -G [组名][用户名]
groupmod -n[新组名][原组名] 修改已有组的组名
chmod [文件名]修改权限
chmod [ugoa][+-=][rwx] [file]
u文件所有者;g所属组;o其他用户;a所有用户
+ - = 增加,去除,设置权限
chown改变所属关系

chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID;组可以是组名或者组 ID;文件是以空格分开的要改变权限的文件列表,支持通配符。

chown -c mail:mail log2012.log   改变拥有者和群组并显示改变信息
chown -cR mail: test/    改变文件夹及子文件目录属主及属组为mail

3.文件处理

cd[目录名]–切换当前目录至 dirName
change directory
cd / 进入根目录
cd ~ 家目录
cd - 进入上一次工作路径
单点符(.),表示当前目录;
双点符(..),表示当前目录的父目录。
pwd 查看当前路径
pwd -P 查看软链接的实际路径
mkdir [新目录名] 创建目录
mkdir t  当前工作目录下创建名为 t的文件夹
mkdir -p  /tmp/test/t1/t 
在 tmp 目录下创建路径为 test/t1/t 的目录,若不存在,则创建
rmdir 删除目录
默认情况下,rmdir命令只删除空目录
rmdir -p parent/child/child11
当 parent 子目录被删除后使它也成为空目录的话,则顺便一并删除
ls 输出查看文件
ls -a 列出目录所有文件,包含以.开始的隐藏文件 
ls -A 列出除.及..的其它文件 
ls -r 反序排列 
ls -t 以文件修改时间排序 
ls -S 以文件大小排序 
ls -h 以易读大小显示 
ls -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来(可简写为 -ll)
ls -lhrt 按易读方式按时间反序排序,并显示文件详细信息
ls -文件类型,比如目录(d)、文件(-)、字符型文件(c)或块设备(b)
ls -FR 显示出了用户home目录下所有子目录及其内容,方便用户在输出中分辨

过滤输出列表(通配符)
问号(?)代表一个字符;
星号(*)代表零个或多个字符;ls -l s* s开头的文 )将不需要的内容排除在外
touch创建文件
touch 文件名
touch -a [文件名] 改变访问时间
查看文件的访问时间,需要加入另外一个参数: --time=atime 。有了这个参数,就能够显示出已经更改过的文件访问时间
cp[原文件] [目标文件]复制文件
cp -R  递归地复制整个目录的内容
cp -i  强制 shell 询问是否需要覆盖已有文件,yes
ln链接
ln 命令以及 -s 选项来创建符号链接
file 查看文件类型
file [文件名、目录名]
cat/more/less 全查
cat -n 给所有行加上行号(包括空白行)
cat -b 仅文本行加行号
分页more,less
head/tail 开头结尾部分查询
head -n,查看前n行信息
tail -n,查看末尾n行信息
tail -f  允许在其他进程使用该文件时查看文件的内容(实时监测系统日志)
wc 统计
cat test.txt | wc -l    统计输出结果的行数
wc text.txt  查找文件的 行数 单词数 字节数 文件名
wc -l /etc/passwd  用户数统计
date、cal 时间
建议用help查询
date -help 
     +%F 年(%Y)月(%m)日(%d)时间(%T)
cal 1 2018  显示2018年1月日历

4.查找文件和内容编辑

locate 查找

locate速度较find更快,但新建的档案可能无法查到

查找 /var 目录下,以 reason 结尾的文件
locate -r '^/var.*reason$'(其中.表示一个字符,*表示任务多个;.*表示任意多个字符)
find[查找起始路径] [选项] [查找条件] [处理动作]
-name 按照文件名查找文件 
-empty 找出空文件
-perm 按文件权限查找文件 -user 按文件属主查找文件
-group 按照文件所属的组来查找文件。
-type 查找某一类型的文件,诸如: b - 块设备文件 d - 目录 c - 字符设备文件 l - 符号链接文件 p - 管道文件 f - 普通文件 
-size n :[c] 查找文件长度为n块文件,带有c时表文件字节大小。 +,-可以选择在多少以上或以下的文件
-not 取反
-amin n 查找系统中最后N分钟访问的文件 
-atime n 查找系统中最后n*24小时访问的文件 
-cmin n 查找系统中最后N分钟被改变文件状态的文件 
-ctime n 查找系统中最后n*24小时被改变文件状态的文件 
-mmin n 查找系统中最后N分钟被改变文件数据的文件 
-mtime n 查找系统中最后n*24小时被改变文件数据的文件 (用+,-来限定更改时间在距今n日以内的文件)

例:在当前目录查找 以 .log 结尾的文件,. 代表当前目录 
find ./ -name '*.log'(和ls相比能够从子目录找)
find -atime -2    查找 48 小时内访问过的文件
     -mtime +7    查找7天内没被修改的文件
find -size +1G   查找高于1g的文件

-exec 把找到的结果但文件处理
find/tmp -size+1M -type f -exec ls-h  (方便联合使用ls命令)
echo输出
结合重定向
echo'hello world' >a.txt
cat a.txt
变量赋值
a=123  b=456
echo $a  输出123
echo $[$a+$b]  输出579,如果没有$,输出123+456
环境变量
echo $SHELL  当前使用的shell
echo $LANG  查看语言
管道和重定向
输出重定向(从键盘到文件)
合并两个文件
cat 1.txt 2.txt >3.txt(如果3.txt原本存在,就会被覆盖)
cat 1.txt >> 3.txt 将1的内容追加到3

输入重定向(文件显示到屏幕)
cat< passwd.txt
cat<< EOF  创建文档,设置logo

重定向错误信息 2>
过滤错误信息:find/ -user student 2> /dev/null
重定向错误和正确信息 &>

管道符:| 连结2个命令

5.网络通讯命令

ifconfig 查看和配置 Linux 系统的网络接口

查看所有网络接口及其状态:ifconfig -a 。 使用 up和 down 命令启动或停止某个接口:ifconfig eth0 up 和 ifconfig eth0 down 。

iptables
开启 80 端口,另外,要注意使用 iptables save 命令,进行保存。否则,服务器重启后,配置的规则将丢失。
 iptables -A INPUT -p tcp --dport 80 -j ACCEP
netstat 端口网络连接
例:netstat -lnp  查看系统都开启了哪些端口
netdtat -an   查看网络连接状况
netstat -an | grep ESTABLISHED | wc -l 统计系统当前进程连接数
ping 检测主机

执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。

ping -c 2 www.baidu.com  指定接受包的次数
telnet 远端登入

6.vim编辑器

命令模式 vim 文件名

光标移动,字符串查找,复制,粘贴,删除

键盘位置
 h:左移一个字符。
 j:下移一行(文本中的下一行)。
 k:上移一行(文本中的上一行)。
 l:右移一个字符。

行间跳转
 PageDown(或Ctrl+F):下翻一屏。
 PageUp(或Ctrl+B):上翻一屏。
 G:移到缓冲区的最后一行。
 *num* G:移动到缓冲区中的第*num*行。
 gg:移到缓冲区的第一行

 *num* yy:
 gg:移到缓冲区的第一行
 dd:移到缓冲区的第一行

插入、编辑模式

可以输入内容 ,按i/a/o (insert)进入,按Esc退出

 u 撤销
 ctrl+r  重做
 a 在当前光标后追加数据
末行模式

可以退出和替换内容,按:进入,Esc退出

: wq 保存退出
: q  直接退出
: q! 不保存退出
: w filename:将文件保存到另一个文件中

: s/old/new/ vim编辑器会跳到old第一次出现的地方,并用new来替换
: set nu 给每行编号
: s/old/new/g:一行命令替换所有old
: n,m s/old/new/g:替换行号n和m之间所有old。 
: % s/old/new/gc:替换整个文件中的所有old,并在每次出现时提示(c)
可视模式
v+方向键/鼠标
在移动光标时,vim会高亮显示复制区域的文本。在覆盖了要复制的文本后,按y键来激活复制命令

7.文本编辑器

正则表达式
处理文件内容,在转义特殊字符时,你需要在它前面加 \ 来告诉正则表达式引擎应该将接下来的字符当作普通的文本字符
通配符处理文件名,符号不同
1. 位置锚定元字符 ^ $
^root 以root开头
mk$  以mk结尾
^$  空白行
2.字符匹配元字符. []
. 任意单个字符
例:以s开头,n结尾,中间包含2个任意字符—— grep"s..n" 

[] 匹配指定范围内的任意单个字符,!或^取反
例:从/etc/passwd中找所有包含以100开头,后面是任意一位数字的字符串行
   grep 100[0-9]/etc/passwd
   任意三位数 grep -w "[0-9][0-9][0-9]" w精确匹配
   任意字母或数字开头 grep"^[a-zA-Z0-9]"
3.匹配次数元字符?* + {}
*匹配零次或多次重复
例:xy*——x,xy,xyy……

?匹配任意一个可选字符
例:rr\?t——以r开头,以t结尾,中间一个字符可以是r也可以没有字符串

+匹配1次或多次重复
例:ro\+t——o至少出现了一次

{n}匹配n次、{n,}匹配至少n次、{n,m}匹配n到m次
-w [0-9]\{4\} ——任意4位数
4.分组元字符 ()
\(ro\)\{1,3\}——ro,roro,rororo
5.扩展正则(egrep)
egrep "root|student" 含有root或者student 的文件,必须用egrep
6.比较符号=~
例:tel=18529197373
[[$tel=~[0-9](11)]]&&echo"yes"
[[$num =~^[0-9]+$]] 是否全是数字
grep[选项] [文件名.类型后缀] 搜索数据
查找指定进程个数:ps -ef| grep svn -c
递归查找以grep开头的行,并只列出文件 grep -lR'^grep' /tmp
显示包含 ed 或者 at 字符的内容行 grep -E 'ed|at' test.txt
包含e或d字符的内容行 grep[ed] /tmp
- n 显示匹配模式的行所在的行号
- v 进行反向搜索(输出不匹配该模式的行)
- e 要指定多个匹配模式,
输出了含有字符t或字符f的所有行  grep -e t -e f file1 
sed[选项]‘sed脚本‘文本文件
sed 'd'删除
删除单行:sed '10d' /etc/fstab
删除6-10行:sed '6,10d'
删除除nn开头的行:sed'/^nn/!d'
-r 使用扩展正则表达式
删除空白行:sed-r '^$ d’

sed'w'另存/tmp/fstab.txt
sed -m'/^nn/w /tmp/fstab.txt' /etc/fstab
grep '^nn' /etc/fstab > /tmp/fstab.txt

sed'r[添加文件]'[原文件]
sed '$r /etc/release' /etc/fstab  
--将fstab中的内容放到release文件末尾(5r——第5行)

sed 's/旧内容/新内容/替换选项' /目标文件
g——替换所有

-n 
例:将/etc/passwd文件从第5行开始到最后一行的所有行中的bash都替为空
sed -n '5,$s/bash//gp' /etc/passwd
例:将/etc/passwd文件从第1-10行开头都加上#
sed -n '1,10s/^/#/gp' /etc/passwd
例:删除所有行开头的空格
sed -r's/^[ ]+//g' 
tr单个字符一一替换
例:echo'abcdefcba'|tr[a-z][A-Z]  替换成大写
sort 对文本信息进行排序,cut 截取
-t 指定分隔符
-k 指定字段
-n 按数值大小排列
-u 去除重复行
sort -t: -k3 /etc/passwd  按照:分隔,以第3个字段排列(ASCII)

例:统计每种shell有多少用户使用?
cut -d":" -f7 /etc/passwd |sort |uniq -c
    f7(7个字段)
例:统计访问次数前10的IP
cut -d" " -f1 access_log |sort| uniq -c|sort -rnk 1|head
awk程序

功能较多也比较复杂,之后会进行更详细的介绍

1.截取指定字段
例:awk'{print $6}'  输出第六列
2.指定分隔符- F
例:指定:为分隔符,并添加标注
awk -F':' '{print"username:",$1,"uid:",$3}' /etc/passwd

8.磁盘,压缩和文件系统

Linux至少3个分区:根分区,/boot, /swap

/dev/sda(硬盘名:sda,sdb,sdc;分区:sda1,sda2,逻辑分区从5开始)

/proc内存中的数据

fdisk -l
mkfs -t [文件系统类型xfs] [分区设备/dev/sdb1]
mount 挂载
mount -t vfat /dev/sdb1 /media/disk 
  手动将U盘/dev/sdb1挂载到/media/disk
umount [目录名] 卸载
df 查看磁盘空闲空间
df -h 人性化
df -T 显示文件系统类型
du 查看某个特定目录的磁盘使用情况
du -c 显示实际文件大小 高于 -ll查出的结果
du -hs 目录总共占据空间

block:8个扇分区,4KB

tar[选项] [打包或压缩后的文件名] [需要打包的目录]
-tf test.tar 列出tar文件test.tar的内容(但并不提取文件)
-cvf test.tar test/test2/创建了名为test.tar的归档文件,含有test和test2目录内容
tar -ztvf /tmp/etc.tar.gz 查看刚打包的文件内容
-j 将输出重定向给bzip2命令来压缩内容
-v 在处理文件时显示文件
-z 将输出重定向给gzip命令来压缩内容
-r 追加文件到已有tar归档文件末尾
-t 在不解压的情况下列出已有tar归档文件的内容
-u 将比tar归档文件中已有的同名文件新的文件追加到该tar归档文件中

9.进程管理

yum仓库安装(.repo)
yum localinstall 安装包.rmp
yum update 更新包
yum remove 安装包 只删除软件包而保留配置文件和数据文件
yum erase 安装包 删除软件和它所有的文件
ps 进程状态
ps aux 以面向用户的方式显示所有用户所有进程
ps -ef 显示系统中所有进程的详细信息
top 查看进程动态信息
-c 显示完整的进程命令
例:top - 
14:06:23 up 70 days, 16:44, 2 users, load average: 1.25, 1.32, 1.35
当前系统时间 14:06:23,系统已经运行了70天16h44min;
有2个用户在登录系统, load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况(>1说明压力稍大);

Task:212 total,1 running,211 sleeping,0 stopped, 0 zombie
系统现在共有212个进程,其中处于运行中的有1个,211个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个

%CPU(s):5.9%us   用户空间占用CPU的百分比
KiB Mem:  内存状态
KiB Swap: swap交换分区信息

排序:P 占用CPU百分比;M占用内存百分比;T累计占用CPU时间;N进程启动时间,q 退出
调度停止进程
后台启动执行,命令末尾加&
jobs 查看后台进程运行情况[1]+
后台换到前台 fg 1(后台运行编号)
^C 清除停止前台运行进程
^Z 停止转后台 bg后台处于停止的开始运行
kill [进程号]; -9 强制终止
监视系统信息
users查看用户
who /w 用户在哪里登录的

pts是伪终端,会显示IP地址,如果为:0,tty,则为本地登录

pcpu正在执行的操作,.bash 仅登录无操作

last 看是否有人(ip)登录系统
whereis
whereis locate 查询locate程序相关文件
-s 源代码
which 查看可执行文件的位置
which ls 查看ls命令是否存在,执行哪个
查看cpu硬件信息
cat/proc/cpuinfo
uptime 查看系统当前时间,运行时间,登录用户数,cpu负债情况
free查看内存
free -t 以总和形式显示内存的使用信息
     -s 10  周期性查询内存使用情况
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值