文章目录

  • Shell
      • 1.什么是Bash shell(壳)
      • 2.Bash Shell能干什么?
      • 3.平时我们如何使用Shell呢?
      • 4.Shell提示符
      • 5.Shell基础语法
    • 2.Bash Shell基本特性
      • 1.命令补全
      • 2.命令快捷键,快捷键可以帮助我们大大提升工作效率
      • 3.历史命令History, 追溯之前发生情况
      • 3.命令别名
    • 3.Bash Shell获取帮助
      • 1.命令 –help帮助
      • 2.命令 man手册
    • 4.Bash Shell命令流程
      • 1.当我们执行一个命令, 整个命令执行流程如下:
      • 2.什么是内部命令,什么是外部命令
      • 3.如何检查用户输入的命令是内部命令还是外部命令
      • 4.如果是外置命令,Bash可以通过查找PATH变量,获取该命令的绝对路径。
      • 5.如果是外置命令还会涉及到一个内存缓存,也就是说,当我们出现重复执行相同的命令,会通过缓存调取执行,也就意味着不会搜索PATH路径。
      • 6.命令执行流程总结: 当我们执行了一个ping命令之后, 整个命令执行的流程步骤如下:
  • 2 Linux文件管理
    • 1.文件管理概述
      • 1.Bash Shell对文件进行管理
      • 2.内容摘要
    • 2.系统目录结构
      • 1.存放命令相关的目录
      • 2.存放用户相关数据的家目录,比如:windows不同的用户登陆系统显示的桌面背景不一样
      • 3.系统文件目录
      • 4.启动目录
      • 5.配置文件目录
      • 6.可变的目录与临时目录
      • 7.设备目录文件
      • 8.虚拟的文件系统(如对应的进程停止则/proc下对应目录则会被删除)
      • 9 其他
      • 10.PS: 在Linux7系统中,
    • 3.文件路径定位
      • 1.每个目录下都有一个.和..的目录是干啥的?
      • 2.那什么是绝对路径,什么又是相对路径呢?
      • 3.绝对路径与相对路径示例
    • 4.系统文件管理
      • 1.文件管理之: 创建/复制/移动/删除
        • 1.文件创建命令touch
        • 2.目录创建命令mkdir
        • 3.以树状显示目录结构命令tree
      • 2.文件管理之:查看文件内容(cat tac less more head tail tailf grep …)
      • 3.文件管理之:联网下载文件(wget、curl)、文件上传与下载(rz、sz)
      • 4.文件管理之:文件或命令查找(locate、which、whereis、find)
      • 5.文件管理之:字符处理命令(sort、uniq、cut、sed、awk、wc、)
    • 5.系统文件属性
    • 6.系统文件类型
    • 7.系统链接文件
      • 1.什么是软链接
      • 2.什么是硬链接
      • 3.软链接实践
      • 4.硬链接实践

Shell

1.什么是Bash shell(壳)

Bash Shell是一个命令解释器,它在操作系统的最外层,负责用户程序与内核进行交互操作的一种接口,将用户输入的命令翻译给操作系统,并将处理后的结果输出至屏幕。
通过xshell连接,就是打开了一个bash程序的窗口,不能点鼠标,只能输入命令
当我们使用远程连接工具连接linux服务,系统则会给打开一个默认的shell,我们可在这个界面执行命令、比如:获取系统当前时间,创建一个用户等等…

2.Bash Shell能干什么?

使用Shell实现对Linux系统的大部分管理,例如:1.文件管理(文件创建,移动,复制,删除,编辑…)2.权限管理(不同用户不通权限)3.用户管理(创建,删除….)4.磁盘管理(挂载)5.网络管理6.软件管理.等等.

3.平时我们如何使用Shell呢?

输入命令 –> 效率低 –>适合少量的工作Shell Script –> 效率高–>适合复杂重复性的工作例如:创建100个用户,单纯输入命令需要执行100次,而Shell脚本只需要几行命令即可完成100个用户的创建

vim test.sh
for i in {1..100}
douseradd test$iecho "create test$i"
donebash test.sh

4.Shell提示符

# $ = 普通用户, # = root用户(超级管理员)
### [root@lqz ~]#
# root:当前登录用户
# @ :没有意义
# lqz:主机名称,如果很长会显示不全,通过hostname查看
# ~:当前用户所在家目录
# #:通常指超级管理员
# $:普通用户
[root@lqz ~]# whoami
root[root@web01 ~]# useradd jack
[root@web01 ~]# passwd jack
Changing password for user jack.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
[root@web01 ~]# su jack
[root@web01 ~]# cd root   提示没有权限

5.Shell基础语法

命令行bash shell, 为用户提供输入, 执行命令的界面

#命令  选项  参数
command [-options] [arguments][root@lqz ~]# ls             #命令
[root@lqz ~]# ls -a          #命令+选项
[root@lqz ~]# ls -a /home/   #命令+选项+参数
ls -a -l
ls -la
ls --all
ls --list
ls -c
ls --color
ls -a /tmp
#命令: 整条shell命令的主体
#选项: 用于调节命令的输出效果#以 “-”引导短格式选项(单个字符),例如“-l”#以“--”引导长格式选项(多个字符),例如“--color”#多个短格式选项可以写在一起,只用一个“-”引导,例如“-al”
#参数: 命令操作的对象,如文件、目录名等
# 选项和参数可以出现位置调换,命令,选项,参数之间要至少有一个空格
# 命令必须开头, 选项和参数位置可以发生变化

