前言
最近在做部署相关的东西,接触了很多Linux的知识点、命令,所以在这里整理了一下平时前端在开发中经常需要用到的一些Linux基础概念、常用命令等,类似于笔记的形式,方便开发时直接查询,提升开发效率。
文章结构
Linux简介
Linux 是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。
Linux能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统
Linux的发行版
Linux的发行版说简单点就是将Linux内核与应用软件做一个打包。目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS等。
Linux VS Windows
目前国内Linux更多的是应用于服务器上,而桌面操作系统更多使用的是Windows。两个区别如下:
比较 | Windows | Linux |
---|---|---|
界面 | 界面统一,外壳程序固定所有 Windows 程序菜单几乎一致,快捷键也几乎相同 | 图形界面风格依发布版不同而不同,可能互不兼容。GNU/Linux 的终端机是从 UNIX 传承下来,基本命令和操作方法也几乎一致。 |
驱动程序 | 驱动程序丰富,版本更新频繁。默认安装程序里面一般包含有该版本发布时流行的硬件驱动程序,之后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,如果没有了原配的驱动有时很难支持。另外,有时硬件厂商未提供所需版本的 Windows 下的驱动,也会比较头痛。 | 由志愿者开发,由 Linux 核心开发小组发布,很多硬件厂商基于版权考虑并未提供驱动程序,尽管多数无需手动安装,但是涉及安装则相对复杂,使得新用户面对驱动程序问题(是否存在和安装方法)会一筹莫展。但是在开源开发模式下,许多老硬件尽管在Windows下很难支持的也容易找到驱动。HP、Intel、AMD 等硬件厂商逐步不同程度支持开源驱动,问题正在得到缓解。 |
使用 | 使用比较简单,容易入门。图形化界面对没有计算机背景知识的用户使用十分有利。 | 图形界面使用简单,容易入门。文字界面,需要学习才能掌握。 |
学习 | 系统构造复杂、变化频繁,且知识、技能淘汰快,深入学习困难。 | 系统构造简单、稳定,且知识、技能传承性好,深入学习相对容易。 |
软件 | 每一种特定功能可能都需要商业软件的支持,需要购买相应的授权。 | 大部分软件都可以自由获取,同样功能的软件选择较少。 |
Linux系统文件目录
输入ls,文件目录如下所示:
目录 | 说明 |
---|---|
/etc | 系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动 |
/bin | 存放着最经常使用的命令 |
/sbin | 存放的是系统管理员使用的系统管理程序 |
/usr/bin | 系统用户使用的应用程序 (除 root 外的通用用户) |
/usr/sbin | 超级用户使用的比较高级的管理程序和系统守护程序(root 使用的指令) |
/var | 存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件,日志目录为var/log |
Linux文件基本属性
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
Linux将文件访问者身份分为三种:
- 文件所有者(Owner): 当创建一个用户的时候,Linux会为该用户创建一个主目录,路径为
/home/<username>
,可以使用cd ~
,快捷进入主目录。如果想放一些个人私密文件,可以放在自己的主目录里,然后设置只能自己查看; - 群组(Group): 每个用户都有一个用户组,方便多人操作的时候,为一群人分配权限。当创建用户的时候,会自动创建一个与它同名的用户组;
- 其他人(Others): 既不是文件所有者又不是文件所属群组成员的用户,就是其他人;
说明
- 超级用户(Root): Root用户是一类特殊的用户,该用户可以访问所有文件
修改文件或目录的所属用户与权限
在Linux中通常使用以下两个命令来修改文件或目录的所属用户与权限:
- chown (change owner) : 修改所属用户与组。
- chmod (change mode) : 修改用户的权限。
在Linux中我们可以使用ll或者ls –l命令来显示一个文件的属性以及文件所属的用户和组,如:
[root@www /]# ls -l
total 64
dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin # bin文件的第一个属性用d表示。d在 Linux中代表该文件是一个目录文件
……
在Linux中第一个字符代表这个文件是目录、文件或链接文件等等,第一个字符有如下几种形式:
第一个字符 | 说明 |
---|---|
d | 目录 |
- | 文件 |
l | 链接文档(link file) |
b | 表示为装置文件里面的可供储存的接口设备(可随机存取装置) |
c | 表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置) |
我们来看下bin文件基本属性,通过下面一张图详细看下:
上面图中去除第一个字符,其余以三个为一组,且均为rwx的三个参数的组合。其中, r代表可读(read)、 w代表可写(write)、 x代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号-。每个文件的属性由左边第一部分的10个字符来确定(如下图)。
上面图中从左至右用0-9这些数字来表示,我们通过下面表具体看下
字符 | 说明 |
---|---|
0 | 确定文件类型 |
1-3 | 确定属主(该文件的所有者)拥有该文件的权限 |
4-6 | 确定属组(所有者的同组用户)拥有该文件的权限 |
7-9 | 确定其他用户拥有该文件的权限 |
Linux文件属主和属组
通过ls -l
查看,比如:
[root@www /]# ls -l
total 64
drwxr-xr-x 3 mysql mysql 4096 Apr 21 2014 mysql
# mysql文件是一个目录文件,属主和属组都为mysql,属主有可读、可写、可执行的权限;与属主同组的其他用户有可读和可执行的权限;其他用户也有可读和可执行的权限
说明
- 对于root用户来说,一般情况下,文件的权限对其不起作用
更改文件属性
1. chgrp:更改文件属组
# 语法
chgrp [-R] 属组名 文件名
# 参数说明:-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
2. chown:更改文件属主,也可以同时更改文件属组
# 语法
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
# 例子
chown bin install.log # 将install.log的拥有者改为bin这个账号
chown root:root install.log # 将install.log的拥有者与群组改回为root
3. chmod:更改文件9个属性
Linux文件属性有两种设置方法,一种是数字,一种是符号。
Linux 文件的基本权限就有九个,分别是owner/group/others(拥有者/组/其他) 三种身份各有自己的read/write/execute权限。
文件的权限字符为: -rwxrwxrwx , 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
- r:4
- w:2
- x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: -rwxrwx--- 分数则是:
- owner = rwx = 4+2+1 = 7
- group = rwx = 4+2+1 = 7
- others= --- = 0+0+0 = 0
所以我们设定权限的变更时,该文件的权限数字就是770。变更权限的指令chmod 的语法是这样的
# 语法
chmod [-R] xyz 文件或目录
# 参数说明:
xyz: 就是刚刚提到的数字类型的权限属性,为**rwx**属性数值的相加
-R: 进行递归(recursive)的持续变更,以及连同次目录下的所有文件都会变更
也可以通过符号类型改变文件权限,一般常用的是数字类型,符号类型在此就不多做说明了。
常用命令
命令 | 例子 | 说明 |
---|---|---|
ls | ls -a 全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用) ls -d 仅列出目录本身,而不是列出目录内的文件数据(常用) ls -l 长数据串列出,包含文件的属性与权限等等数据;(常用) | 列出目录及文件名 |
cd | cd ~ 切换到用户主目录 cd - 切换到上一个所在目录 | 切换目录 |
cp | copy [源文件或者目录] [目标文件] 1. -r 递归持续复制,复制目录,默认是复制文件(常用) 2. -p 连带文件属性复制(备份常用) 3. -d 若来源档为链接档的属性(link file),则复制链接档属性而非文件本身; 4. -a 相当于 -rpd 5. -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用) | 复制文件或目录(常用) |
mv | 文件改名:mv index.html index2.html 隐藏文件(文件名上加上 .):mv index.html .index.html 移动文件:mv /home/www/index.html /home/static/(仅移动 mv /home/www/index.html /home/static/index2.html)(移动又重命名) 批量移动:mv /home/www/website/* /home/www/static 参数 1. -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖 2. -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖! 3. -u :若目标文件已经存在,且 source 比较新,才会升级 (update) | 移动文件与目录,或修改名称 |
whoami | 命令行输入whoami | 显示用户名 |
chown | chown [–R] 属主名 文件名 chown [-R] 属主名:属组名 文件名 | 更改文件属主,也可以同时更改文件属组 |
chmod | chmod [-R] xyz 文件或目录 chmod 777 .bashrc | 更改文件9个属性 |
vim | vim 文件------>进入文件----->命令模式------>按i进入编辑模式----->编辑文件 ------->按Esc进入底行模式----->输入:wq/q! (输入wq代表写入内容并退出,即保存;输入q!代表强制退出不保存) | 修改文件的内容 |
ssh | ssh 用户名@服务器IP | 登录远程服务器 |
touch | touch file # 创建一个名为‘file’的空白文件 | 用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件 |
ping | ping 域名|IP | 查看与某台机器的连接情况 |
sudo | su - 用户名 切换为普通用户 sudo su 切换为root用户 | root和普通用户之间切换 |
telnet | telnet 主机名/IP | 端口是否可访问 |
ps | ps -ef/ps aux 两者的区别是展示格式不同 | 查看当前系统正在运行进程,如果直接用ps((Process Status))命令,会显示所有进程的状态,通常结合grep命令查看某进程的状态 |
curl | curl www.example.com 不带有任何参数时,curl 就是发出 GET 请求 参数 1. -A 参数指定客户端的用户代理标头,即User-Agent 。curl 的默认用户代理字符串是curl/[version] ,也可以通过-H 参数直接指定标头,更改User-Agent 2. -b 参数用来向服务器发送 Cookie,curl -b 'foo=bar' google.com ,会生成一个标头Cookie: foo=bar;aaa=b ,向服务器发送名为foo 、值为bar 和名为aaa ,值为b 的两个 Cookie3. -c 参数将服务器设置的 Cookie 写入一个文件 curl -c cookies.txt www.google.com ,将服务器的 HTTP 回应所设置 Cookie 写入文本文件cookies.txt 4. -d 参数用于发送 POST 请求的数据体 curl -d'login=emma&password=123'-X POST google.com/login 使用-d 参数以后,HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded 。并且会自动将请求转为 POST 方法,因此可以省略-X POST ; -d 参数可以读取本地文本文件的数据,向服务器发送 curl -d '@data.txt' google.com/login 读取data.txt 文件的内容,作为数据体向服务器发送5. -e 参数用来设置 HTTP 的标头Referer ,表示请求的来源6. -F 参数用来向服务器上传二进制文件 | 用来请求 Web 服务器,它的名字就是客户端(client)的 URL 工具的意思 详细链接:www.ruanyifeng.com/blog/2019/0… |
grep | grep "10" test.log 参数 -i 忽略大小写-v 排除指定字符串grep -e a|b filename 匹配任意关键字 | 在文件当中匹配符合条件的字符串 |
scp | scp -r 本地目录 root@IP:远程服务器目录 将版本包上传到远程服务器 scp -r 用户名@IP:远程服务器目录 本地目录 将远程服务器文件下载到本地 | 本地远程文件拷贝 |
zip | - zip -r test.zip ./* 压缩zip包(cd到需要压缩的文件夹下,防止解压时嵌套一层) unzip test.zip ./ 解压zip包到当前目录 | 解压、压缩包 |
tar | tar -cvf test.tar /xxx 打tar包并显示详细打包过程 tar -xvf test.tar 解压tar包 tar -czvf test.tar.gz -C /xxx 打包并压缩为.gz tar -xvzf test.tar.gz 或 tar -xvf test.tar.gz 解压文件 | 打包、解压 |
>> > | >会覆盖目标的原有内容。当文件存在时会先删除原文件,再重新创建文件,然后把内容写入该文件;否则直接创建文件 >>会在目标原有内容后追加内容。当文件存在时直接在文件末尾进行内容追加,不会删除原文件;否则直接创建文件 | 输出重定向 |