linux1 基础学习
700 Words|Read in about 4 Min|本文总阅读量次
Linux是一个操作系统。它有正则表达式、网络协议、系统管理、版本控制、运维、交叉编译,烧录等等功能。所以一名Android开发人员熟练掌握Linux是基本功。
Linux常用指令
考虑到笔者当下写的时候可能会有所遗漏,所以会不定期更新~
常用指令
基本指令
两次 Tab 键
补全命令,还可以补全文件名、路径名
- 空格键:用于跳到下一页
- 回车键:用于跳到下一行
- q :用于退出列表
history
history 命令可以方便我们了解自己之前输入过那些命令。history 列出的使用过的命令,是有编号的。
!编号:重新运行对应编号的命令
Ctrl + R
用于查找使用过的命令
之前使用过 ndk这个命令,它就为我自动补全了 ndk 命令
Ctrl + A
光标跳到一行命令的开头。一般来说,Home 键有相同的效果;
Ctrl + E
光标跳到一行命令的结尾。一般来说,End 键有相同的效果
Ctrl + U
删除所有在光标左侧的命令字符
Ctrl + K
删除所有在光标右侧的命令字符
Ctrl + W
删除光标左侧的一个“单词”,这里的“单词”指的是用空格隔开的一个字符串。例如 -a 就是一个“单词”
Ctrl + Y
粘贴用 Ctrl + U、 Ctrl + K 或 Ctrl + W “删除”的字符串,有点像“剪切-粘贴”
文件组织
区分windows,对于Linux 来说,一切都是文件!
bin:英语 binary 的缩写,表示“二进制文件”(我们知道可执行文件是二进制的)。包含了会被所有用户使用的可执行程序;
boot:英语 boot 表示“启动”,包含与 Linux 启动密切相关的文件;
dev:英语 device 的缩写,表示“设备”,包含外设。它里面的子目录,每一个对应一个外设。比如代表我们的光盘驱动器的文件就会出现在这个目录下面;
etc:etc 有点不能顾名思义了。因为 etc 是法语 et cetera 的缩写,翻成英语就是“and so on”,表示“…等等”,包含系统的配置文件。至于为什么在 /etc 下面存放配置文件, 按照原始的 Unix 说法(Linux 文件结构参考 Unix 的教学实现 MINIX),这下面放的都是一堆零零碎碎的东西,类似杂七杂八的目录。
home:英语 home 表示“家”,用户的私人目录。有点类似 Windows 中的 Documents 这个文件夹,也叫“我的文档”。Linux 中的每个普通用户(除了大管家用户,也就是超级用户 root 外。root 因为太厉害,拥有所有权限,所以比较“任性”,跟普通用户不住在一起)都在 home 目录下有自己的一个私人目录。比如我的用户名是yangyang,那么我的私人目录就是 /home/yangyang;如果另一个用户叫 spiderman,那么他的私人目录就是 /home/spiderman;
lib:英语 library 的缩写,表示“库”,包含被程序所调用的库文件。例如 .so 结尾的文件,在 Windows 下这样的库文件是以 .dll 结尾的;
media:英语 media 表示“媒体”。当一个可移动的外设(比如 USB 盘、SD 卡、DVD、光盘等等)插入电脑时,Linux 就可以让我们通过 media 的子目录来访问这些外设中的内容。
mnt:英语 mount 的缩写,表示“挂载”。有点类似 media,但一般用于临时挂载一些装置;
opt:英语 optional application software package 的缩写,表示“可选的应用软件包”,用于安装多数第三方软件和插件;
root:英语“根”的意思。超级用户 root 的家目录/主目录。一般用户的家目录是位于 /home 下,不过 root 用户是个例外。之前的课程我们也提到过,root 是整个系统的超级用户,拥有一切权限,在服务器中推荐使用普通用户来执行操作。虽然有root账号,笔者一般还是用普通帐号来登录。
sbin:英语 system binary 的缩写,表示“系统二进制文件”。比起 bin 目录多了一个前缀 system,所以包含的是系统级的重要可执行程序;
srv:英语 service的缩写,表示“服务”。包含一些网络服务启动之后所需要取用的数据;
tmp:英语 temporary 的缩写,表示“临时的”。普通用户和程序存放临时文件的地方;
usr:英语 Unix Software Resource 的缩写,表示“Unix 操作系统软件资源”(也是个历史遗留的命名)。这个目录是最庞大的目录之一。有点类似 Windows 中的 C:\Windows 和 C:\Program Files 这两个文件夹的集合。在这里面安装了大部分用户要调用的程序;
var:英语 variable 的缩写,表示“动态的,可变的”。通常包含程序的数据,比如一些 log(日志)文件,记录电脑中发生了什么事。
具体可以点击这里,需要科学上网
pwd
打印当前工作目录
which
获取命令的可执行文件的位置
目录指令
ls
用于列出文件和目录
终端默认是有颜色标注的,一般来说:
- 蓝色 –> 目录,aosp
- 绿色 –> 可执行文件,ndk_EXE
- 红色 –> 压缩文件,jdk-8u311-linux-aarch64.tar.gz
- 浅蓝色 –> 链接文件
- 灰色 –> 其他文件,core
ls -l
详细列表
total:有一个 total xxx 的,是表示当前目录所有文件的总大小是 total 后面的那个数字所表示的千字节
每一列是一个单独的信息
文件权限:第一列的drwxrwxr-x之类的。具体在下面权限中会提到。
链接的数目:第二列的 1,2 ,4之类的。
文件所有者的名称:第三列的 yangyang,前者表示这个文件或目录的所有者是哪个用户。
文件所在的群组:第四列的 yangyang,表示这个文件或目录的是属于哪个群组。
文件大小:第五列的 4096 或 640 等等。单位是byte,是英语“字节”的意思。比如 aosp那个目录的大小是 4096个字节。这里列出的文件都是目录,因此这些大小并没有显示目录中所有文件的总大小。
最近一次修改的时间:第六列。比如 aosp那个目录的最近一次修改时间是 Nov 7 16:36,也就是 2021 年 11月 07 日。
文件或目录的名称:第七列。
ls -h
以 Ko,Mo,Go 的形式显示文件大小,更符合人类阅读
ls -a
显示所有文件和目录,包括隐藏的
ls -R
列出现在处于的文件夹中的a文件夹的所有子目录层
ls -i
列出文件名和inode标识,这个inode标识会在链接中详细解析
cd
切换目录
1#比如我想去根目录 / 转转
2cd /
3#返回上一级
4cd ..
5#默认会回到当前用户的主目录,这里就回到了/home/yangyang目录
6#下面三条指令为同一个意思
7cd
8cd ~cd
9cd /home/yangyang
du
显示目录包含的文件大小(真正意义上的的文件大小)
du -h:以 Ko,Mo,Go 的形式显示文件大小
如果目录层级比较多会非常慢,可以得知/home/yangyang目录下的总的文件大小为5.5G
du -a:显示文件和目录的大小,同样目录层级比较多会非常慢
du -s:只显示总计大小
du -h –max-depth=1 | sort
查看当前目录下所有一级子目录文件夹大小并排序,这里的排序只按数字,不按照算上运算单位
文件指令
显示指令
cat
一次性显示文件的所有内容
cat命令是concatenate 的缩写,表示链接
cat file1 file2:连接两个文件的内容,将其一并输出
cat -n:显示行号
more
分页显示文件内容,并且能显示百分比
more命令中最基本最常用的快捷键
- 回车键: 向下n行,需要定义。默认为1行
- 空格键/Ctrl + F: 向下滚动一屏
- Ctrl +b键: 返回上一屏
- =号: 输出当前行的行号
- :f 键:输出文件名和当前行的行号
- v键:调用vi编辑器
- !命令:调用Shell,并执行命令
- q 键:退出more
less
分页显示文件内容(推荐使用)
more有的功能less都有,less功能更强大
less 命令中最基本最常用的快捷键
- 空格键:文件内容读取下一个终端屏幕的行数,相当于前进一个屏幕(页)。很常用的快捷键。与键盘上的 PageDown(下一页)效果一样
- 回车键:文件内容读取下一行,也就是前进一行,与键盘上的向下键效果是一样的
- d 键:前进半页(半个屏幕)
- b 键:后退一页,与键盘上的 PageUp(上一页)效果一样
- y 键:后退一行,与键盘上的向上键效果是一样的
- u 键:后退半页(半个屏幕)
- q 键:停止读取文件,中止 less 命令
- v键:调用默认编辑器nano
- = 号:显示你在文件中的什么位置(包括第几行到第几行,整个文件所含行数,所含字符数,整个文件所含字符)
- h 键:显示帮助文档,按 q 键退出帮助文档
- /(斜杠):进入搜索模式,只要在斜杠后面输入你要搜索的文字,按下回车键,就会把所有符合的结果都标识出来
- n 键:跳到下一个符合的搜索结果
- N 键(shift + n):跳到上一个符合的搜索结果
head
显示文件开头,默认情况下,head 会显示文件的头 10 行
head -n 5 file1
显示指定行数,这里可写成head -5 file1
tail
显示文件结尾
tail -n 5 file1
显示指定行数,这里可写成tail -5 file1
tail -f file1
追加内容,如果有,就显示新增内容,常用于日志更新
指定间隔检查的秒数,用 -s 参数
1#每隔 4 秒检查一次文件是否有更新
2tail -f -s 4 file1
创建指令
touch
创建空白文件,文件名尽可能不带空格,否则会认为两个文件
mkdir
创建目录
mkdir -p
参数来递归地创建目录结构
操作指令
cp
拷贝文件或目录,可使用正则表达式
cp src_file one/dst_file_copy
拷贝文件
cp -r src_file dst_file_copy
拷贝文件夹
mv
移动/重命名文件
cp 命令就好比 Windows 中的复制+粘贴,而 mv 命令就好比 Windows 中的剪切+粘贴。
mv src_file dst_file_move
这个src_file文件移动到dst_file_move这个目录
mv old_filename renamed_file
如果renamed_file不存在,那么即为重命名
rm
删除文件
rm -i file
向用户确认是否删除
rm -rf
强制递归删除
禁止输入命令rm -rf /* 或者 rm -rf /,会使得整个系统删除。特别是在root状态下执行。
ln
创建链接,类似win的快捷方式
ln org_file1 hard_file2
创建硬链接,org_file1 hard_file2拥有相同的inode标识。
1ln ndk_EXE NDK_EXE
ln -s org_file1 soft_file2
创建软连接,会有->标识指向
1ln -s ndk_EXE s_NDK_EXE
Physical link:物理链接或硬链接,类似指针或引用,拥有相同的指向文件内容,删除其中之一不会使得文件内容消失。只能是文件。
Symbolic link:符号链接或软链接,类似快捷方式,快捷方式删除不影响,但是快捷方式指向的文件删除,会使得快捷方式失效。可以是文件或者文件夹。
查找指令
locate
find
数据指令
grep
筛选数据
sort
为文件排序
wc
文件的统计
uniq
删除文件中的重复内容
cut
剪切文件的一部分内容
时间指令
- date 命令:调节时间
- at 命令:延时执行一个程序
- sleep 命令:休息一会
- crontab 命令:定时执行程序
压缩指令
- tar 命令:将多个文件归档
- gzip 和 bzip2 命令:压缩归档
- zip / unzip 和 rar / unrar 命令:压缩 / 解压 zip 和 rar 文件
网络指令
-
网络链接
用 SSH 创建一个安全的通信管道
用 SSH 进行连接
-
网络传输
wget :下载文件
scp :网间拷贝
ftp & sftp :传输文件
rsync :同步备份
-
网络分析
host 和 whois 命令:告诉我你是谁
ifconfig 和 netstat 命令:控制和分析网络流量
netstat : 网络统计
iptables / nftables :防火墙
-
网络安装软件
大多数 Linux 发行版的软件都可以用包管理工具 apt / apt-get 来安装(对于 Debian 一族);
有些软件不能通过 apt / apt-get 来安装,因为没有被收录到 Ubuntu 的软件仓库中。在这种情况下,我们可以试着在网上找软件的 deb 安装包;
假如前两种方法都不行,我们只能选择从源代码编译安装的方法。一般通用的步骤如下:
A. 从网上下载程序的源代码(通常被打包压缩为 .tar.gz 的格式);
B. 解压压缩包(tar zxvf xxx.tar.gz
);
C. 运行解压之后的文件夹里的 configure 文件: ./configure
;
D. 运行 make
来编译;
E. 运行 sudo make install
完成安装。
进程
-
w 命令:都有谁,在做什么?
-
ps 命令和 top 命令:列出运行的进程
-
top:进程的动态列表
-
Ctrl + C 和 kill 命令:停止进程
-
halt 命令和 reboot 命令:停止和重启系统
-
前后台
& 符号和 nohup 命令:后台运行进程
Ctrl + Z,jobs,bg 和 fg 命令:控制进程的前后台切换
数据流
重定向
- “> 和 »”:重定向到文件
- “2>,2»,2>&1”:重定向错误输出
管道
man
- 可执行程序或 Shell 命令;
- 系统调用(Linux 内核提供的函数);
- 库调用(程序库中的函数);
- 特殊文件(通常在 /dev 下);
- 文件(例如 /etc/passwd);
- 游戏;
- 杂项(比如 man (7),groff (7));
- 系统管理命令(通常只能被 root 用户使用);
- 内核子程序。
猜你喜欢
参考
[1] Oscar, Linux命令行与Shell脚本编程大全,2019.
[2] onebigday, linux 中把命令放到后台执行的方法,2020.
[4] 一生只画眉, Shell if 条件判断,2018.
[5] Y_H_, linux 实时线程优先级问题——数值越大优先级越高吗?,2016.
[6] 伏特加的滋味, linux下创建用户和添加用户权限,2017.