2.Bash Shell基本特性

1.命令补全

当使用windows查找一个目录层级特别多的文件时,打开的效率会非常的慢,但如果使用linux查找一个目录层级特别多的文件时,可以通过tab键快速的补全
PS: tab键可以实现命令补全,路径补全,在实际生产中tab补全往往是我们使用的最多的, 因为可以减少执行命令以及路径出错率。

# yum provides ifconfig
# yum install net-tools#查看ip时忘记具体了命令
[root@lqz ~]# ifcon
#按下tab键会自动补全
[root@lqz ~]# ifconfig#按一下tab键没有反应, 按两下tab键列出所有if开头的命令
[root@lqz ~]# if
if         ifconfig   ifenslave  ifrename
ifcfg      ifdown     ifnames    ifup#linux目录较深,经常使用tab键进行补全, 如果路径出错是没有办法补全(带斜线表示是目录(window叫文件夹))
[root@lqz ~]# ls /etc/sysconfig/network-scripts/# 安装选项补全
yum install bash-comple*
yum install bash-completion
# ls -- Tab建,空格上下翻

2.命令快捷键,快捷键可以帮助我们大大提升工作效率

Ctrl + a    #光标跳转至正在输入的命令行的首部
Ctrl + e    #光标跳转至正在输入的命令行的尾部
Ctrl + c    #终止前台运行的程序
Ctrl + d    #在shell中,ctrl-d表示推出当前shell。
Ctrl + z    #将任务暂停,挂至后台
Ctrl + l    #清屏,和clear命令等效。
Ctrl + k    #删除从光标到行末的所有字符
Ctrl + u    #删除从光标到行首的所有字符
Ctrl + r    #搜索历史命令, 利用关键字,Tab建选中
Ctrl + w    #按单词或空格进行向前删除
Ctrl + 左右建 #按单词或空格进行向前向后跳#在命令行前加面加 "#" 则该命令不会被执行

3.历史命令History, 追溯之前发生情况

-w 保存命令历史到历史文件-c 清空命令历史记录, 不会情况文件-d 删除命令历史的第 N 条行

#1.使用双 !! 可执行上一条执行过的命令
[root@lqz ~]# ls
lqz.com
[root@lqz ~]# !!
ls
lqz.com#2.输入!6, 执行history命令历史中第 6 行命令
[root@lqz ~]# !6
touch lqz.com#使用!cat, 调用history命令历史最近一次执行过的cat命令
[root@lqz ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
[root@lqz ~]# !cat  # 最近一次
cat /etc/sysconfig/network-scripts/ifcfg-eth0[root@lqz ~]# ls /etc/passwd
#调用上一条命令的最后参数或选项, 按下ESC松开, 然后按下 "."
[root@lqz ~]# cat
[root@lqz ~]# cat /etc/passwd
#第二种方式, 输入!$
[root@lqz ~]# ls !$
ls /etc/passwd
/etc/passwd# history -d 100  删除第100条历史记录
# history -c      清空记录(保存到文件中的还有)
# history -w      保存历史集合,保存到当前用户的家目录 .bash_history
# > .bash_history  清空文件的保存(操作完,不让别人看你执行的命令)

3.命令别名

命令别名将用户经常使用的复杂命令简单化, 可以用"alias 别名名称=命令"命令创建属于自己的命令别名, 若要取消一个命令别名,则是用unalias 别名名称命令。

#1.定义临时别名, wk为查看eth0网卡别名
[root@lqz ~]# alias wk='ifconfig'
# alias 查看一下是否成功,发现系统内置了很多
[root@lqz ~]# wk
# 取消别名(都是临时的)
[root@lqz ~]# unalias wk #2.如果定义命令本身, 会执行什么?
[root@lqz ~]# alias ifconfig='ifconfig eth0'
#绝对路径执行, 调用命令本身
[root@lqz ~]# /sbin/ifconfig
#通过转义字符, 调用命令本身
[root@WebServer ~]# ifconfig#3.取消别名
[root@lqz ~]# unalias ifconfig#4.永久生效,/etc/bashrc
[root@lqz ~]# echo "alias ifconfig='ifconfig eth0'" >> /etc/bashrc

3.Bash Shell获取帮助

1.命令 –help帮助

[root@lqz ~]# ls --help
用法: ls [选项]...[文件]...#ls 常见选项
-a  #查看目录下的所有文件,包括隐藏文件
-l  #以长格式的方式显示文件的详细内容
-h  #以人性化的方式显示内容,配合-l使用
-d  #只列出目录名,不列出目录以下的内容
-t  #按修改时间进行排序
-i  #显示文件的inode(该文件在该分区的一个编号)[root@lqz ~]# date --help
Usage: date [OPTION]... [+FORMAT]or:  date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]][root@lqz ~]# date +%F   #查看日期
2019-03-28
[root@lqz ~]# date -s 12:00  #修改时间#时间不是用来查看,而是有其他的用途
[root@web01 ~]# touch `date +%F`_file.txt
[root@web01 ~]# ls
2019-03-28_file.txt

2.命令 man手册

# man ls    #查看ls命令的手册

3.linux命令大全url传送门linux命令大全linux命令手册

