北京建设网站 公司,代理做网站,微信网站后台功能,wordpress5.0新版如何发布文章目录
Linux背景
Linux发展史
GNU
应用场景
发行版本
从概念上认识Linux
操作系统的概念
用户的概念
路径与目录
Linux下的文件
时间戳的概念
常规权限
特殊权限
Shell的概念
常用指令
ls
tree
stat
clear
pwd
echo
cd
touch
mkdir
rmdir
rm
cp
mv …目录
Linux背景
Linux发展史
GNU
应用场景
发行版本
从概念上认识Linux
操作系统的概念
用户的概念
路径与目录
Linux下的文件
时间戳的概念
常规权限
特殊权限
Shell的概念
常用指令
ls
tree
stat
clear
pwd
echo
cd
touch
mkdir
rmdir
rm
cp
mv
cat
more
less
head
tail
wc
cal
date
find
which
locate
grep
chmod
chown
chgrp
sudo
su
uname
id
man
--help选项
解压和压缩
指令别名
重定向和管道
注意事项 Linux背景
Linux发展史
1991年10月5日赫尔辛基大学的一名研究生Linus Benedict Torvalds在一个Usenet新闻组 comp.os.minix中宣布他编制出了一种类似UNIX的小操作系统叫Linux。新的操作系统是受到另一个UNIX的小操作系统——Minix的启发该系统是由一名叫Andrew S Tanenbaum的教师开发的。读者也许猜想所发布的这个系统应该是Linux的0.01版本实际上不是这样。真正的Linux 0.01版本并没有被发布原因是0.01版本不实用。Linus仅仅在第一个Linux的FTP站点ftp://nic.funet.fi上提供过这个版本的的源代码。Torvalds于10月5日发布的这个Linux版本被称为0.02版它能够运行GNU BourneAgainShell(bash)和GNU的C编译程序gcc以及为数不多的其它语言。Torvalds绝对没有想到他设想的一种能够针对高级业余爱好者和黑客们的操作系统已经产生这就是人们所称的Linux。Linux发布时的版本是0.02后来又有0.03版然后又跳到0.10版。因为世界各地越来越多的程序员都开始开Linux它已经达到0.95版。这就意味着正是公布1.0版本的时间已经为期不远了。正式的1.0版本是在1994年公布的Linux是一种自由和开放源代码的类UNIX操作系统该操作系统的内核由林纳斯托瓦兹在1991年首次发布之后在加上用户空间的应用程序之后就成为了Linux操作系统。严格来讲Linux只是操作系统内核本身但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于Linux内核的完整操作系统它包括GUI组件和许多其他实用工具。
GNU
GNU是一个非盈利组织 于1983年由Richard Stallmanrms发起意在为所有软件用户能够自由控制自己的计算而构建一款由大家共同努力开发而成的操作系统。rms今天仍然是GNU的首席搞事者。GNU的基本目标和一贯目标是提供一个和Unix兼容的100% 自由软件的操作系统。不是95%、也不是99.5%、而是100%自由。这个系统的名字叫GNU是GNUs Not Unix的首字母递归缩写—这是对Unix的技术思想致敬的一种方法同时表达GNU有所不同。从技术上说GNU很像Unix。但是它不同于UnixGNU给予其用户自由。 GNU由自由软件基金会以多种方式支持这也是由rms创建的倡导自由软件理念的非盈利组织。FSF还接受版权合约和免责声明因此它可以为GNU程序打官司。更确切地说为GNU贡献程序不要求把版权转交给FSF。如果你赋予FSF版权FSF在有人违反GPL时会执行版权如果你保留版权那么你自己负责执行版权。
GNU通用公共许可协议GNU General Public License简称GNU GPL或GPL是一个广泛被使用的自由软件许可协议条款最初由理查德斯托曼为GNU计划而撰写GPL给予了计算机程序自由软件的定义 任何基于GPL软件开发衍生的产品在发布时必须采用GPL许可证方式且必须公开源代码Linux是自由软件和开放源代码软件发展中最著名的例子。只要遵循GNU通用公共许可证任何个人和机构都可以自由地使用Linux的所有底层源代码也可以自由地修改和再发布。随着Linux操作系统飞速发展各种集成在Linux上的开源软件和实用工具也得到了应用和普及因此Linux也成为了开源软件的代名词。
应用场景
Linux在服务器领域
随着开源软件在世界范围内影响力日益增强Linux服务器操作系统在整个服务器操作系统市场格局中占据了越来越多的市场份额已经形成了大规模市场应用的局面。并且保持着快速的增长率。尤其在政府、金融、农业、交通、电信等国家关键领域。此外考虑到Linux的快速成长性以及国家相关政策的扶持力度Linux服务器产品一定能够冲击更大的服务器市场。据权威部门统计目前Linux在服务器领域已经占据75%的市场份额同时Linux在服务器市场的迅速崛已经引起全球IT产业的高度关注并以强劲的势头成为服务器操作系统领域中的中坚力量。
Linux在桌面领域
近年来特别在国内市场Linux桌面操作系统的发展趋势非常迅猛。国内如中标麒麟Linux、红旗 Linux、深度Linux等系统软件厂商都推出的Linux桌面操作系统目前已经在政府、企业、OEM等领域得到了广泛应用。另外SUSE、Ubuntu也相继推出了基于Linux的桌面系统特别是Ubuntu Linux已经积累了大量社区用户。但是从系统的整体功能、性能来看Linux桌面系统Windows系列相比还有一定的差距主要表现在系统易用性、系统管理、软硬件兼容性、软件的丰富程度等方面。
Linux在移动嵌入式领域
Linux的低成本、强大的定制功能以及良好的移植性能使得Linux在嵌入式系统方面也得到广泛应用目前Linux以广泛应用于手机、平板电脑、路由器、电视和电子游戏机等领域。在移动设备上广泛使用的Android操作系统就是创建在Linux内核之上的。目前Android已经成为全球最流行的智能手机操作系统据2015年权威部门最新统计Android操作系统的全球市场份额已达84.6%。此外思科在网络防火墙和路由器也使用了定制的Linux阿里云也开发了一套基于Linux的操作系统“YunOS”可用于智能手机、平板电脑和网络电视常见的数字视频录像机、舞台灯光控制系统等都在逐渐采用定制版本的Linux来实现而这一切均归功与Linux与开源的力量。
Linux在云计算、大数据领域
互联网产业的迅猛发展促使云计算、大数据产业的形成并快速发展云计算、大数据作为一个基于开源软件的平台Linux占据了核心优势据Linux基金会的研究86%的企业已经使用Linux操作系统进行云计算、大数据平台的构建目前Linux已开始取代Unix成为最受青睐的云计算、大数据平台操作系统。
发行版本
这些发行版本其实本质上都是基于Linux拓展而来的所以它们的指令等大多数是互通的在操作系统选择时并不需要过于纠结。对Linux版本感兴趣可以访问The Linux Kernel Archives
Debian Debian运行起来极其稳定这使得它非常适合用于服务器。 Debian这款操作系统无疑并不适合新手用户而是适合系统管理员和高级用户。 Ubuntu Ubuntu是Debian的一款衍生版也是当今最受欢迎的免费操作系统。Ubuntu侧重于它在这个市场的应用在服务器、云计算、甚至一些运行Ubuntu Linux的移动设备上很常见。Ubuntu是新手用户肯定爱不释手的一款操作系统。 红帽企业级Linux 这是第一款面向商业市场的Linux发行版。它有服务器版本支持众多处理器架构包括x86和x86_64。红帽公司通过课程红帽认证系统管理员、红帽认证工程师RHCSA/RHCE对系统管理员进行培训和认证。 CentOS CentOS是一款企业级Linux发行版它使用红帽企业级Linux中的免费源代码重新构建而成。这款重构版完全去掉了注册商标以及Binary程序包方面一个非常细微的变化。有些人不想支付一大笔钱又能领略红帽企业级Linux对他们来说CentOS值得一试。此外CentOS的外观和行为似乎与母发行版红帽企业级Linux如出一辙。 CentOS使用YUM来管理软件包。 Fedora 小巧的Fedora适合那些人想尝试最先进的技术等不及程序的稳定版出来的人。其实Fedora就是红帽公司的一个测试平台在成为企业级发行版之前在该平台上进行开发和测试。Fedora是一款非常好的发行版有庞大的用户论坛软件库中还有为数不少的软件包。 Kali Linux Kali Linux是Debian的一款衍生版。Kali旨在用于渗透测试。Kali的前身是Backtrack。用于Debian的所有Binary软件包都可以安装到Kali Linux上而Kali的魅力或威力就来自于此。此外支持Debian的用户论坛为Kali加分不少。Kali随带许多的渗透测试工具无论是Wifi、数据库还是其他任何工具都设计成立马可以使用。Kali使用APT来管理软件包。 Linux有多个发行版本我们可以根据需要选择系统进行环境搭建一般国内常用的是Centos和Ubuntu。而Linux搭建环境的方式主要有三种 1、直接安装在物理机上. 但是由于 Linux 桌面使用起来非常不友好, 不推荐。 2、使用虚拟机软件将 Linux 搭建在虚拟机上但是由于当前的虚拟机软件如 VMWare 之类的但新手安装时可能会出现一些 bug导致出现各种莫名其妙的问题比较折腾。 3、使用云服务器, 可以直接在 腾讯云、阿里云、华为云 等直接购买一个云服务器直接一键安装比较方便就是需要花钱。 从概念上认识Linux
操作系统的概念
计算机的层次结构
计算机可以说是由硬件和软件两大部分所构成的可以细分为如下7个层次 详细一点是下面这种 也可以简化为如下的四个层次 操作系统的理解
从上面的简化示意图可以看到操作系统介于硬件和应用软件之间。操作系统的本质就是软件是一款能够进行软硬件之间资源管理的软件。那么为什么要有操作系统呢一方面操作系统提供一系列底层接口和上层标准“抹平”不同电脑之间的硬件差异这样只要操作系统相同硬件能达到软件运行的最低标准理论上这个软件就能互通。此外操作系统可以为所有程序分配资源一切程序要调用计算机资源都需要向操作系统申请权限这样就能最大程度利用计算机资源同时让各种程序不互相冲突。简而言之操作系统在计算机系统中承上启下的地位向下封装硬件向上提供操作接口。 而我们平时编写的程序也都是访问了硬件的例如printf是在显示器上打印数据加减等操作需要访问CPU。而从应用程序到硬件之间也就必定经过了操作系统调用了操作系统对应的接口。也就是说操作系统可以看作是一个中介用于应用程序和硬件之间的交互起到了防止应用程序的不当操作对硬件造成损坏和调配实际的硬件资源等作用。
用户的概念
在Linux操作系统中用户是指使用计算机系统的个体或实体。每个用户都有一个唯一的用户名用于识别他们并允许他们访问系统资源和执行任务。 同时Linux是一个多用户操作系统这意味着多个用户可以同时使用同一台计算机并且系统能够有效地管理这些用户确保他们的数据和任务彼此隔离。每个用户都有自己的权限和设置包括文件和目录的访问权限、家目录用于存储个人文件和配置信息、登录密码等。用户可以通过登录到系统来执行各种任务例如运行程序、编辑文件、管理系统配置等。 在Linux中有一个管理员用户也称root用户它拥有系统的最高权限任何操作都不受权限的约束。然而出于安全原因通常情况下不以root用户身份工作而是使用sudo等机制来以非特权用户的身份执行系统管理任务。
如下是有关Linux用户的相关概念 root用户root用户是系统的超级用户具有最高级别的权限。root用户可以执行系统范围的任务如安装软件、更改系统配置等。因为root用户的权限很高所以需要小心使用以免造成系统损坏。用户账户用户账户是Linux系统中的个体标识用于让不同的用户访问系统资源和执行任务。每个用户账户都有一个唯一的用户名通常由小写字母、数字和一些特殊字符组成。用户组用户组是一组用户的集合它们可以共享相同的权限和访问特定资源。每个用户至少属于一个主要用户组并且可以属于多个附加用户组。用户ID (UID)每个用户账户都有一个唯一的数字标识称为用户ID (UID)。UID用于内部系统管理通常不会被用户直接使用。对应的也有用户组IDGID。家目录每个用户都有一个自己的家目录用于存储个人文件和配置信息。通常家目录的路径为/home/用户名其中用户名是实际的用户名。创建和管理用户系统管理员可以使用工具如useradd、userdel和usermod来创建、删除和管理用户账户。还可以使用passwd命令更改用户密码。新增用户通常使用useradd指令紧接着要用passwd指令设置密码然后可以用su指令切换用户。 路径与目录
路径分隔符
Windows下的路径分隔符为\ 例如 D:\用户\Documents\学习资料。 Linux下的路径分隔符为/ 例如 /root。 相对路径和绝对路径
绝对路径从根目录开始的路径一直都是有效的。一般在配置文件中使用。绝对路径是从根目录开始的所以使用时起始位置是根目录。例如/home/ytc。
相对路径相对当前所在的目录的路径。有自己的有效范围的。常用于日常使用比如命令行输入等。相对路径的开头是一般来说如果没有指定起始目录Linux默认把路径或文件看作是相对当前目录的。所以使用相对路径时既可以写 ./ 也可以不写。 目录
Linux系统中磁盘上的文件和目录被组成一棵目录树每个节点都是目录或文件。这样设计的一个好处之一就是每一个文件都有唯一的路径与之对应有效地避免了混淆的问题。
其中根目录、家目录、当前目录和上级目录是4个常用的概念在这里额外介绍一下 1、根目录 根目录是整个文件系统的顶层目录用斜杠符号/表示。所有其他目录和文件都位于根目录之下它是文件系统的起点。 2、家目录 家目录是每个用户的个人目录用于存储用户的个人文件和设置用波浪号~表示。每个用户都有一个特定的家目录通常以其用户名命名例如 /home/user1。用户在家目录中可以存储私人文件和设置。 3、当前目录 当前目录表示当前所在的工作目录也称为工作目录用.表示。不需要提供完整的路径时所有命令和文件操作都默认在当前目录中进行。 4、上级目录 上级目录也称为父目录。用..表示。这是一种导航到目录树上一级的一种很方便的方式例如从 /home/user1/documents 导航到 /home/user1。 摘自菜鸟教程 如下是对一些常见目录说明 目录 说明 /bin 存放二进制可执行文件(ls,cat,mkdir等)常用命令一般都在这里。 /etc 存放系统管理和配置文件 /home 存放所有用户文件的根目录是用户主目录的基点比如用户user的主目录就是/home/user可以用~user表示 /usr 用于存放系统应用程序比较重要的目录/usr/local 本地系统管理员软件安装目录安装系统级的应用。这是最庞大的目录要用到的应用程序和文件几乎都在这个目录。 /usr/x11r6 存放x window的目录 /usr/bin 众多的应用程序 /usr/sbin 超级用户的一些管理程序 /usr/doc linux文档 /usr/include linux下开发和编译应用程序所需要的头文件 /usr/lib 常用的动态链接库和软件包的配置文件 /usr/man 帮助文档 /usr/src 源代码linux内核的源代码就放在/usr/src/linux里 /usr/local/bin 本地增加的命令 /usr/local/lib 本地增加的库 /opt 额外安装的可选应用程序包所放置的位置。一般情况下我们可以把tomcat等都安装到这里。 /proc 虚拟文件系统目录是系统内存的映射。可直接访问这个目录来获取系统信息。 /root 超级用户系统管理员的主目录。 /sbin 存放二进制可执行文件只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等。 /dev 用于存放设备文件。 /mnt 系统管理员安装临时文件系统的安装点系统提供这个目录是让用户临时挂载其他的文件系统。 /boot 存放用于系统引导时使用的各种文件 /lib 存放跟文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库作用类似windows里的.dll文件存放了根文件系统程序运行所需的共享文件。 /tmp 用于存放各种临时文件是公用的临时文件存储点。 /var 用于存放运行时需要改变数据的文件也是某些大文件的溢出区比方说各种服务的日志文件系统启动日志等。等。 /lostfound 这个目录平时是空的系统非正常关机而留下“无家可归”的文件windows下叫什么.chk就在这里
Linux下的文件
文件的种类
在Windows中我们是以文件的后缀来定义文件的类型的。但在Linux中却不是如下是Linux中的文件类型区分 普通文件用 - 来表示。这些文件包含文本、二进制数据或程序代码等内容。目录文件用 d 来表示。目录是用于组织和存储其他文件和目录的特殊文件。符号链接用 l 来表示。符号链接是指向其他文件或目录的引用。字符设备文件用 c 来表示。字符设备文件用于和字符设备如终端、键盘等之间进行通信。块设备文件用 b 来表示。块设备文件用于与块设备如硬盘、SSD进行通信。管道文件用 p 来表示。命名管道用于进程间通信。套接字用 s 来表示。套接字用于进程间的网络通信。 在ls -l命令的输出中第一个字符通常用于指示文件的类型。这有助于用户快速识别不同类型的文件。例如如果第一个字符是 d则表示这是一个目录如果是 -则表示这是一个普通文件依此类推。这是Linux文件系统的一种常见惯例有助于文件的管理和识别。 需要注意的是虽然Linux中不以后缀区分文件的类型但有些软件如gcc、g等是需要处理指定后缀的文件才可以正常操作的。
当然其实细分的话也许不止这些例如以.开头的表示隐藏文件默认不显示等。但这有些过于细分了所以一般说的文件类型就是上面那7个。 Linux下一切皆文件
Linux下一切皆文件 是一个广为流传的说法它强调了Linux操作系统的一个重要原则在Linux中一切都可以被表示为文件。这个原则有助于使Linux系统的设计更加一致和统一同时也提供了许多优势比如可以使用相似的命令和工具来处理各种类型的数据。
如下是一些常用的相关内容 文件系统层次结构在Linux系统中所有的文件和目录都组织成一个树状结构从根目录开始所有的文件和目录都是根目录的子目录或文件。这种层次结构允许用户和程序以一致的方式访问和管理文件。 设备文件在Linux中硬件设备也被表示为文件。例如硬盘驱动器可以通过文件路径如/dev/sda来访问这使得可以使用文件I/O操作来读取和写入设备。 虚拟文件系统Linux还提供了一个虚拟文件系统Virtual File SystemVFS层它允许不同的文件系统如ext4、NTFS、FAT32等以统一的方式与应用程序交互。这意味着你可以使用相同的文件操作命令来处理不同类型的文件系统。 管道和套接字Linux中的管道和套接字也被视为文件。这使得进程之间的通信更加简单因为可以使用标准的文件I/O操作来发送和接收数据。 文件 内容 属性
文件内容属性这个概念是指文件是由内容和属性两部分构成的 内容指文件实际包含的数据。内容可以是文本、二进制数据、程序代码等等取决于文件的类型和用途。 属性这是文件的元数据信息包括文件的各种性质和特性。这些属性包括文件的种类、权限、链接数量、所归属用户、所属用户组以及时间戳等等。除了上述 下面就举个例子简单介绍一下文件的属性
例如下方是执行了ls -l之后显示的内容 我们单独抽出test文件来分析 首先首字符d表示这是一个目录文件。后面的9个字符分别表示用户的权限属性前三个字符rwx表示所有者的权限中间三个字符r-x表示所属组的权限后三个字符r-x表示其他用户的权限。至于权限是什么后面会说的。 接着第一个root表示这个文件的拥有者是root第二个root的表示这个文件的所属组是root。4096表示的是文件大小单位是字节byte。7月24 17:50表示文档的最后修改时间注意不是创建时间。最后的test表示文件名如果文件名以点(.)开头表示这是隐藏文件。
时间戳的概念
在Linux中时间戳是一个用于表示时间的数值。它通常以秒为单位从某个特定的起始点开始计算时间的流逝。有两种主要类型的时间戳Unix时间戳和文件时间戳。
Unix时间戳也称为Epoch时间戳是从1970年1月1日00:00:00 UTC协调世界时开始计算的秒数。这个时间点被称为“Unix纪元”或“Epoch”。Unix时间戳是一个整数表示从Epoch开始到特定时间的秒数。
文件时间戳Linux系统中的文件都有三个与时间相关的时间戳属性访问时间atime、修改时间mtime、变化时间ctime。这些时间戳以Unix时间戳的形式存储但它们代表不同的含义。在文件时间戳中可以手动更改这些时间戳但通常它们由系统自动更新。如下是文件的三种时间戳详解
名称概念Access - 访问时间 - atime文件最后一次被读取的时间。比如more、cat等命令就会修改atime而ls、stat等命令则不会。Modify - 修改时间 - mtime文件最后一次被修改的时间。比如vim操作后保存文件就会修改mtime。ls -l列出的就是这个时间。Change - 状态改动时间 - ctime该文件的inode节点最后一次被修改的时间通过chmod、chown等命令修改一次文件属性这个时间就会更新。
常规权限
文件的拥有者、所属组和其它
在Linux中每个文件都有拥有者、所属组和其他这三个身份。如下是关于这些身份的详细信息
拥有者Owner 文件的拥有者是创建该文件或目录的用户。拥有者通常具有对文件或目录的最高权限可以读取、写入和执行它们也可以修改其权限。通常情况下拥有者可以是文件的创建者或最后修改者。 所属组Group 每个文件都与一个所属组相关联这是一个用户组的标识。所属组的成员具有一定的权限通常比其他用户更多但比拥有者少。这允许多个用户在同一组中协作访问和编辑文件而不必拥有者共享他们的权限。 其他Others 其他 是除文件的拥有者和所属组之外的用户身份权限分配给其他用户通常较少。如果一个文件或目录不是公开共享的通常需要限制其他用户的权限以增强安全性。 权限的种类
一般来说Linux下一个文件的权限种类有三种除此之外还有三种特殊权限后面再说 读权限读权限控制用户是否可以读取文件的内容。用字母r表示。例如读取文件内容读取目录内容查看目录的文件列表等所需要的就是读权限。写权限写权限控制用户是否可以修改或删除文件的内容。用字母w表示。例如修改文件内容对目录下的文件进行创建和删除等所需要的就是写权限也就是说要删除一个文件是看当前用户在当前目录中是否有写权限。执行权限执行权限控制用户是否可以执行。在权限表示中用字母x表示。例如运行一个编译成功的可执行程序进入一个目录等需要的就是执行权限。 如果想要修改权限可以使用chmod指令。 权限的表示
在Linux中权限的表示方式有两种分别是字符表示和数字表示 字符表示 字符表示是使用字符来表示文件或目录的权限通常由九个字符组成分为三组每组三个字符分别表示文件所有者、文件所属组和其他用户的权限。这三个字符分别代表读r、写w、执行x权限。例如rwxr-xr-x表示文件所有者具有读、写和执行权限而所属组和其他用户只有读和执行权限。 数字表示 数字方式是使用三个八进制数字因为每个身份对应的权限只有2^38种从0开始最大为7来表示文件或目录的权限。每个数字代表一组权限从左到右分别表示文件所有者、所属组和其他用户的权限。每个数字的值是权限的组合例如 4读权限r 2写权限w 1执行权限x 默认权限和权限掩码
这里说的默认权限是指不考虑权限掩码的情况下文件的初始权限。其中普通文件默认不提供执行权限所以默认权限是666目录和可执行程序gcc生成的等一般默认提供执行权限所以默认权限是777。
但默认权限并不是最终的权限还需要经过一个权限掩码。那么权限掩码是什么呢
在Linux下权限掩码umask是一个重要的概念用于确定新创建文件和目录的默认权限。权限掩码是一个八进制数用来掩盖文件和目录权限中的特定位。权限掩码的工作原理是它会从文件和目录的默认权限中去掉指定的位从而限制新创建文件和目录的权限。 Linux中的umask通常是一个4位数字每一位分别代表不同的文件权限位 第一位文件的特殊权限。包括设置用户ID(SUID)、设置组ID(SGID)和粘滞位 (Sticky Bit)。 第二位掩盖新创建文件的所有者Owner权限。 第三位掩盖新创建文件的组Group权限。 第四位掩盖新创建文件的其他Others权限。 对于 umask 指令的权限掩码第一个字符通常用来表示特殊权限而不是常规的文件权限特殊权限在文件和目录上有不同的含义。至于何为特殊权限后面会讲。
普通用户在设置 umask 时不需要显式设置特殊权限因为它们会根据系统和文件默认规则自动分配。特殊权限通常由系统管理员在特定情况下设置以确保文件和目录的安全性和访问控制。所以特殊权限我们现在可以不管主要是看后3位。要注意在计算时并不是直接减的而是用按位与计算的即最终权限起始权限权限掩码。可以理解为把对应的权限掩码给ban掉。
例如如果权限掩码为0022当创建一个目录时理论上权限为777(rwx rwx rwx)但由于权限掩码的影响要在原有的基础上去掉022(--- -w- -w-)权限。那么最终的权限就为755(rwx r-x r-x)。
权限掩码与umask指令息息相关umask指令 umask: umask [-p] [-S] [MODE] 显示或设定文件模式掩码。 设定用户文件创建掩码为 MODE 。如果省略了 MODE则打印当前掩码的值。 如果 MODE 模式以数字开头则被当作八进制数解析否则是一个chmod(1) 可接收的符号模式串。 选项 -p 如果省略 MODE 模式以可重用为输入的格式输入 -S 以符号形式输出否则以八进制数格式输出 常见的用法就是直接umask——获取权限掩码。或者umsak加数字修改权限掩码。如果umask要通过字符修改权限掩码的话和chmod操作一样不过会相对麻烦一些不推荐这样使用。
用法示例 特殊权限
除了常见的读取r、写入w和执行x权限外还有特殊权限SUIDSet User ID、SGIDSet Group ID、Sticky Bit粘滞位。
概念
SUIDSet User ID SUID标志允许一个可执行文件在执行时暂时以文件所有者的执行权限来运行而不是执行者自己的权限。这意味着当普通用户执行具有SUID标志的文件时该文件将以拥有它的用户的权限来运行通常是超级用户root的权限。 SGIDSet Group ID SGID标志允许一个可执行文件或目录在执行或访问时使用文件或目录所属的组的权限而不是执行者自己的组权限。这意味着当用户访问具有SGID标志的文件或目录时他们将以该文件或目录所属组的身份执行操作。 Sticky Bit粘滞位 粘滞位是一种Linux文件系统权限标志通常应用于目录上用于限制除文件所有者和root用户外的其他用户删除该目录下的文件或子目录的权限。这有助于保护共享目录和临时目录中的文件免受误删除。 用法 #为file文件添加SUID权限 chmod us file chmod 4xxx file #首位是4剩下的根据实际情况 #为file文件消除SUID权限 chmod u-s file # 拥有者的x权限变成小写的s说明添加了SUID权限且UID身份有x权限。 # 拥有者的x权限变成大写的S说明添加了SUID权限但UID身份没有x权限。 #为file文件添加SGID权限 chmod gs file chmod 2xxx file #首位是2剩下的根据实际情况 #为file文件消除SGID权限 chmod g-s file # 所属组的x权限变成小写的s说明添加了SUID权限且GID身份有x权限。 # 所属组的x权限变成大写的S说明添加了SUID权限但GID身份没有x权限。 #为dir目录添加粘滞位 chmod t dir chmod 1xxx file #首位是0剩下的根据实际情况 #为dir目录消除粘滞位 chmod -t dir # 其它的x权限变成小写的t说明添加了粘滞位权限且other身份有x权限。 # 其它的x权限变成大写的T说明添加了粘滞位权限但other身份没有x权限。 chmod 0xxx file #首位是0直接消除所有特殊权限 注意事项
特殊权限同常规权限一样不同的权限之间是相互独立的可以叠加。421分别表示特殊权限为SUID、SGID、粘滞位对应二进制位的表示类比常规权限的表示。在某些Linux系统中特别是在一些较新的发行版中bash已经被设计成不会执行具有SUID和SUID权限的脚本或命令。这是为了减少潜在的安全风险因为SUID可执行文件可以允许普通用户以特权用户的权限运行某些命令如果受到恶意使用可能会导致系统安全问题。但粘滞位还是可以正常使用的。
Shell的概念
Linux是一个复杂的操作系统一个操作系统的组成通常包括内核Kernel、系统库和工具、应用程序、驱动程序等等。而真正起到与硬件进行交互的就只有操作系统的内核Kernel。驱动程序相当于内核与硬件设备之间的媒介并没有与硬件进行交互。而为了安全起见我们并不能直接使用系统内核而是通过内核的“外壳”程序也就是所谓的Shell来与系统内核进行沟通。Shell就相当于是一个介于操作系统内核与用户之间的媒介既可以有效的保护操作系统——防止系统崩溃和对硬件操作损伤等相较于直接与内核进行交互又极大的降低了的操作难度与上手成本。类比Windows其图形化界面也就相当于是一个shell只是相较Linux的黑白窗口更易于操作了本质上它们是一样的。
Shell 既是一种命令语言用于与操作系统交互执行任务又是一种程序设计语言允许用户编写自动化脚本和程序从简单的命令操作到复杂的系统管理任务都可以使用 Shell 来实现。Shell作为命令行解释器时其主要功能是将使用者的命令翻译给系统内核处理同时将核心的处理结果翻译给使用者。Shell作为程序设计语言时其功能是可以用来编写Shell脚本。
Shell并不指代具体的程序只是一个泛称、统称包括了多种不同的实现和变体如Bash、Zsh、PowerShell等。提供了命令行和图形界面两种方式其中Windows中常用的就是图形界面Linux中常用的就是命令行中的bash。
常用指令
ls
使用格式ls [选项] [目录或文件...] 标准选项: [-CFRacdilqrtu1] 功能介绍对于目录列出该目录下的所有子目录与文件。对于文件列出文件名以及其他信息。没指定具体的内容时默认是当前目录。常用选项 -a 列出目录下的所有文件包括以 . 开头的隐含文件。 -d 将目录象文件一样显示而不是显示其下的文件。 如ls –d 指定目录 -i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件 -k 以 k 字节的形式表示文件的大小。ls –alk 指定文件 -l 列出文件的详细信息。 -n 用数字的 UID,GID 代替名称。 介绍 UID GID -F 在每个文件名后附上一个字符以说明该文件的类型“*”表示可执行的普通文件“/”表示目录“”表示符号链接“|”表示FIFOs“”表示套接字(sockets)。 -r 对目录反向排序。 -t 以时间排序。 -s 在l文件名后输出该文件的大小。大小排序如何找到目录下最大的文件 -R 列出所有子目录下的文件。(递归) -1 一行只输出一个文件。 tree
使用格式tree [参数]功能介绍以树状图形式列出目录内容。可能系统没有安装tree指令此时需要手动安装一下sudo yum install tree常用选项 -a 显示所有文件和目录 -C 使用彩色显示 -d 仅显示目录名 -D 显示文件更改时间 stat
使用格式stat [参数] 文件名功能介绍用于显示文件的状态信息。stat和ls的区别在于ls是列出当前目录所有文件的部分信息而stat是列出指定文件的详细信息。常用选项 -c 设置显示格式 -f 显示文件系统信息 -L 支持符号链接 -t 设置以简洁方式显示 clear
使用格式clear功能介绍清除终端界面已有内容。执行clear命令后终端界面会向后翻一页实现了“清除”当前屏幕上已有内容的效果常用选项略
pwd
使用格式pwd功能介绍显示出当前目录的路径默认从根目录开始常用选项略
echo
使用格式echo[OPTION]... [STRING]...功能介绍显示一行文本。STRING既可以加双引号也可以不加双引号。常用选项 -n 不输出行尾的换行符. -e 允许对下面列出的加反斜线转义的字符进行解释. -E 禁止对在STRINGs中的那些序列进行解释. --help 显示帮助并退出(须单独运行) --version 输出版本信息并退出(须单独运行) 在没有 -E 的情况下,可承认并可以内置替换以下序列:\NNN 字符的ASCII代码为NNN(八进制) \\ 反斜线 \a 报警符(BEL) \b 退格符 \c 禁止尾随的换行符 \f 换页符 \n 换行符 \r 回车符 \t 水平制表符 \v 纵向制表符 cd
使用格式cd [选项] [DIR 目录]功能介绍改变当前目录至 DIR 目录。默认 DIR 目录是家目录。常用选项 -L 强制跟随符号链接: 在处理 ’.. 之后解析 DIR 中的符号链接。 -P 使用物理目录结构而不跟随符号链接: 在处理 .. 之前解析 DIR 中的符号链接。 -e 如果使用了 -P 参数但不能成功确定当前工作目录时返回非零的返回值。 - 在支持拓展属性的系统上将一个有这些属性的文件当作有文件属性的目录。 默认情况下跟随符号链接如同指定 -L。
touch
使用格式touch [参数] 文件名功能介绍用于创建空文件或修改时间戳。如果文件不存在则会创建出一个空内容的普通文件也可以理解为创建一个空的普通文件如果文件已经存在则会对文件的Atime访问时间和Ctime修改时间进行修改操作。常用选项 -a 设置文件的读取时间记录 -c 不创建新文件 -d 设置时间与日期 -m 设置文件的修改时间记录 -t 设置文件的时间记录格式与date命令相同 mkdir
使用格式mkdir [选项] 目录名称...功能介绍创建目录文件。若要创建的目录已经存在则会提示已存在而不会继续创建。要想一次性创建多层目录则需要加入-p参数进行递归操作。常用选项 -m mode 为新建立的目录设定模式就象应用命令chmod一样以后仍 然使用缺省模式建立新目录。 -p 递归地创建多级目录。忽略参数对已存在的目录的覆盖相当于用命令 umask进行了 uwx 的设置。例如已存在目录a当用到命令mkdir a时报错而mkdir -p /a则不会。 --verbose 打印出新建立的每一个目录名。与--parents联合使用最有效。 rmdir
使用格式rmdir [参数] 目录名功能介绍删除空目录文件。rmdir命令仅能够删除空内容的目录文件如需删除非空目录时则需要使用带有-R参数的rm命令进行操作。常用选项 -p 递归处理所有子文件但要保证每个子目录都必须是空的。 rm
使用格式rm [参数] 文件名功能介绍删除目标文件可以一次删除多个文件或递归删除目录及其内的所有子文件。常用选项 -d 仅删除无子文件的空目录 -f 强制删除文件而不询问 -i 删除文件前询问用户是否确认 -r 递归删除目录及其内全部子文件 -v 显示执行过程详细信息 cp
使用格式cp [参数] 源文件名 目标文件名或路径功能介绍用于复制文件或目录。cp命令能够将一个或多个文件或目录复制到指定位置亦常用于文件的备份工作。常用选项 -a 功能等价于“pdr”参数组合 -b 覆盖目标文件前先进行备份 -d 复制链接文件时将目标文件也建立成链接文件 -f 若目标文件已存在则会直接覆盖 -i 若目标文件已存在则会询问是否覆盖 -l 对源文件建立硬链接而非复制文件 -p 保留源文件或目录的所有属性信息 -r 递归复制所有子文件 -s 对源文件建立软链接而非复制文件 -v 显示执行过程详细信息 mv
使用格式mv [参数] 源文件名 目标文件名或目录功能介绍对文件进行剪切移动当源文件和目标位置在同一目录时相当于重命名操作。常用选项 -b 覆盖前为目标文件创建备份 -f 强制覆盖目标文件而不询问 -i 覆盖目标文件前询问用户是否确认 -n 不要覆盖已有文件 -u 当源文件比目标文件更新时才执行覆盖操作 -v 显示执行过程详细信息 cat
使用格式cat [参数] [文件名]功能介绍显示文件内容默认显示在终端设备。当不指定文件时默认接收标准输入设备的输入并显示到终端设备。常用选项 -A 等价于”-vET”参数组合 -b 显示行数空行不编号 -e 等价于”-vE”参数组合 -E 每行结束处显示$符号 -n 显示行数空行也编号 -s 显示行数多个空行算一个编号 -t 等价于”-vT”参数组合 -T 将TAB字符显示为^I符号 -v 使用^和M-引用除了LFD和TAB之外 more
使用格式more [参数] 文件名功能介绍分页显示文本文件内容。在查看过程中回车是向下一行空格或z是向下一页按q是退出。但more一个比较难受的地方在于只能向后走不能向前翻。常用选项 -c 不滚屏先显示内容再清除旧内容 -d 显示提醒信息关闭响铃功能 -f 统计实际的行数而非自动换行的行数 -l 将“^L”当作普通字符处理而不暂停输出信息 -p 先清除屏幕再显示文本文件的剩余内容 -s 将多个空行压缩成一行显示 -u 禁止下划线 -数字 设置每屏显示的最大行数 数字 设置从第N行开始显示内容 less
使用格式less [参数] 文件名功能介绍分页显示文件内容。分页显示的功能与more命令很相像但more命令只能从前向后浏览文件内容而less命令则不仅支持more的所有快捷键而且还能从前向后PageDown键和从后向前PageUp键还有其它快捷键可自行搜索。常用选项 -e 当文件显示结束后自动退出 -f 强制打开文件 -m 显示阅读进度百分比 -N 显示文件内容时带行号 -s 将连续多个空行视为一行 -o 将要输出的内容写入到指定文件中 head
使用格式head [参数] 文件名功能介绍显示指定文件开头的内容默认为前10行。常用选项 -c 设置显示头部内容的字符数 -n 设置显示行数 -q 不显示文件名的头信息 -v 显示文件名的头信息 tail
使用格式tail [参数] 文件名功能介绍显示指定文件末尾内容默认显示后10行常用选项 -c 设置显示文件尾部的字符数 -f 持续显示文件尾部最新内容 -n 设置显示文件尾部的行数 wc
使用格式wc [参数] 文件名功能介绍统计文件的字节数、单词数、行数等信息并将统计结果输出到终端界面。常用选项 -c 统计字节数 -l 统计行数 -L 设置最长行的长度 -m 统计字符数 -w 统计单词数 cal
使用格式cal [ -mjy ] [日份] [ 月份 ] [ 年份 ]功能介绍显示系统月历与日期信息。简单好用无需过多介绍。常用选项 -1 显示本月的日历 -3 显示最近三个月的日历 -C 使用校准模式 -h 显示帮助信息 -j 显示在当年中的第几天 -l 单月份输出日历 -m 将星期一作为每月的第一天 -s 将星期天作为每月的第一天 -V 显示版本信息 -y 显示当年的日历 date
使用格式 date [OPTION]... [FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] 简而言之就是date [选项] [参数] 功能介绍用来显示或设定系统的日期与时间常用选项 -d字符串显示字符串所指的日期与时间。字符串前后必须加上双引号 -s字符串根据字符串来设置日期与时间。字符串前后必须加上双引号 -u显示GMT 常见参数说明/-时间日期格式指定显示时使用的日期时间格式
如下只列出部分参数具体可以自行查询man手册 %H 小时24小时制00~23 %I 小时12小时制01~12 %k 小时24小时制0~23 %l 小时12小时制1~12 %Z 显示时区日期域CST %a 星期的简称Sun~Sat %A 星期的全称Sunday~Saturday %B 月的全称January~December %c 日期和时间Tue Nov 20 14:12:58 2012 %m 月份01~12 %y 年的最后两个数字00 %Y 年(用 4 位表示) 用法示例 格式化输出年月日时分秒和[am,pm] date %F_%T%P 输出5天前的日期 date -d 5 day ago %Y_%m_%d 加减操作 date %Y%m%d #显示前天年月日
date -d “1 day” %Y%m%d #显示前一天的日期
date -d “-1 day” %Y%m%d #显示后一天的日期
date -d “-1 month” %Y%m%d #显示上一月的日期
date -d “1 month” %Y%m%d #显示下一月的日期
date -d “-1 year” %Y%m%d #显示前一年的日期
date -d “1 year” %Y%m%d #显示下一年的日期 find
使用格式find [路径] [参数] 查找关键字功能介绍在指定目录下查找文件可以使用不同的选项来过滤和限制查找的结果。参数说明 path 是要查找的目录路径可以是一个目录或文件名也可以是多个路径多个路径之间用空格分隔如果未指定路径则默认为当前目录。 expression 是可选参数用于指定查找的条件可以是文件名、文件类型、文件大小等等。 expression 中可使用的选项有二三十个之多以下列出最常用的部份 -name pattern按文件名查找支持使用通配符 * 和 ?。 -type type按文件类型查找可以是 f普通文件、d目录、l符号链接等。 -size [-]size[cwbkMG]按文件大小查找支持使用 或 - 表示大于或小于指定大小单位可以是 c字节、w字数、b块数、kKB、MMB或 GGB。 -mtime days按修改时间查找支持使用 或 - 表示在指定天数前或后days 是一个整数表示天数。 -user username按文件所有者查找。 -group groupname按文件所属组查找。 find 命令中用于时间的参数如下 -amin n查找在 n 分钟内被访问过的文件。 -atime n查找在 n*24 小时内被访问过的文件。 -cmin n查找在 n 分钟内状态发生变化的文件例如权限。 -ctime n查找在 n*24 小时内状态发生变化的文件例如权限。 -mmin n查找在 n 分钟内被修改过的文件。 -mtime n查找在 n*24 小时内被修改过的文件。 在这些参数中n 可以是一个正数、负数或零。正数表示在指定的时间内修改或访问过的文件负数表示在指定的时间之前修改或访问过的文件零表示在当前时间点上修改或访问过的文件。 例如-mtime 0 表示查找今天修改过的文件-mtime -7 表示查找一周以前修改过的文件。 关于时间 n 参数的说明 n查找比 n 天前更早的文件或目录。 -n查找在 n 天内更改过属性的文件或目录。 n查找在 n 天前指定那一天更改过属性的文件或目录。 which
使用格式which [参数] 文件名功能介绍用于查找命令文件能够快速搜索二进制程序所对应的位置。如果我们仅仅是想找到命令所在的路径那么这个which命令就太合适了。常用选项 -a 显示PATH变量中所有匹配的可执行文件 -n 设置文件名长度不含路径 -p 设置文件名长度含路径 -V 显示版本信息 -w 设置输出时栏位的宽度 locate
使用格式locate [参数] 文件名功能介绍用于快速查找文件或目录。Linux可能会显示没有locate命令此时就需要手动安装mlocate包然后需要更新一下数据库才sudo updatedb可以正常使用。 locate和find的区别 它们之间的主要区别在于搜索速度和搜索方式。locate快因为它使用一个预生成的文件数据库通常是 /var/lib/mlocate/mlocate.db来查找文件但它执行的是模糊匹配。而find虽然相对较慢但由于是实时搜索文件系统所以执行的是精确匹配。 常用选项 -b 仅匹配文件名 -c 不输出文件名 -i 忽略大小写 -l 限制最大查找数量 -r 使用正则表达式 -w 匹配完整的文件路径 grep
使用格式grep [选项] 关键字 文件 ...功能介绍用于在文件中查找关键字并将结果输出。人们通常会将grep命令与正则表达式搭配使用参数作为搜索过程中的补充或对输出结果的筛选命令模式十分灵活。常用选项 -c 只显示匹配的行数 -E 支持扩展正则表达式 -F 匹配固定字符串的内容 -h 搜索多文件时不显示文件名 -i 忽略关键词大小写 -l 只显示符合匹配条件的文件名 chmod
使用格式chmod [选项] 权限格式 文件 ...功能介绍用于改变文件的权限。默认只有文件的所有者和root可以设置普通用户只能管理自己文件的权限属性。设置权限时既可以使用数字法也可以使用字母表达式。常用选项 -c 改变文件权限成功后再输出成功信息 -f 改变文件权限失败后不显示错误信息 -R 递归处理所有子文件 -v 显示执行过程详细信息 chown
使用格式chown [参数] 拥有者[:所属组] 目标文件...功能介绍改变文件或目录的用户或用户组信息所属组是选择性添加的不加就是只更改文件的拥有者。一般情况下需要用sudo提权才能正常使用。常用选项 -c 显示所属变更信息 -f 若该文件拥有者无法被更改也不显示错误 -R 递归处理所有子文件 -v 显示执行过程详细信息 chgrp
使用格式chgrp [参数] 目标组 文件名功能介绍更改文件所属用户组。常用选项 -c 显示调试信息 -f 不显示错误信息 -h 对符号链接文件做修改 -L 遍历每个符号链接 -P 不遍历每个符号链接 -R 递归处理所有子文件 -v 显示执行过程详细信息 sudo
使用格式sudo [参数] 命令功能介绍用于授权普通用户以管理员的身份root用户执行命令。不过普通用户如果想要使用sudo还需要使root将此用户添加到“信任列表”中。具体做法是在/etc/sudoers文件中有类似内容的地方按照如下格式添加 user ALL(ALL) ALL如果担心把sudoers文件搞坏可以提前备份一下。常用选项 略
su
使用格式su [参数] 目标用户功能介绍用于切换用户身份。管理员切换至任意用户身份而无须密码验证。而普通用户切换身份需要目标用户的密码验证。另外添加单个减号-参数为完全的身份变更会切换到新用户的完整环境。用法示例 变更至指定用户身份 su xiaoming 完全变更至指定用户身份 su - xiaoming uname
使用格式uname [参数]功能介绍用于查看系统主机名、内核及硬件架构等信息。如果不加任何参数默认仅显示系统内核名称相当于-s参数。常用选项 -a 显示系统所有相关信息 -i 显示硬件平台 -m 显示计算机硬件架构 -n 显示主机名称 -o 显示操作系统名称 -p 显示主机处理器类型 -r 显示内核发行版本号 -s 显示内核名称 -v 显示内核版本 id
使用格式id [参数] 用户名功能介绍显示用户与用户组的ID常用选项 -g 显示用户所属基本组的ID -G 显示用户所属扩展组的ID -n 显示用户所属基本组或扩展组的名称 -u 显示用户的ID -Z 显示用户的安全上下文 man
Linux有很多指令和指令参数我们不可能记住所有的指令和参数。而网上搜索的资料有些不够准确或缺乏系统性。而man命令作为权威的官方工具则很好地解决了上述两点弊病。man可以查询绝大多数指令的帮助信息包括man自己。
使用格式man [参数] 对象常用选项 -K 在所有手册页中搜索字符串 -l 格式化和显示本地手册文件 -w 显示文件所在位置 -a 在所有手册页中搜索关键词 --help选项
shell下的几乎绝大多数指令都支持一个--help参数这通常用于获取关于命令的帮助信息和用法。当在命令后面添加--help参数时命令会显示关于该命令的简要说明、可用选项等。
不过需要注意的是--help内的帮助信息和man手册中的是不同的不要混淆了。
例如
ls --help
解压和压缩
Linux下的压缩和归档格式有很多我们这里只讲两种比较常见的tar和zip其它的可以自行查询。
tar命令
用法格式tar 参数 压缩包名 [文件或目录名]功能介绍tar命令的功能是用于压缩和解压缩文件能够制作出Linux系统中常见的 .tar、 .tar.gz、 .tar.bz2等格式的压缩包文件。对于RHEL7、CentOS7版本以后的系统解压缩时可以不添加格式参数如z或j系统也能自动进行分析并解压。常用选项
需要注意的是tar命令的-f参数之后要立即接上文件名。因此如果要把几个参数合在一起写的话-f一定要放在最后。 -c 建立一个压缩文件的参数指令(create 的意思) -z 使用gzip压缩格式 -j 使用bzip2压缩格式 -f 指定压缩包文件-f之后立即接文件名不要再加参数 -t 显示压缩包的内容 -x 解开一个压缩文件的参数指令 -C 解压到指定目录 -v 显示执行过程详细信息 用法示例 #使用gzip压缩格式对指定目录进行打包操作显示压缩过程压缩包规范后缀为.tar.gz tar -czvf File.tar.gz /etc #使用bzip2压缩格式对某个目录进行打包操作显示压缩过程压缩包规范后缀为.tar.bz2 tar -cjvf File.tar.bz2 /etc #将当前工作目录内所有以.cfg为后缀的文件打包不进行压缩 tar -cvf File.tar *.cfg #将当前工作目录内的所有以.cfg为后缀的文件打包不进行压缩并删除原始文件 tar -cvf File.tar *.cfg --remove-files #解压指定压缩包到当前工作目录 tar -xvf File.tar #解压指定压缩包到/etc目录 tar -xvf File.tar -C /etc #查看某个压缩包内文件信息无需解压 tar -tvf File.tar zip/unzip命令
zip命令用于压缩文件unzip命令用于解压文件。
通过zip命令可以将文件打包成.zip格式的压缩包里面会包含文件的名称、路径、创建时间、上次修改时间等等信息与tar命令相似。 用法格式zip 参数 目标文件.zip 源文件... unzip命令用于解压缩zip格式文件虽然Linux系统中更多地使用tar命令进行对压缩包的管理操作但有时也会收到Windows系统常用的.zip和.rar格式的压缩包文件unzip命令便派上了用场。直接使用unzip命令解压缩文件后压缩包内原有的文件会被提取并输出保存到当前工作目录下。 用法格式unzip [参数] 压缩包名 指令别名
在Linux中可以通过alias命令给指令取别名。用法格式如下
alias [name [newname] ]
用法示例 当只有alias时是显示系统中已有的命令别名等同于alias -p操作。 alias #等价于 alias -p 当只有name时是在已有别名中查找name并显示其信息 alias ll
# 输出结果alias llls -l --colorauto name和newname都存在时是将name设为别名 alias myorder ll -a 注意事项
用户必须使用单引号将原来的命令被取别名的命令引起来防止特殊字符导致错误。alias命令的作用只局限于该次登入的操作若要每次登入都能够使用这些命令别名需要将相应的alias命令存放到家目录的 .bashrc 中。bash在每次启动时都会加载 .bashrc 文件的内容每个用户的home目录都有这个文件它用来存储并加载终端配置和环境变量。
重定向和管道
这里只是简单的了解一下重定向和管道并不是很详细的讲解。
重定向
首先要知道操作系统在启动时通常会默认打开标准输入流stdin、标准输出流stdout和标准错误流stderr。当我们使用echo、cat等有输出指令时默认是将内容打印到标准输出流的也就是我们的终端屏幕。而如果我们想把内容打印到一个我们指定的文件中就需要将内容重定向到指定文件中这里用到的就是输出重定向。同理输入重定向就是将原来通过标准输入流获取信息的方式改为从指定文件获取内容。如下是关于输入重定向和输出重定向的详细介绍。
由上面的内容我们得知重定向可分为 输入重定向重新指定设备来代替键盘作为新的输入设备。 输出重定向重新指定设备来代替显示器作为新的输出设备。 输出重定向
相较于输入重定向我们使用输出重定向的频率更高。并且和输入重定向不同的是输出重定向还可以细分为标准输出重定向和错误输出重定向两种其中我们大多数情况下都是使用的标准输出重定向。标准输出重定向和错误输出重定向又分别都包含普通重定向和追加重定向普通重定向是将目标文件内容清空再输出追加重定向是直接在文件末尾追加写入。现将输出重定向的使用格式整理如下。其中 的是普通重定向 的是追加重定向。
命令符号格式作用命令 文件将命令执行的标准输出结果重定向输出到指定的文件中如果该文件已包含数据会清空原有数据再写入新数据。命令 2 文件将命令执行的错误输出结果重定向到指定的文件中如果该文件中已包含数据会清空原有数据再写入新数据。命令 文件将命令执行的标准输出结果重定向输出到指定的文件中如果该文件已包含数据新数据将写入到原有内容的后面。命令 2 文件将命令执行的错误输出结果重定向到指定的文件中如果该文件中已包含数据新数据将写入到原有内容的后面。 命令 文件 21 或者 命令 文件 将标准输出或错误输出追加写入写入到指定文件。注意第一种格式中最后的 21 是一体的可以认为是固定写法。
用法示例
echo hello Linux hello.txt
cat man ls ls_use.txt
输入重定向
输入重定向不像输入重定向那样常用而且使用格式也较少详见下表
命令符号格式作用命令 文件将指定文件作为命令的输入设备命令 分界符表示从标准输入设备键盘中读入直到遇到分界符才停止读入的数据不包括分界符这里的分界符其实就是自定义的字符串命令 文件 1 文件 2将文件 1 作为命令的输入设备该命令的执行结果输出到文件 2 中
用法示例
#原理解释先将cat的输入文件重定向为fun1这么做虽然鸡肋但只是起到便于理解的作用
#然后再将输出结果重定向到fun2文件中。
cat fun1 fun2 #fun1的内容是hello
cat fun2
#输出结果hello 管道
我们这里说的管道是指的管道符|。管道是Linux中很重要的一种通信方式是将一个指令程序的输出直接作为另一个指令的输入。管道符主要用于多重命令处理前面命令的打印结果作为后面命令的输入。简单点说就是就像工厂的流水线一样进行完一道工序后继续传送给下一道工序处理。
例如显示指定文件经过排序、去重以后包含better的行的一系列操作可以写做如下形式
# 查看文本 内容排序 内容去重 信息过滤
cat hello.sh | sort | uniq | grep better target.txt
注意事项
指令和选项之间要有空格指令的选项可以叠加来写例如ls -al 指令本质其实就是可执行程序(C、C、其他语言)写的*表示全例如*.txt表示所有以.txt结尾的文件正则表达式的语法指令的选项参数可以加-也可以不加暂且认为没有什么区别
关于“自定义的可执行程序需要指定路径而系统的指令却不需要”的讨论 一个可执行程序要运行-加载到内存得先找到他。所以我们运行自己的可执行程序时需要有具体的路径地址例如 ./myfun 操作。而Linux内置的指令可以在终端中直接运行而不需要指定路径这是因为Linux系统的命令搜索路径PATH包含了这些内置指令所在的目录。PATH是一个环境变量它包含了一组目录路径系统会在这些路径中查找可执行文件。当你在终端中输入一个命令时系统会按照PATH中的顺序查找命令的可执行文件一旦找到了匹配的命令就会执行它。而自定义的可执行程序肯定不在内置的PATH中所以找不到匹配的命令所以需要手动指定路径才能找到并执行它。 在Linux系统中常见的内置指令例如ls、cd、mkdir、rm等通常位于系统的标准命令目录中例如/bin、/usr/bin、/sbin、/usr/sbin等。这些目录通常都包含在PATH中因此你可以在任何目录中直接运行这些命令而不必指定完整的路径。 说的通俗一点就是可以认为Linux中的内置指令都是统一管理的相当于“内部人员”可以不用指定路径。而自定义的可执行程序不属于Linux统一管理的Linux系统就找不到如果不告诉系统要执行的程序在哪他就找不到就无法执行所以必须要指定路径。