linux命令入门
为什么要学Linux命令
- Linux从诞生就是黑屏界面,所有操作,倚靠命令完成,如磁盘读写、文件操作、网络管理等
- 企业中,服务器的维护工作都是
ssh客户端
完成,没有图形界面 - 程序员想要管理linux服务器,必须学习常用命令
Linux命令学习方法
- 熟能生巧,多敲打,多练习即可
- 不可能一下子掌握所有命令用法,学会使用搜索引擎查阅命令资料
兄弟们,你们能做到如下,说明运维学的不差,问题不大!学习方法肯定是对的!就差熟练度
- 于超老师,上课讲的东西,能听懂,跟着操作,能做对!(第一次,见识,练习,基本掌握),记不住
- 反复练习,反复敲打,一个命令,敲打500次,才能很熟练
- 运维命令,用法,越学越多,怕记不住,会忘(很正常,大家都这样,写笔记,整理你学过的东西!复习,看你得笔记!而不是超哥得笔记。
- 10年了,10天,就觉得多??闹呢?
当年超哥在一家美资企业,一位台湾老程序员送我的一本书。。。
可能是看我骨骼惊奇吧!!
打开终端,输入命令
终端就是一个可以让你操作的地方,你打开终端,就可以输入指令,发给操作系统。
本节操作,告知各位,学命令的重要性!
不懂命令,你都不知道如何下手,!!先听课即可!
什么是linux命令
就是你在linux系统里,输入linux系统才能识别的一些指令,你输入的一些固定存在的单词字母,就是命令。
前面咱们已经成功安装了Linux系统--ubuntu 22.04,那么现在跟着超哥奔向Linux命令行的世界。
Linux命令格式
1.一般情况下,【参数】是可选的,一些情况下【文件或路径】也是可选的
2.参数 , 同一个命令,跟上不同的参数执行不同的功能
3.执行linux命令,添加参数的目的是让命令更加贴切实际工作的需要!
4.linux命令,参数之间,普遍应该用一个或多个空格分割!
1.完整的命令格式
2.没有参数,没有对象
3.没有参数,有对象
Linux命令提示符
命令提示符
[py@pylinux ~]$ 普通用户py,登陆后
[root@pylinux ~]# 超级用户root,登录后
root代表当前登录的用户
@ 分隔符
pylinux 主机名
~ 当前的登录的位置,此时是家目录
# 超级用户身份提示符
$ 普通用户身份提示符
美化命令提示符
[yuchao-linux-242 root /opt]#tail -2 /etc/profile
# 美化PS1显示
export PS1='\[\033[01;35m\][\[\033[01;32m\]\h\[\033[01;31m\] \u \w\[\033[31m\]\[\033[01;35m\]]\[\033[01;36m\]\$\[\033[00m\]'
[yuchao-linux-242 root /opt]#source /etc/profile
Tab命令补全
linux终端里,系统为了让你更省心,不用记忆那么多内容,可以让你输入tab
键,可以快速列出你想要的内容,你只需要输入一个命令的开头即可,它一般可以补全linux命令,以及文件路径。
[yuchao@localhost Desktop]$ ls
ls lsblk lscpu lshw lsipc lslogins lsmd lsmod lsof lsscsi lsusb
lsattr lscgroup lsdiff lsinitrd lslocks lsmcli lsmem lsns lspci lssubsys lsusb.py
Linux命令初体验
su命令
用于切换系统不同的用户。
如windows的用户切换,从老王用户,切换到小李用户。
linux用户的切换,并且我们直接切换到超级用户,切换到皇帝身份。
# 短横线 - 表示切换用户且加载该用户的环境变量,且进入该用户家目录
[yuchao@localhost Desktop]$
[yuchao@localhost Desktop]$ su - root
Password:
[root@localhost ~]#
# 创建普通用户
useradd timo
passwd timo # 123123
# root切换普通用户,不需要密码,反之需要对方密码,root特权!!
# man手册,--help,和su切换用户,sudo 切换到root用户几个命令学习。
uname命令
在使用uname命令时,一般会固定搭配上-a参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息。
1.作用:
显示系统信息
2.语法:
uname -参数
#
[root@localhost opt]# uname -a
Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
# 解释
Linux 系统名称
localhost.localdomain 主机名
3.10.0-862.el7.x86_64 内核版本号
3 是主版本号,重大变化,才会变动
10 是次版本号,新加功能后版本数字变化
0 表示修改次数
862表示编译次数
el7 表示是7代版本
x86_64 表示系统是64位的
发布时间
GNU/Linux是操作系统名称,开源计划
ls命令
功能:平铺显示目录下的文件列表
语法:
1.完整的命令格式
ls -l /
2.没有参数,没有对象,其实默认有一个点
ls
3.没有参数,有对象
ls /
关于路径
linux命令操作,关于要操作不同的文件,主要就分,绝对路径、相对路径
关于参数(选项)
ls -l # 使用较长格式列出信息
ls -h #-h, --human-readable 与-l 一起,以易于阅读的格式输出文件大小,kb、mb、gb
ls -a # 显示隐藏文件 ,linux下以.开头的文件,表示是隐藏的
file命令,验证文件类型
单位换算
# 1TB = 1024GB
# 1GB = 1024MB
# 1MB = 1024KB
# 1KB(千字节) = 1024B(字节)
ubuntu安装openssh
# 1.确保机器打开22,sshd服务!这个软件是提供远程管理的!需要安装
ss --help
# -tunlp 参数组合 -t -u -n -l -p
ss -tunlp # 检查22端口
systemctl status ssh # 检查系统是否运行ssh程序
# 以root身份执行命令
sudo apt install openssh-server -y
# 直接查看服务状态,启动服务
systemctl status ssh
# 看端口,看进程,看服务
ss -tunlp
# 远程访问试试,登录
# 安装xshell工具,下一步安装
pwd命令
功能、语法
pwd(Print Working Directory) 显示当前目录
cd命令
主要功能:cd全称change directory,切换目录(从一个目录跳转到另外一个目录)
基本语法:
cd 涉及文件操作了,那就存在绝对,相对路径了
# 练习
[yuchao@localhost ~]$
[yuchao@localhost ~]$ pwd
/home/yuchao
[yuchao@localhost ~]$ cd /opt
[yuchao@localhost opt]$ ls
rh
[yuchao@localhost opt]$
[yuchao@localhost opt]$ cd ../home/yuchao
[yuchao@localhost ~]$
[yuchao@localhost ~]$
[yuchao@localhost ~]$ pwd
/home/yuchao
[yuchao@localhost ~]$ cd -
/opt
[yuchao@localhost opt]$
[yuchao@localhost opt]$
[yuchao@localhost opt]$ cd ~
[yuchao@localhost ~]$
[yuchao@localhost ~]$
特殊目录
- 上一次目录 cd -
~ 当前登录的用户家目录 cd ~
. 当前位置
.. 上一层位置
# 小节
pwd
sudo
cat
.
..
-
~
cd
clear
clear 指令用来清除终端屏幕,在终端中通过快捷键 Ctrl+L 清除屏幕
shutdown
shutdown 以一种安全的方式关闭系统。
-r
重启。
-h
停机。
# 练习
[root@linux ~]# shutdown –h now #关机
[root@linux ~]# shutdown –h 23:00 #晚上11点关机
[root@linux ~]# shutdown –r now #重启
[root@linux ~]# shutdown –r +30 'reboot now' #30分钟后重启,并且提示reboot now
# poweroff
# unix linux GNU
man命令
当你忘记了某个命令怎么用,以及参数有哪些,都是什么作用,该怎么查?
查于超老师的笔记?还是咋办?
man 命令,查看linux命令的帮助手册,以后慢慢看,且是英文的,知道这个方式即可,可以复制出来,翻译一下也行。
学习阶段,一定要反复,大量练习,确保你真的学会。
面试,提问,回答不出来。1.不会 2.不熟
工作时候,谁关心你怎么做出来的?查资料,查笔记,都行。
有自己的笔记库,更省事。
临时去百度查,浪费大量时间。
history
history 命令可以用来显示曾执行过的命令,且显示条目有数量限制,默认是1000个,可修改,超哥以后再说
[yuchao@localhost ~]$ echo $HISTSIZE
1000
# 显示所有历史记录
[yuchao@localhost ~]$ history
# 显示最后2条
[yuchao@localhost ~]$ history 2
2 cd
3 history 2
# 清空历史
[root@redhat ~]# history -c #清除历史记录
w命令
小节
- clear
- shutdown
- w
- history
- man
hostnamectl命令
记忆方式:hostname + control 主机名控制的意思
作用:它是用来修改主机名称
语法
[root@10 ~]# hostnamectl --help
hostnamectl [OPTIONS...] COMMAND ...
Query or change system hostname.
-h --help Show this help
--version Show package version
--no-ask-password Do not prompt for password
-H --host=[USER@]HOST Operate on remote host
-M --machine=CONTAINER Operate on local container
--transient Only set transient hostname
--static Only set static hostname
--pretty Only set pretty hostname
Commands:
status Show current hostname settings
set-hostname NAME Set system hostname
set-icon-name NAME Set icon name for host
set-chassis NAME Set chassis type for host
set-deployment NAME Set deployment environment for host
set-location NAME Set location for host
centos7系统里有3类主机名
--transient Only set transient hostname
--static Only set static hostname
--pretty Only set pretty hostname
- 静态主机名,static,关机后,重启后,名字依然存在,因为信息写入了/etc/hostname文件,每次开机都会再读取该文件内容。
- 临时主机名,transient,关机,重启后,你设置的主机名失效。
- 优雅主机名,pretty,可以让主机名显示更好看,如一些特殊符号。
如何查看主机名,更改主机名
(注意切换到root用户)
1.查看主机名
# 可以看到静态主机名
# 临时主机名,是系统默认读取的网络信息
# 还有系统平台信息,主机版本信息,内核版本
[root@10 ~]#
[root@10 ~]# hostnamectl
Static hostname: localhost.localdomain
Transient hostname: 10.96.0.145
Icon name: computer-vm
Chassis: vm
Machine ID: 340cf8a8efa8496494a0e9d7388e5f1f
Boot ID: 8bd702c0ae3b42248b789515e52def50
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10
2.设置静态主机名(基本用这个),永久生效
设置了永久主机名后,发现临时名字都没了
[root@10 ~]# hostnamectl set-hostname linux02.yuchaoit.cn
[root@10 ~]#
[root@10 ~]# hostnamectl
Static hostname: linux02.yuchaoit.cn
Icon name: computer-vm
Chassis: vm
Machine ID: 340cf8a8efa8496494a0e9d7388e5f1f
Boot ID: 0c2d37e952104524a0f1e58fdf33c2b5
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-862.el7.x86_64
Architecture: x86-64
[root@10 ~]#
3.配置优雅主机名
用在什么情况下?
当你的主机名,有特殊字符的话,主机名会自动修改你的格式
[root@10 ~]# hostnamectl set-hostname linux02.yuchaoit.cn
[root@10 ~]#
[root@10 ~]# hostnamectl
Static hostname: linux02.yuchaoit.cn
Icon name: computer-vm
Chassis: vm
Machine ID: 340cf8a8efa8496494a0e9d7388e5f1f
Boot ID: 0c2d37e952104524a0f1e58fdf33c2b5
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-862.el7.x86_64
Architecture: x86-64
[root@10 ~]#
[root@10 ~]# hostnamectl --pretty set-hostname "yuchao's linux01 server"
[root@10 ~]#
[root@10 ~]# hostnamectl
Static hostname: linux02.yuchaoit.cn
Pretty hostname: yuchao's linux01 server
Icon name: computer-vm
Chassis: vm
Machine ID: 340cf8a8efa8496494a0e9d7388e5f1f
Boot ID: 0c2d37e952104524a0f1e58fdf33c2b5
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-862.el7.x86_64
Architecture: x86-64
[root@10 ~]# hostnamectl --pretty
yuchao's linux01 server
[root@10 ~]#
[root@10 ~]# hostnamectl --static
linux02.yuchaoit.cn
# 如果你设置了不规则主机名,系统会去除特殊符号
[root@10 ~]# hostnamectl set-hostname "yuchao's linux01 server"
[root@10 ~]#
[root@10 ~]#
[root@10 ~]# hostnamectl
Static hostname: yuchaoslinux01server
Pretty hostname: yuchao's linux01 server
Icon name: computer-vm
Chassis: vm
Machine ID: 340cf8a8efa8496494a0e9d7388e5f1f
Boot ID: 0c2d37e952104524a0f1e58fdf33c2b5
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-862.el7.x86_64
Architecture: x86-64
[root@10 ~]#
Linux系统文件
/etc初始化系统重要文件,centos,redhat系列参考。
w
/etc/resolv.conf
:Linux系统DNS客户端配置文件,域名,解析对应的ip地址,DNS解析
,dns服务器,- 查电话,查询xx营业厅的电话,打114电话查询。114电话和地址对应的数据库
- baidu.com > IP
- yuchaoit.cn > IP
- douyin.com > IP
dns劫持
- 你得浏览器 > 期望访问正常的域名(电脑的dns服务器被恶意篡改) > 域名(解析成黑客的IP) >访问的错误的IP地址,看到恶意的假网站。
```
安装命令文本编辑器,vim编辑器
sudo apt install vim -y
编辑dns配置文件,清空,导致机器无法dns解析
sudo vim /etc/resolv.conf
以#开头的注解行,给咱们自己看的,帮助文档
第一步,vim此时是命令模式,可以输入不同的命令,比如 按下 i,进入编辑模式
按下i,进入插入模式
第二步,按下esc键,退出编辑模式
第三部,输入 :wq! 保存且退出vim ,,注意!用英文输入法!!!!!!!!
# 重新写入2个dns服务器地址,作为主备,防止单个故障。
114.114.114.114
114.114.115.115
# 2个知识点
- vim 基本用法
- dns配置文件 /etc/resolv.conf 如何用
-
```
ubuntu常用文件
在Ubuntu(基于Linux)中有许多常用的文件和文件类型,以下是一些介绍:
一、系统配置文件
- /etc/apt/sources.list
- 这个文件用于配置软件包的源。Ubuntu通过软件包管理系统(APT - Advanced Package Tool)来安装、更新和删除软件。
sources.list
文件包含了软件仓库的位置信息,这些仓库存储了各种软件包。例如,默认情况下,它会包含Ubuntu官方仓库的地址,如deb http://archive.ubuntu.com/ubuntu/ focal main restricted
(这里的focal
是Ubuntu版本代号,不同版本会有所不同)。用户可以通过修改这个文件来添加其他可靠的软件源,比如一些第三方软件库,以获取更多软件选择,但需要注意添加的源的安全性和兼容性。
- 这个文件用于配置软件包的源。Ubuntu通过软件包管理系统(APT - Advanced Package Tool)来安装、更新和删除软件。
- /etc/fstab
- 它是文件系统表(Filesystem Table),用于在系统启动时自动挂载文件系统。每一行代表一个要挂载的文件系统,格式一般为
<设备名称> <挂载点> <文件系统类型> <挂载选项> <备份选项> <文件系统检查顺序>
。例如,UUID = 12345 - 6789 - abcd - efgh / ext4 defaults 0 1
,其中UUID
是设备的唯一标识符,/
是挂载点,ext4
是文件系统类型,defaults
是挂载选项,0
和1
分别是备份选项和文件系统检查顺序。这个文件的正确配置对于系统能够正确访问硬盘分区、网络存储等文件系统非常重要。
- 它是文件系统表(Filesystem Table),用于在系统启动时自动挂载文件系统。每一行代表一个要挂载的文件系统,格式一般为
/etc/hosts
- 用于本地主机名解析。它将主机名映射到IP地址,在没有DNS(Domain Name System)服务或者需要本地自定义主机名解析时使用。例如,
127.0.0.1 localhost
这一行表示将localhost
这个主机名映射到本地回环地址127.0.0.1
。用户可以添加其他条目,如192.168.1.10 myserver
,这样当在本地访问myserver
这个主机名时,就会被解析到192.168.1.10
这个IP地址。
- 用于本地主机名解析。它将主机名映射到IP地址,在没有DNS(Domain Name System)服务或者需要本地自定义主机名解析时使用。例如,
/etc/passwd
- 存储用户账户信息。每一行代表一个用户,格式为
<用户名>:<密码占位符>:<用户ID>:<组ID>:<用户描述信息>:<用户主目录>:<用户默认shell>
。例如,root:x:0:0:root:/root:/bin/bash
,其中root
是用户名,x
表示密码存储在/etc/shadow
文件中(出于安全考虑,密码不直接存储在/etc/passwd
中),0
是用户ID和组ID(root
用户的特殊ID),/root
是用户主目录,/bin/bash
是用户默认使用的shell。
- 存储用户账户信息。每一行代表一个用户,格式为
/etc/shadow
- 用于存储用户密码的加密信息和密码过期策略等。这个文件只有
root
用户可以读取,以保证密码的安全性。每行的格式为<用户名>:<加密后的密码>:<最后一次修改时间>:<最小密码修改间隔>:<密码有效期>:<密码过期前警告天数>:<密码过期后宽限期>:<账号失效时间>:<保留字段>
。例如,root:$6$aBcdefGh$a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6:18674:0:99999:7:::
,其中$6$aBcdefGh$a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
是经过加密的密码部分。
- 用于存储用户密码的加密信息和密码过期策略等。这个文件只有
/etc/group
- 存储用户组的信息。每行格式为
<组名>:<组密码占位符>:<组ID>:<组成员列表>
。例如,sudo:x:27:user1,user2
,表示sudo
组的组ID是27
,成员有user1
和user2
。用户组用于管理用户对系统资源的访问权限,方便进行权限分配。
- 存储用户组的信息。每行格式为
二、日志文件
/var/log/syslog
系统日志文件,记录了系统运行过程中的各种信息,包括内核消息、系统服务启动和停止信息、设备驱动程序的消息等。例如,当一个新的USB设备插入时,内核会在这个文件中记录设备的识别信息,如
Jan 1 00:00:01 mycomputer kernel: [12345.67890] usb 1 - 1: new full - speed USB device number 2 using xhci_hcd
,这里记录了USB设备在xhci_hcd
驱动下被识别的时间和相关信息。统计文件行数 wc -l /var/log/syslog # 统计文件行数 cat -n /var/log/syslog # 不合适!因为它一次性把文件所有内容都打印出来!
- /var/log/auth.log
- 主要记录用户认证相关的事件,如用户登录、sudo命令的使用等。当用户通过SSH登录系统时,会在这个文件中留下记录,像
Jan 1 00:00:01 mycomputer sshd[1234]: Accepted password for user1 from 192.168.1.100 port 5000 ssh2
,表示用户user1
从192.168.1.100
通过SSH登录成功。这对于系统安全监控和审计非常有用。
- 主要记录用户认证相关的事件,如用户登录、sudo命令的使用等。当用户通过SSH登录系统时,会在这个文件中留下记录,像
三、可执行文件和脚本
- /bin/bash
bash
(Bourne - Again SHell)是Ubuntu中最常用的命令行解释器。用户在终端中输入的命令就是由bash
来解析和执行的。它提供了许多内置命令,如cd
(用于切换目录)、ls
(用于列出目录内容)等,同时也可以执行外部的可执行文件和脚本。例如,当用户在终端输入ls -l
时,bash
会解析这个命令,并调用系统中的ls
程序来执行,并将-l
参数传递给ls
,以长格式列出文件和目录信息。
- /usr/bin/apt-get
- 这是APT软件包管理工具的命令行程序,用于在终端中安装、更新和删除软件包。例如,
apt - get update
命令用于更新软件包列表,apt - get install package - name
用于安装指定的软件包(如package - name
是vim
,就会安装vim
文本编辑器)。
- 这是APT软件包管理工具的命令行程序,用于在终端中安装、更新和删除软件包。例如,
- /usr/local/bin目录下的自定义脚本
- 这个目录通常用于存放用户自己编写或安装的可执行脚本。比如,用户编写了一个名为
backup.sh
的备份脚本,将其放在/usr/local/bin
目录下,并赋予执行权限(chmod +x /usr/local/bin/backup.sh
)后,就可以在终端中直接执行backup.sh
来进行备份操作。这个目录在系统升级时不会被覆盖,方便用户管理自己的工具和脚本。
- 这个目录通常用于存放用户自己编写或安装的可执行脚本。比如,用户编写了一个名为
Linux系统基础概念
提示:可以放大linux图形化终端的字体
ctrl shift + 放大字体
ctrl - 缩小字体
1.linux严格区分大小写
windows:不区分大小写,比如你创建文件夹,输入大写,小写,windows都认为是同一个。
linux严格区分大小写,文件夹的名字,大小写不同,就是不同的文件夹,文件也一样,因此我们后续对文件,文本操作,要注意大小写的区分处理。
可以看到,仅有一个字母的大小写不同,也是3个文件夹。
2.文件扩展名
windows
Windows是依赖扩展名,区分不同的文件类型。比如
.txt 是普通文本,一般是记事本这样的编辑器打开
.exe 是window下可以直接执行的文件,比如qq.exe 双击可以运行出qq登录器
.doc 是word文档
windows下修改文件名,是会修改文件类型的,会修改文件属性。
linux
mv命令 move单词
mv 旧文件名 新文件名 # 重命名
mv 文件 文件夹/ # 移动文件到xx文件夹下
而linux是大有不同,通过权限位标识
来确定文件类型,我们在学习文件属性篇,重点再讲解,先记住如下概念。
- linux不通过文件扩展名来识别文件类型,文件扩展名,仅仅就是让运维人员能够肉眼一眼,就知道它是什么类型,便于管理
- 但其实是该文件类型在创建时已经定义好,文件名只是用于显示,不像windows下有实际意义。
- 即使你修改linux的文件名,也不会修改文件的类型。
# 压缩,打包命令,一堆文件,合到一起
tar 各种参数用法
tar
-c 打包
-f 制定归档文件名
-x 拆包
# 打包当前目录下所有文件,文件夹到归档文件中
tar -cf desktop-all.tar. ./*
# 请用file命令验证文件类型
# 拆包
tar -xf desktop
# 不合理!尽可能的,给文件添加上对应的后缀,便于人类识别
扩展名小结
为了区分出文件类型,我们还是会给linux文件,添加上阅读性更好的文件扩展名字。
常见的有
压缩文件
- Linux 下常见的压缩文件名有
*.gz、*.bz2、*.zip、*.tar.gz、*.tar.bz2、*.tgz
等。 - 为什么压缩包一定要写扩展名呢?很简单,如果不写清楚扩展名,那么管理员不容易判断压缩包的格式,虽然有命令可以帮助判断,但是直观一点更加方便。
- 就算没写扩展名,在 Linux 中一样可以解压缩,不影响使用。
- Linux 下常见的压缩文件名有
软件安装包
- 如windows下的exe文件一样作用,linux也需要安装软件,也有软件包的格式。后面学习软件管理时重点讲解。
- 如redhat系列的RPM包,所有的RPM包都是.rpm后缀格式。
- 脚本文件
- 如shell脚本,.sh
- 如python脚本,.py
- 如java的 .java
- 网页相关的文件
- .html
- .jpg
- .js
- .css
这张图下展示了大多的linux后缀格式
3.Linux一切皆文件
使用linux,记住一句话,linux一切皆文件,linux上所有的内容,都以文件的形式保存。
比如我们可以通过访问某个路径下的文件内容,读取如网卡的信息,读取如U盘的信息。
以查看进程为例,进程指的是系统上运行的一个程序,如windows下的进程,这是一段程序,通过任务管理器,才能找到它的信息。
linux读取进程信息,可以直接找到进程的文件
linux普通文件/文件夹
普通文件,类似windows里的txt文件概念,可以直接写入内容,查看文件内容,这就是普通文件。
windows普通文件特点,一般可以这么操作的就称之为普通文件,包括了很多类型,如.txt .doc
- 编辑器直接打开
- 写入,修改,保存,查看内容
linux普通文件,如何区分,我们知道没法通过后缀名直接判断
linux可执行文件
可执行文件,指的是,该文件,可以双击运行,产生一些执行任务,比如QQ安装包,批量处理脚本文件。
windows,肉眼可以通过不同的后缀,一般可以得知,是什么文件类型,如下是常见的可执行类型。
linux,是否可执行,就不是后缀决定的,而依然是通过文件属性查看的。(这个属性,在你创建该文件时就决定了,以不同的linux命令决定)
linux文件夹
可以通过肉眼观察(前提是安装了图形化linux界面),蓝色的是文件夹,以及文件属性开头是d,表示目录。
文件夹用于管理一堆文件,以及子文件夹。
windows的文件夹就不多说了。
chmod 修改文件属性
chmod +x file
4.Linux的目录必须挂载后使用
挂载,mount,指的是给存储设备分配盘符,让我们能找到,使用存储设备(U盘,移动硬盘)
windows下的挂载,超哥的电脑里有好几块硬盘,C盘是固态硬盘,D,E两个盘是机械硬盘。
windows操作系统给硬盘加上了标记,我们通过C盘,盘符,即可找到C盘里的数据。
linux里没有提供这样的字母,盘符。
而是
1.创建一个空文件夹,该文件夹有个名字,叫做挂载点(理解为windows下的盘符概念)
2.把设备和这个空文件夹做一个连接(这就叫做挂载),挂载是通过linux命令实现,后面讲。
图解linux挂载
windows
- 买硬盘
- 分区
- 格式化
linux
- 买硬盘
- 分区
- 格式化
- 挂载
挂载命令
mount /dev/sda1 /mnt/chaoge_file
5.一切皆文件细节
linux/unix下的哲学核心思想是‘一切皆文件’。
“一切皆文件”,指的是,对所有文件(目录、字符设备、块设备、套接字、打印机、进程、线程、管道等)操作,读写都可用fopen()/fclose()/fwrite()/fread()等函数进行处理。屏蔽了硬件的区别,所有设备都抽象成文件,提供统一的接口给用户。虽然类型各不相同,但是对其提供的却是同一套操作界面。更进一步,对文件的操作也可以跨文件系统执行。
那么如何操作一个已经打开的文件?
文件描述符(file descriptor),简称fd。这里就使用到了“文件描述符”,它是一个对应某个已经打开的文件的索引(非负整数)。
文件类型
类型 | 简称 | 描述 |
---|---|---|
普通文件 | -,Normal File | 如mp4、pdf、html log; 用户可以根据访问权限对普通文件进行查看、更改和删除,包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.第一个属性为 [-] |
目录文件 | d,directory file | /usr/ /home/ 目录文件包含了各自目录下的文件名和指向这些文件的指针,打开目录事实上就是打开目录文件,只要有访问权限,就可以随意访问这些目录下的文件。能用#cd命令进入的。第一个属性为[d],例如 [drwxrwxrwx] |
硬链接 | -,hard links | 若一个inode号对应多个文件名,则称这些文件为硬链接。硬链接就是同一个文件使用了多个别名删除时,只会删除链接, 不会删除文件; 硬链接的局限性:1.不能引用自身文件系统以外的文件,即不能引用其他分区的文件;2.无法引用目录; |
符号链接(软链接) | l,symbolic link | 若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接,克服硬链接的局限性, 类似于快捷方式,使用与硬链接相同。 |
字符设备文件 | c,char | 文件一般隐藏在/dev目录下,在进行设备读取和外设交互时会被使用到 即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c]。 #/dev/tty的属性是 crw-rw-rw-,注意前面第一个字 c,这表示字符设备文件 |
块设备文件 | b,block | 存储数据以供系统存取的接口设备,简单而言就是硬盘。 # /dev/hda1 的属性是 brw-r—– ,注意前面的第一个字符是b,这表示块设备,比如硬盘,光驱等设备 系统中的所有设备要么是块设备文件,要么是字符设备文件,无一例外 |
FIFO管道文件 | p,pipe | 管道文件主要用于进程间通讯。FIFO解决多个程序同时存取一个文件所造成的错误。比如使用mkfifo命令可以创建一个FIFO文件,启用一个进程A从FIFO文件里读数据,启动进程B往FIFO里写数据,先进先出,随写随读。 # pipe |
套接字 | s,socket | 以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。用于进程间的网络通信,也可以用于本机之间的非网络通信,第一个属性为 [s],这些文件一般隐藏在/var/run目录下,证明着相关进程的存在 |
6.linux文件目录结构
Linux与windows区别
- windows特点:
E:\学习视频\高清视频\
- Linux目录特点:
/etc/hosts
/root/data/yuchao.txt
Linux 系统目录结构基本特点:
1.Linux下一切从根
开始,根里面的第一层目录,叫做一级目录,然后依次二级目录。
2.Linux下面的目录是一个有层次的目录结构
3.在linux中每个目录可以挂载到不同的设备(磁盘)上
4.Linux 下设备不挂载不能使用,不挂载的设备相当于没门没窗户的监狱(进不去出不来),挂载相当于给设备创造了一个入口(挂载点,一般为目录)
操作系统目录分隔符
windows平台命令行目录分隔符
Linux平台命令行目录分隔符
Linux与Windows的目录结构比较
Linux首先是建立一个根"/"文件系统,所有的目录也都是由根目录衍生出来。
登录系统后,在当前命令窗口输入命令:
ls /
查看结果如下图:
在Linux底下,所有的文件与目录都是由根目录开始,是目录与文件的源头,然后一个个的分支下来,如同树枝状,因此称为这种目录配置为:目录树。
目录树的特点是什么呢?
- 目录树的起始点是根目录(/,root);
- 每一个目录不止能使用本地的文件系统,也可以使用网络上的文件系统,可以利用NFS服务器挂载特定目录。
- 每一个文件在此目录树中的文件名,包含完整路径都是独一无二的。
Linux目录挂载
挂载通常是将一个存储设备
挂接到一个已经存在的目录
上,访问这个目录
就是访问该存储设备的内容。
对于Linux系统来说,一切接文件,所有文件都放在以根目录
为起点的树形目录结构中,任何硬件设备也都是文件形式
如图所示,是U盘存储设备和Linux系统自己的文件系统结构,此时Linux想要使用U盘的硬件设备,必须将Linux本身的目录
和硬件设备的文件目录合二为一,此过程就称之为挂载
。
挂载操作会隐藏原本Linux目录中的文件,因此选择Linux本身的目录,最好是新建空目录用于挂载
挂载之后,这个目录被称为挂载点
mount -l # 查看机器挂载点
# 查看光盘文件,一切皆文件 /dev/cdrom
mount /dev/cdrom /iso_data
umount /iso_data
此时U盘文件系统已经是Linux文件系统的一部分,访问/sdb-u文件夹,即是访问访问U盘系统中的文件夹。
linx的环境变量
同学们应该都会配置windows下的环境变量(PATH),都知道系统会按照PATH的设定,去每个PATH定义的目录下搜索可执行文件。
那么如何查看Linux下的PATH环境变量呢?
执行命令:
echo $PATH
变量,x=3 y=4
如何取出变量的值,固定语法
echo ${PATH}
echo命令是有打印的意思
$符号后面跟上PATH,表示输出PATH的变量
PATH(一定是大写的)这个变量是由一堆目录组成,分隔符是":"号,而不同于windows的";"号。
绝对路径与相对路径
Linux中非常重要的概念--路径,路径用来定位如何找到某个文件。
Linux下特别注意文件名/路径的写法,可以将所谓的路径(path)定义为绝对路径(absolute)和相对路径(relative)。这两种文件名/路径的写法依据是这样的:
绝对路径:由根目录(/)为开始写起的文件名或者目录名称,如/home/yuchao/test.py
- 相对路径:相对于目前路径的文件名写法。例如./home/yuchao/exam.py或../../home/yuchao/exam.py,简单来说只要开头不是/,就是属于相对路径,
因此你必须了解,相对路径是:以你当前所在路径的相对路径来表示的。
# 绝对路径
mkdir -p /a/b/c/
# 当前路径下,相对路径表示
mkdir ./a/b/c/
# 既然是相对路径,就是以你当前所处的位置,为相对
# 换算为绝对路径. /tmp/a/b/c
# 上一级目录的相对语法
mkdir ../a/b/c/
# /tmp 是linux临时目录,程序产生公开,临时数据,放到这里
例如你现在在/home 这个目录下,如要进入/var/log这个路径,如何写呢?
- cd /var/log (绝对路径)
- cd ../var/log(相对路径)
结果如图:
因为你在/home底下,因此你要回到上一层(../)之后,才能继续前往/var,特别注意:
- . :代表当前的目录,也可以用./ 来表示,注意结尾的斜线,目录分隔符。
- .. :代表上一层的目录,也可以用../来表示
图解绝对/相对路径
Linux常见目录作用
/bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令。
/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev :dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
/etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
/mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
/opt: 这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/root:该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/selinux: 这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
/srv: 该目录存放一些服务启动之后需要提取的数据。
/sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
/tmp:这个目录是用来存放一些临时文件的。
/usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
/usr/bin:系统用户使用的应用程序。
/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src:内核源代码默认的放置目录。
/var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
在linux系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的。
值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给root使用的指令。
/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里。