4.Bash Shell命令流程

1.当我们执行一个命令, 整个命令执行流程如下:

  1. 判断命令是否通过绝对路径执行2) 判断命令是否存在alias别名3) 判断用户输入的是内部命令还是外部命令4) Bash内部命令直接执行,外部命令检测是否存在缓存5) 通过PATH路径查找命令,有执行,无报错

2.什么是内部命令,什么是外部命令

内部命令: shell程序自带的命令。外部命令: 在系统PATH变量的某个路径下的可执行程序。

3.如何检查用户输入的命令是内部命令还是外部命令

#cd命令属于shell内部命令
[root@linux-node1 ~]# type -a cd
cd is a shell builtin
cd is /usr/bin/cd#ping属于外部命令, 同时会打印当前命令路径
[root@lqz ~]# type -a  ping
ping is /bin/ping

4.如果是外置命令,Bash可以通过查找PATH变量,获取该命令的绝对路径。

#打印当前环境变量目录
[root@lqz ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

PS: PATH由多个路径组成,每个路径值之间用冒号间隔,对这些路径的增加和删除操作都将影响到Bash解释器对Linux命令的查找

5.如果是外置命令还会涉及到一个内存缓存,也就是说,当我们出现重复执行相同的命令,会通过缓存调取执行,也就意味着不会搜索PATH路径。

#表缓存命令所在位置
[root@lqz ~]# hash
hits    command1    /usr/bin/tty3    /sbin/ifconfig#已缓存命令,如果移动位置会导致无法找到该命令
[root@lqz ~]# mv /sbin/ifconfig /bin/
[root@lqz ~]# ifconfig
-bash: /sbin/ifconfig: No such file or directory#删除缓存过的ifconfig命令, 即可执行
[root@lqz ~]# hash -d ifconfig
[root@lqz ~]# ifconfig#当然可以清空缓存表
[root@lqz ~]# hash -r#注意: 命令缓存hash需要注意如下情况:
1.只要执行外部命令1次就会对该命令进行缓存
2.如果将命令移动了位置,该如何执行a.使用绝对路径执行b.删除hash表的缓存指令

6.命令执行流程总结: 当我们执行了一个ping命令之后, 整个命令执行的流程步骤如下:

  1. 检查执行的命令是否使用的是绝对路径执行的。2) 检查ping命令是否存在alias别名3) 检查ping命令是内部命令还是外部命令4) 如果是内部命令Bash直接执行,如果是外部命令,首先检查Hash缓存,存在则直接调取5) 如果该命令不存在Hash缓存,则通过PATH路径进行逐行查找该命令所在的位置6) 如果PATH路径没有查找到该命令所在的路径,则返回错误码。command not found

2 Linux文件管理

1.文件管理概述

1.Bash Shell对文件进行管理

谈到Linux文件管理,首先我们需要了解的就是,我们要对文件做些什么事情?其实无非就是对一个文件进行、创建、复制、移动、查看、编辑、压缩、查找、删除、等等例如 : 当我们想修改系统的主机名称,是否应该知道文件在哪,才能去做对应的修改?

2.内容摘要

系统目录结构文件路径定位文件管理命令文件类型file链接文件ln文件编辑vim

2.系统目录结构

几乎所有的计算机操作系统都是使用目录结构组织文件。具体来说就是在一个目录中存放子目录和文件, 而在子目录中又会进一步存放子目录和文件,以此类推形成一个树状的文件结构,由于其结构很像一棵树的分支, 所以该结构又被称为“目录树”。Windows: 以多根的方式组织文件 C: D:Linux:以单根的方式组织文件 /
如下图为Centos7的目录结构

1.存放命令相关的目录

/bin, 普通用户使用的命令 /bin/ls, /bin/date/sbin,管理员使用的命令 /sbin/service,poweroff,useradd…
只要看到bin路径,就应该意识到放的是可执行文件

2.存放用户相关数据的家目录,比如:windows不同的用户登陆系统显示的桌面背景不一样

/home,普通用户的家目录, 默认为/home/username
环境变量的东西不要删,删掉试一下
/root,超级管理员root的家目录, 普通用户无权操作

3.系统文件目录

/usr,相当于C:Windows/usr/local,软件安装的目录,相当于C:Program/usr/bin/,普通用户使用的应用程序(重要)/usr/sbin,管理员使用的应用程序(重要)/usr/lib,库文件Glibc 32bit/usr/lib64,库文件Glibc 64bit

# 1
df -h #df -h查看系统中文件的使用情况
Size 分割区总容量
Used 已使用的大小
Avail 剩下的大小
Use% 使用的百分比
Mounted on 路径地址
# 2
du -sh * 查看当前目录下各个文件及目录占用空间大小
du -sh /usr/
# 3 标准是实现自动化的基础
不通主机的相同的软件,都放在相同路径下,便于管理,实现自动化
现在一般安装的软件,不放在/usr/local下了# 4 总共有一千来个命令
ls /usr/bin/ | wc -l
ls /usr/sbin/ | wc -l# 5 查看命令依赖那些库文件
ldd /bin/ls

4.启动目录

/boot 存放的系统启动相关的文件,例如:kernel,grub(引导装载程序)

ls /boot
# linux内核
# 启动机器时可以选择的启动模式

5.配置文件目录

/etc,极其重要,后续所有服务的配置都在这个目录中/etc/sysconfig/network-script/ifcfg-,网络配置文件/etc/hostname,系统主机名配置文件,主机名很重要,有些特殊服务要依赖主机名,没有主机名会报错起不来;修改了要重启:reboot/etc/resolv.conf,dns客户端配置文件,域名解析服务器,一般我们不配置,因为网卡的配置好了,会覆盖掉它,网卡的优先级高/etc/hosts,本地域名解析配置文件,域名解析,先找自己的hosts,再去域名解析

# 1
/etc/hosts 对应windows C:windows/system32/drivers/etc/hosts,黑客钓鱼网站
# 2 测试修改
yum install httpd -y
systemctl stop firewalld
echo "lqz NB" >/var/www/html/index.html
systemctl start httpd

6.可变的目录与临时目录

/var,存放一些变化文件,比如/var/log/下的日志文件,登陆日志/var/tmp,进程产生的临时文件/tmp,系统临时目录(类似于公共厕所),谁都可以使用

# 1 查看登陆日志
cat /var/log/secure #查看登陆时间
# 2 进程产生的临时文件(360清理垃圾,就是会清理)

7.设备目录文件

/dev,存放设备文件,比如硬盘,硬盘分区,光驱,等等/dev/sd 硬盘设备/dev/null,黑洞设备,只进不出。类似于垃圾回收站/dev/random,生成随机数的设备/dev/zero,能远远不断的产生数据,类似于取款机,随时随地取钱

# 1 sda sdb sdc sda1 sdb4
linux中磁盘文件叫sd,第一个硬盘叫a,第二个叫b,sda1表示第一个磁盘的第一个分区,sdb4:第二个硬盘的第四个分区(服务可以插很多硬盘)
# 2 /dev/null
ls >/dev/null
# 3 /dev/random 生成随机数
echo $RANDOM
echo lqz_$RANDOM
批量创建随机用户,批量设置密码
# 4 源源不断取数据
dd if=/dev/zero of=/opt/test.txt bs=1M count=1024
'''
dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >bs=bytes:同时设置读入/输出的块大小为bytes个字节。count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
'''ll /opt/test.txt
ll -h /opt/test.txt

8.虚拟的文件系统(如对应的进程停止则/proc下对应目录则会被删除)

/proc,反映系统当前进程的实时状态 :processPS:类似于小汽车的仪表板,能够看到汽车是否有故障,或者是否缺油了。

ls /proc # 可以看到很多id号,pid号,进程号,唯一
ls 进程id号的文件夹
如果进程被关闭,id号的文件夹就没了
id号每次启动都不唯一,只有一个进程唯一,systemd 是进程号1的进程,所有进程都是基于它派生出来的

9 其他

#1 media:提供设备的挂载点,媒体文件
# linux 新增了盘符,需要手动挂载
# 把光盘里的数据,挂载到media目录
mount  /dev/cdrom /media/# 2 mnt:提供设备的挂载点(同上)# 3 opt:第三方工具,第三方软件默认安装的(mysql...)# run :下有pid,log结尾的文件
ls /run
cat sshd.pid  # 进程运行的pid号,放在文件中
ps aux |grep sshd# .lock文件的作用,锁机制
# 假设现在执行
yum install tree
# 再开一个窗口执行相同命令
yum install tree
'''
Another app is currently holding the yum lock; waiting for it to exit...The other application is: yumMemory :  71 M RSS (470 MB VSZ)Started: Tue Aug 18 00:26:31 2020 - 00:24 agoState  : Sleeping, pid: 6191
'''
cat /run/yum.pid

10.PS: 在Linux7系统中,

/bin, /sbin, /lib, /lib64都以软链接的形式链接到/usr/目录下
/bin –> /usr/bin/sbin –> /usr/sbinlib -> usr/liblib64 -> usr/lib64

3.文件路径定位

在我们开始操作文件前,首先需要对文件进行定位,比如:你要在哪创建什么文件? 你要将文件复制到什么地方? 或者你要删除的文件在什么地方?那什么是定位: 比如/etc/hostname,整个文件中包含文件名称以及文件所在的位置,我们将这个叫做路径,那么路径就是对文件进行定位的一种方式。例:如下图的message所在的路径是?提问FQ: /home/oldboy/file 和/home/oldgirl/file是否是同一个文件?

1.每个目录下都有一个.和…的目录是干啥的?

一个点代表当的是当前目录, 两个点代表的是当前目录的上层目录。假设当前目录在/usr/下, 那么它的上层(/)目录用../表示, 而/usr/的下层(local)目录则用./local表示。

2.那什么是绝对路径,什么又是相对路径呢?

绝对路径: 只要从/开始的路径,比如/home/alice/file相对路径: 相对于当前目录来说,比如 a.txt ./a.txt …/bob/a.mp3 [加入: 此时在目录/home/alice]小结: 所谓的(.)和(…)目录实际上属于相对路径的一种表示形式。

3.绝对路径与相对路径示例

#绝对路径
[root@bgx /]# useradd alice
[root@bgx /]# touch /home/alice/file1
[root@bgx /]# touch ~/file2
[root@bgx /]# touch ~alice/file3#相对路径
[root@bgx /]# mkdir abc
[root@bgx /]# touch ../file3
[root@bgx /]# touch file4
[root@bgx /]# touch abc/file5

cd改变目录,常见的使用方法

# cd 绝对路径 cd /etc/hostname
# cd 相对路径 cd test/abc cd . cd ..# cd      #切换目录,例: cd /etc
# cd -    #切换回上一次所在的目录
# cd ~    #切换回当前用户的家目录,注意:root和普通用户是否有所不同吗?
# cd .    #代表当前目录,一般在拷贝、移动等情况下使用 cp /etc/hostname ./
# cd ..   #切换回当前目录的上级目录

4.系统文件管理

1.文件管理之: 创建/复制/移动/删除

创建

1.文件创建命令touch

# touch file                    #无则创建,有则修改时间
# touch file2 file3
# touch /home/od/file4 file5
# touch file{a,b,c}             #{}集合,等价 touch a b c
# touch file{1..10}
# touch file{a..z}

2.目录创建命令mkdir

# 选项:-v 显示详细信息  -p 递归创建目录
# mkdir dir1
# mkdir /home/od/dir1 /home/od/dir2
# mkdir -v /home/od/{dir3,dir4}
# mkdir -pv /home/od/dir5/dir6
# mkdir -pv /home/{od/{diu,but},boy}

3.以树状显示目录结构命令tree

# 选项: -L: 显示目录树的层级
# tree /home/od/    #显示当前目录下的结构
/home/od/
├── but
├── dir1
├── dir2
├── dir3
├── dir4
├── dir5
│   └── dir6
└── diu

cp复制

#选项: -v:详细显示命令执行的操作 -r: 递归处理目录与子目录 -p: 保留源文件或目录的属性# cp file /tmp/file_copy
# cp name /tmp/name         #不修改名称
# cp file /tmp/             #不修改名称
# cp -p file /tmp/file_p    #-p保持原文件或目录的属性
# cp -r  /etc/ /tmp/        #复制目录需要使用-r参数, 递归复制
# cp -rv /etc/hosts /etc/hostname /tmp  #拷贝多个文件至一个目录
# cp -rv /etc/{hosts,hosts.bak}
# cp -rv /etc/hosts{,-org}

mv移动

# mv file file1             #原地移动算改名
# mv file1 /tmp/            #移动文件至tmp目录
# mv /tmp/file1 ./          #移动tmp目录的文件至当前目录
# mv dir/ /tmp/             #移动目录至/tmp目录下# touch file{1..3}
# mv file1 file2 file3 /opt/    #移动多个文件或至同一个目录# mkdir dir{1..3}
# mv dir1/ dir2/ dir3/ /opt     #移动多个目录至同一个目录

rm删除

#选项:-r: 递归 -f: 强制删除 -v: 详细过程
# rm  file.txt      #删除文件, 默认rm存在alias别名,rm -i所以会提醒是否删除文件
# rm -f file.txt    #删除文件, 不提醒# rm -r dir/        #递归删除目录,会提示
# rm -rf dir/       #强制删除目录,不提醒(慎用)#1.rm删除示例
# mkdir /home/dir10
# touch /home/dir10/{file2,file3,.file4}
# rm -f /home/dir10/  //不包括隐藏文件
# ls /home/dir10/ -a
. .. .file4#2.rm删除示例2
# touch file{1..10}
# touch {1..10}.pdf
# rm -rf file
# rm -rf .pdf

2.文件管理之:查看文件内容(cat tac less more head tail tailf grep …)


#------cat
# cp /etc/passwd ./pass
# cat pass      #正常查看文件方式
# cat -n pass   #-n显示文件有多少行
# cat -A pass   #查看文件的特殊符号,比如文件中存在tab键
# tac pass      #倒序查看文件
cat >> test2.txt <<EOF
ads
adf
EOF#------less、more
# less /etc/services    #使用光标上下翻动,空格进行翻页,q退出
# more /etc/services    #使用回车上下翻动,空格进行翻页,q退出(有百分比)#------head
# head pass     #查看头部内容,默认前十行
# head -n5 pass #查看头部5行,使用-n指定
# ps aux | head -5 # 只看头部5个进程#------tail
# tail pass  # 查看文件尾部,默认10行
# tail -20 /var/log/secure  # 查看文件尾部20行
# tail -f /var/log/messages #-f动态查看文件尾部的变化
# tailf /var/log/messages   #查看文件尾部的变化
# ps aux | tail -2#------grep过滤文件内容
# grep "^root" pass     #匹配以root开头的行
# grep "bash$" pass     #匹配以bash结尾的行
# grep -i "ftp" pass    #忽略大小写匹配
# grep  -Ei "sync$|ftp" pass    #匹配文件中包含sync结尾或ftp字符串
# grep -n -A 2 "Failed" /var/log/secure #匹配/var/log/secure文件中Failed字符串,并打印它的下2行
# grep -n -B 2 "Failed" /var/log/secure #匹配/var/log/secure文件中Failed字符串,并打印它的上2行
# grep -n -C 2 "Failed" /var/log/secure #匹配/var/log/secure文件中Failed字符串,并打印它的上下2行# 上翻,下翻
control+b:下翻
control+f:上翻

3.文件管理之:联网下载文件(wget、curl)、文件上传与下载(rz、sz)

wget、curl联网下载文件

yum install wget -y
#选项: -O: 指定下载地址
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# crul:浏览网络上资源,-o保存到本地
#选项: -o: 指定下载地址
# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

rzsz上传下载文件

# yum install lrzsz -y  #不安装软件则无法执行该命令# rz            #只能上传文件文件上传(不能大于4g)
# sz /path/file #只能下载文件

4.文件管理之:文件或命令查找(locate、which、whereis、find)

文件查找

# locate /etc/sh       #搜索etc目录下所有以sh开头的文件
# locate -i /etc/sh    #搜索etc目录下,所有以sh开头的文件,忽略大小写

命令查找

# which ls  #查找ls命令的绝对路径# whereis ls       //查找命令的路径、帮助手册、等
# whereis -b ls    //仅显示命令所在的路径,仅看二进制# 对于内核相关的一些命令,用which whereis 是无法查询到的,需要使用type采查询
# type -a ls        #查看命令的绝对路径(包括别名)
# type -a for

5.文件管理之:字符处理命令(sort、uniq、cut、sed、awk、wc、)

sort排序
在有些情况下,需要对应一个无序的文本文件进行数据的排序,这时就需要使用sort进行排序了。

sort [OPTION]... [FILE]...
# -r:倒序 -n:按数字排序 -t:指定分隔符(默认空格) -k:指定第几列, 指定几列几字符(指定1,1  3.1,3.3)#1.首先创建一个文件,写入一写无序的内容
[root@lqz ~]# cat >> file.txt <<EOF
b:3
c:2
a:4
e:5
d:1
f:11
EOF#2.使用sort下面对输出的内容进行排序
[root@lqz ~]# sort file.txt
a:4
b:3
c:2
d:1
e:5
f:11#结果并不是按照数字排序,而是按字母排序。
#可以使用-t指定分隔符, 使用-k指定需要排序的列。
# -t 指定分隔符,-k指定列,按第二列排序
[root@lqz ~]# sort -t ":" -k2 file.txt
d:1
f:11 #第二行为什么是11?不应该按照顺序排列?
c:2
b:3
a:4
e:5#按照排序的方式, 只会看到第一个字符,11的第一个字符是1, 按照字符来排序确实比2小。
#如果想要按照数字的方式进行排序, 需要使用 -n参数,按数字排序。
[root@lqz ~]# sort -t ":" -n -k2 file.txt
d:1
c:2
b:3
a:4
e:5
f:11#测试案例,下载文件http://fj.xuliangwei.com/public/ip.txt,对该文件进行排序
[root@lqz ~]# sort -t. -k3.1,3.1nr -k4.1,4.3nr ip.txt

uniq去重如果文件中有多行完全相同的内容,当前是希望能删除重复的行,同时还可以统计出完全相同的行出现的总次数, 那么就可以使用uniq命令解决这个问题(但是必须配合sort使用,相邻的才能去重,所以要配合sort)。

uniq [OPTION]... [INPUT [OUTPUT]]
#选项:-c  计算重复的行#1.创建一个file.txt文件:
[root@lqz ~]# cat >>file2.txt <<EOF
abc
123
abc
123
EOF
#2.uniq需要和sort一起使用, 先使用sort排序, 让重复内容连续在一起
[root@lqz ~]# cat file.txt |sort
123
123
abc
abc
#3.使用uniq去除相邻重复的行
[root@lqz ~]# cat file.txt |sort|uniq
123
abc
#4.-c参数能统计出文件中每行内容重复的次数
[root@lqz ~]# cat file.txt |sort|uniq -c2 1232 abc

cut截取字段

cut OPTION... [FILE]...
#选项:-d 指定分隔符 -f 数字,取第几列 –f3,6三列和6列 -c 按字符取(空格也算)
#echo "Im lqz, is QQ 306334678" >file.txt
#过滤出文件里 lqz以及306334678#实现上述题目几种思路
# cut -d " " -f2,5 file.txt
# cut -d " " -f2,5 file.txt |sed 's#,##g'
# sed 's#,# #g' file.txt | awk -F " " '{print $2 " " $5}'
# awk  '{print $2,$5}' file.txt |awk -F ',' '{print $1,$2}'
# awk -F  "[, ]" '{print $2,$6}' file.txt
# awk -F '[, ]+' '{print $2,$5}' file.txt# awk 取列
awk '{print $2,$5}' file.txt
# -F 指定分隔符
awk '{print $2,$5}' file.txt | awk -F "," '{print $1,$2}'# sed 替换 sed 's###g'
# sed 's###g' 固定写法
# sed 's#,##g'  把逗号替换成空
cut -d " " -f2,5 file.txt | sed 's#,##g'

wc统计行号

wc [OPTION]... [FILE]...
#选项:-l显示文件行数 -c显示文件字节 -w显示文件单词# wc -l /etc/fstab      #统计/etc/fstab文件有多少行
# wc -l /etc/services   #统计/etc/services 文件行号
# ls |wc -l             #统计当前路径下有多少文件和文件夹#扩展方法
# grep -n "." /etc/services  | tail -1
# awk '{print NR $0}' /etc/services | tail -1
# cat -n /etc/services  | tail -1

习题: 分析如下日志,统计每个域名被访问的次数。

[root@student tmp]# cat web.log
http://www.lqz.com/index.html
http://www.lqz.com/1.html
http://post.lqz.com/index.html
http://mp3.lqz.com/index.html
http://www.lqz.com/3.html
http://post.lqz.com/2.html# awk -F '/' '{print $3}' web.log|sort -rn|uniq –c
# cut -d / -f3 web.log|sort -rn|uniq –c

习题: 使用awk取出系统的IP地址图解

5.系统文件属性

当我们使用ls -l列目录下所有文件时,通常会以长格式的方式显示,其实长格式显示就是我们Windows下看到的文件详细信息,我们也将其称为文件属性,那整个文件的属性分为十列。

[root@lqz ~]# ls -l ks.cfg
[root@lqz ~]# ll -h ks.cfg
-rw-------. 1 root root 4434 May 30 13:58 ks.cfg#
-rw-------. ①:第一个字符是文件类型,其他则是权限
1           ②:硬链接次数
root        ③:文件属于哪个用户
root        ④:文件属于哪个组
4434        ⑤:文件大小
May30 13:58 ⑥⑦⑧:最新修改的时间与日期
ks.cfg      ⑨:文件或目录名称

6.系统文件类型

1.通常我们使用颜色或者后缀名称来区分文件类型,但很多时候不是很准确,所以我们可以通过ls -l以长格式显示一个文件的属性,通过第一列的第一个字符来近一步的判断文件具体的类型。

[root@lqz ~]# ll -d /etc/hosts /tmp /bin/ls  /dev/sda /dev/tty1 /etc/grub2.cfg /dev/log /run/dmeventd-client
-rwxr-xr-x.  1 root root 117656 Jun 30  2016 /bin/ls
srw-rw-rw-.  1 root root      0 Jan 20 10:35 /dev/log
brw-rw----.  1 root disk   8, 0 Jan 20 10:36 /dev/sda
crw--w----.  1 root tty    4, 1 Jan 20 10:36 /dev/tty1
lrwxrwxrwx.  1 root root     22 Jan 13 11:31 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
-rw-r--r--.  1 root root    199 Jan 20 11:03 /etc/hosts
prw-------.  1 root root      0 Jan 20 10:36 /run/dmeventd-client
drwxrwxrwt. 61 root root   8192 Jan 21 13:01 /tmp#说明
-   #普通文件(文本, 二进制, 压缩, 图片, 日志等)
d   #目录文件
b   #设备文件(块设备)存储设备硬盘 /dev/sda1, /dev/sda2
c   #设备文件(字符设备),终端 /dev/tty1, /dev/zero
s   #套接字文件, 进程间通信(socket)
p   #管道文件
l   #链接文件

2.但有些情况下,我们无法通过ls -l文件的类型,比如: 一个文件,它可能是普通文件、也可能是压缩文件、或者是命令文件等,那么此时就需要使用file来更加精准的判断这个文件的类型。

[root@lqz ~]# file /etc/hosts
/etc/hosts: ASCII text[root@lqz ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=aa7ff68f13de25936a098016243ce57c3c982e06, stripped[root@lqz ~]# file /dev/sda
/dev/sda: block special[root@lqz ~]# file /dev/tty1
/dev/tty1: character special[root@lqz ~]# file /etc/grub2.cfg
/etc/grub2.cfg: broken symbolic link to `../boot/grub2/grub.cfg'[root@lqz ~]# file /home
/home: directory[root@lqz ~]# file /run/dmeventd-client
/run/dmeventd-client: fifo (named pipe)[root@lqz ~]# ll but
-rw-r--r-- 1 root root 42125 Apr  1 12:26 but
[root@lqz ~]# file but
but: Zip archive data, at least v1.0 to extract

PS: Linux文件扩展名不代表任何含义,仅为了我们能更好的识别该文件是什么类型。

7.系统链接文件

文件有文件名与数据,在Linux上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方,我们将其称为Block元数据,即文件的附加属性,如文件大小、创建时间、所有者等信息。我们称其为Inode在Linux中,inode是文件元数据的一部分但其并不包含文件名,inode号即索引节点号)文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。图1.展示了程序通过文件名获取文件内容的过程。
Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)
ll -i 查看inode

1.什么是软链接

软链接相当于Windows的快捷方式,软链接文件会将inode指向源文件的block,当我们访问这个软链接文件时,其实访问的是源文件本身。那么当我们对一个文件创建多个软链接,其实就是多个inode指向同一个block。当我们删除软链接文件时,其实只是删除了一个inode指向,并不会对源文件源文件造成影响,但如果删除的是源文件则会造成所有软链接文件失效。

2.什么是硬链接

若一个inode号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名,如下图hard link 就是 file 的一个别名,他们有共同的 inode。

3.软链接实践

#文件软链接示例
touch /root/file
ln -s /root/file /tmp/file_bak
ll /tmp/file_bak  //root下file链接到/tmp下并重命名为file_bak#目录软链接示例
mkdir /soft/nginx1.1 -p
ln -s /soft/nginx1.1/ /soft/nginx
ll /soft/nginx   //查看链接指向#软链接使用场景
1.软件升级
2.企业代码发布
3.不方便目录移动

4.硬链接实践

#文件硬链接示例
ln  /root/file /tmp/file_hard
ll /tmp/file_hard#PS:目录不能创建硬链接,硬链接文件可以用rm命令删除

5.硬链接与软链接区别1)ln命令创建硬链接,ln -s命令创建软链接。2)目录不能创建硬链接,并且硬链接不可以跨越分区系统。3)目录软链接特别常用,并且软链接支持跨越分区系统。4)硬链接文件与源文件的inode相同,软链接文件与源文件inode不同。5)删除软链接文件,对源文件及硬链接文件无任何影响。6)删除文件的硬链接文件,对源文件及链接文件无任何影响。7)删除链接文件的源文件,对硬链接无影响,会导致软链接失效。8)删除源文件及其硬链接文件,整个文件会被真正的删除。

Linux系列教程——Shell、Linux文件管理相关推荐

  1. Linux系列教程——1 Linux磁盘管理、2 Linux进程管理、3 Linux系统服务、 4 Linux计划任务

    文章目录 1 Linux磁盘管理 1.磁盘的基本概念 1.什么是磁盘 2.磁盘的基本结构 3.磁盘的预备知识 1.磁盘的接口类型 2.磁盘的基本术语 3.磁盘在系统上的命名方式 4.磁盘基本分区Fdi ...

  2. STM32MP157系列教程连载-Linux应用开发篇1:STM32MP1微处理器之Ubuntu安装与体验

    STM32MP157系列教程连载-Linux应用开发篇1:STM32MP1微处理器之Ubuntu安装与体验 截至目前上传的博文已经有6篇了(硬件4篇,安装环境2篇),最近手头在搞STM32MP157C ...

  3. STM32MP157系列教程连载-Linux系统移植篇4:STM32MP1微处理器之Bootloader移植

    STM32MP157系列教程连载-Linux系统移植篇4:STM32MP1微处理器之Bootloader移植 第 1 章 BootLoader(Uboot)移植 1.1 实验原理 1.1.1 概念 简 ...

  4. 【linux系列】统计Linux系统缺页的次数

    [linux系列]统计Linux系统缺页的次数 编译环境 修改任务 修改准备 修改源码 修改 arch/x86/mm/fault.c 修改 include/linux/mm.h 修改 kernel/k ...

  5. 嵌入式Linux开发教程:Linux常见命令(上篇)

    摘要:这是对周立功编著的<嵌入式Linux开发教程>的第7期连载.本期刊载内容有关LinuxLinux常见命令中的导航命令.目录命令和文件命令.下一期将连载网络操作命令.安装卸载文件系统等 ...

  6. 轻松学习LINUX系列教程推出

    本系列多媒体教程已完成的博文: 1.轻松学习Linux之入门篇 http://chenguang.blog.51cto.com/350944/449214 2.轻松学习Linux之本地安装系统 (分区 ...

  7. cgdisk linux使用教程,Arch Linux安装过程整理

    整理一下这个教程便于以后可以无脑重装Arch Linux,美滋滋啊. 准备以及分区 1.准备 准备内容 USB stick Arch Linux ISO image Arch Linux Downlo ...

  8. linux+用户的shell,linux更换用户_更改linux用户登录shell的方法

    摘要 腾兴网为您分享:更改linux用户登录shell的方法,幸福钱庄,小学英语,我和你,万科物业等软件知识,以及光大app,视频解码包,dns修改软件,天天小说阅读器,微信跳一跳,企业管家,蚂蚁邦, ...

  9. Linux学习教程,Linux入门教程(超详细)| 网址推荐

    今天发现一个Linux中文教程,再此收藏备份. 目录 第1章 Linux简介 第2章 Linux安装 第3章 Linux文件和目录管理 第4章 Linux打包(归档)和压缩 第5章 Vim文本编辑器 ...

最新文章

  1. android4.2添加重启菜单项
  2. 中职一年级计算机英语课件,中职生一年级英语.doc
  3. Pygame 整活五子棋
  4. 朝着理想坚实迈进_坚实原则:单一责任原则
  5. Matlab--获取300dpi或600dpi图形插入word2010中
  6. 程序导致IIS服务器应用程序池停止
  7. java随机姓名_Java随机产生中文昵称
  8. 余弦函数导数推导过程_对三角函数深入理解以及换元法的应用
  9. discuz点歌台插件
  10. linux下获取主机信息
  11. linux命令---ubuntu的vim命令用法
  12. 集成运放的电压跟随器有什么作用?
  13. CentOS7--安装谷歌浏览器--详细步骤
  14. 贝叶斯因果网络_因果关系和贝叶斯网络
  15. 如何将多个文件的简体中文名快速翻译成繁体中文
  16. 基于安卓的视频遥控小车
  17. win10下如何装win7
  18. JavaApi:IO基础
  19. MATLAB计算信号短时平均过零率
  20. List 常用的 Lambda 操作

热门文章

  1. “程序员羊皮卷”中的职场江湖——《程序员羊皮卷》书评(4
  2. 封神台-掌控者新靶场 - Kali系列4题
  3. 怎样设计出一个起飞的Token
  4. vue elementUI 高德地图接口实现省市区街道四级联动
  5. Google Earth Engine(GEE)——逐年批量下载sentinel-2多波段影像
  6. 有哪些无副作用的助眠神器推荐,五款助眠神器帮你告别失眠困扰
  7. SNS交友网站会成为下一个分众吗
  8. 泛微OA e-cology8 数据库链接
  9. IT领袖峰会--科技大佬热议“风口”论
  10. 计算机软件工如何防脱发,【如何防止头顶脱发】_头顶脱发_怎么预防_如何预防_怎么解决-大众养生网...