一.基本命令
1. 相对路径和绝对路径
绝对路径 :从根目录开始表示的路径,也就是从/开始。
相对路径: 从当前所处的目录开始表示的路径。
. 表示当前目录
.. 表示当前目录的上一级目录
Linux中的命令提示符
当前登录的用户名@主机名:当前工作目录
$:表示当前用户为普通用户, #表示当前用户为root用户
2. 文件与目录:
(1)目录相关 ls, cd, pwd,which, mkdir, rmdir, . , .. ,
ls -al # 查看所有文件的详细信息。
ls -lrt # 文件按照修改时间排序。
通配符: * 任意多个字符; ?任意一个字符。
cd # 进入目录
cd - #返回上一次目录。
pwd # 打印当前工作路径
rmdir 只能删除空目录 或 递归删除目录,不可文件。
rm : 删除文件 与 目录。
rm 文件名
rm -r 目录 //递归删除目录。
rm -rf 目录 //强制删除
mkdir 只能创建目录: 要创建文件 touch 或 vi。
mkdir 递归创建目录:
mkdir 目录1/子目录 -p
mkdir 目录1/子目录 目录1/子目录 目录1/子目录 -p
(2)文件:touch, rm(删除文件或目录),cp拷贝, mv重命名或移动
cp 源文件或目录 新文件或目录
* 将一个目录拷贝到 另一个目录下: 将目录1 拷贝到目录2下:
cp -r 目录1 目录2 //注:目录1也会拷贝进去。
cp -r 目录1/* 目录2 //注: 目录1名字 就不会拷贝。
* 文件拷贝: cp 文件1 文件2 //将目录1赋值一份放到文件2中。
mv: 移动 与 重命名
参数2 是 “不存在的目录”或 “文件” : 重命名。 否则:移动
touch file : 创建文件
目录下创建文件: touch 目录/文件名
在文件下一次创建多个文件: touch 目录/文件名 目录/文件名
rm 删除,见目录
(3)文件内容:cat, more, less, head, tail
cat命令: 终端查看文件: cat file
将文件内容一次性输出到终端。
缺点:终端显示的内容有限,如果文件太长无法全部显示。
可用于文件重定向: cat file1>file2, 相当于cp file1 file2
more命令:分屏显示文件: more file
文件内容分页显示到终端,但是只能一直向下浏览,不能回退。
显示下一行:回车
显示下一页:空格
退出:q(ctrl + c)
less命令:分屏显示: less file # 方向键控制翻转。
显示下一行:回车、ctrl + p、键盘向下键
显示上一行:ctrl + n、键盘向上键
显示下一页:空格、PageDown
显示上一页:PageUp
退出:q
head命令:显示文件头: head -n file #显示文件头部的n行。
从文件头部开始查看前n行的内容
使用方式:head -n[行数] 文件名
head -20 hello.txt
如果没有指定行数,默认显示前10行内容
tail命令: 显示文件尾
tail -n file #显示文件尾部的n行
tail -f file # 追踪日志,不退出,实时更新查看文件尾部内容
一个终端tail -f test.log , 另一个终端: echo “hello world” >>test.log
(4)统计: tree, wc, du, df。
tree #显示目录结构
wc :显示文件行数, 字节数, 单词数
wc -l file显示文件的总行数
wc -c file显示文件的总字节数
wc -w file显示文件的总单词数
wc file 显示文件的总行数, 单词数和总字节数
df -h #查看磁盘使用情况。
df -h --block-size=GB #按照GB统计显示。
(5) 详细介绍: ls, cd,rm
ls --显示当前目录下文件信息
ls 目录或文件名 --显示指定目录下文件信息
-a:列出当前目录下的所有文件
. 当前目录
.. 当前目录的上一级目录
隐藏文件, 以 . 开头的文件名, 如.bashrc
普通文件
-R:递归方式列出所有目录中的内容
-l:列出文件的详细信息
文件类型 (第1个字符)
- : 普通文件
d : 目录
l : 符号链接,相当于windows中的快捷方式
s : 套接字
p : 管道
b : 块设备
c : 字符设备
用户的操作权限 (2 – 10个字符)
文件所有者对文件的操作权限 (2,3,4个字符)
文件所属组用户对文件的操作权限(5,6,7个字符)
其他人对文件的操作权限(8,9,10个字符)
硬链接计数:
对于目录来说, 链接计数等于该目录下所有的目录总数(含. 和 ..), 但是不包含该目录的子目录下的目录文件数量, 执行ls -la命令可以进行查看.
对于文件来说, 指的是该文件所有的硬链接文件数量
参数之间可以结合使用:
ls -la : 列出当前目录下所有文件的相信信息, 包括隐藏文件
ls -ltr: 列出当前目录下的文件, 按照时间逆向排序
-h 以个性化显示,human。 显示多少k, 多少M大小
切换到家目录
cd
cd ~
cd /home/xx
cd $HOME
临近两个目录直接切换
cd -
删除文件: rm 文件名
删除目录: rm -r 目录
参数:
-r:递归删除目录,删除目录必须添加此参数
-i:提示用户是否删除文件或目录
-f:强制删除
注意事项:
使用rm命令删除的文件或目录不会放入回收站中,数据不易恢复。
3. 软连接部分:
(1)软连接: ln -s 绝对路径文件名或目录 软连接名
(2)硬链接: ln 文件名 硬链接名
注: 硬链接不能建在目录上; 对绝对路径没有要求;
硬连接的本质:是不同的文件名所在的inode节点是相同的,相同的inode节点指向了相同的数据块,
所以他们的文件内容是一样的,文件内容会同步。
ls -i 文件名 ------可以查看文件的i节点
stat 文件名 ---可以查看i节点信息
如下图, file.hard是file的硬链接,这个两个文件指向了同一个inode, 同一个inode指向了相同的数据块(文件内容).
当新创建了一个文件, 硬链接计数为1
给文件创建了一个硬链接后, 硬链接计数加1
删除一个硬链接后,硬链接计数减1
如果删除硬链接后, 硬链接计数为0, 则该文件会删除
注:删除文件的时候, 只要硬链接计数不为0, 不会真正删除, 起到保护文件的作用.
4. 用户 与 用户组
(1)创建用户组 : sudo groupadd 组名
(2)创建用户并指定组:
sudo useradd -g 组名 -d 用户家目录/home/xx -m xx如不存在自动创建
设置密码: sudo passwd 用户名。
切换用户: su -用户名
切换超级用户: sudo su
(3)删除用户: sudo userdel 用户名
删除用户, 并删除家目录: sudo userdel -r 用户名
5. 文件权限 与 所属组
(1)修改文件权限 chmod
文字设定法
命令:chmod [who] [+|-|=] [mode] 文件名
操作对象【who】
u -- 用户(user)
g -- 同组用户(group)
o -- 其他用户(other)
a -- 所用用户(all)【默认】
操作符【+-=】
+ -- 添加权限
- -- 取消权限
= -- 赋予给定权限并取消其他权限
权限【mode】
r -- 读
w -- 写
x -- 执行
示例:给文件file.txt的所有者和所属组添加读写权限
chmod ug+wr file.txt
数字设定法 chmod 777 文件
命令:chmod [+|-|=][mode] 文件名
操作符【+-=】
+ -- 添加权限
- -- 取消权限
= -- 赋予给定权限并取消其他权限 (默认为=)
数字表示的含义
0 -- 没有权限(-)
1 -- 执行权限(x)
2 -- 写权限(w)
4 -- 读权限(r)
例:给file.txt文件设置 rw-rw-r--
chmod 664 file.txt
总结:
如果目录都有可执行文件可以打开。 如果目录没有执行文件,打不开。 如果文件有可执行权限-----文件才可以运行。
(2)修改文件所有者和所属组: sudo chown 用户:【用户组名】 文件
修改文件所有者chown
用法:chown 文件所有者 文件名
sudo chown mytest file.txt
修改文件所有者和所属组chown
用法:chown 文件所有者:文件所属组 文件名
sudo chown mytest:mytest file.txt
sudo chown mytest.mytest file.txt
注意:普通用户需要使用管理员用户权限执行该命令
注意: 若系统没有其他用户, 可以使用sudo adduser 用户名 创建一个新用户.
(3)修改文件所属组 sudo chgrp 用户组名 文件名
chgrp命令
使用方法:chgrp 用户组 文件或目录名
示例:修改文件所属组为mytest
sudo chgrp mytest file.txt
注: 普通用户需要使用管理员权限执行该命令。
6. 打包解包
(1)基本的打包解包
压缩: zip -r 压缩包的名字.zip 打包的文件/路径
解压: unzip 压缩包的名字.zip。
压缩: rar a -r 压缩包的名字 原材料
解压: rar x 压缩包的名字
压缩: tar -zcvf 包名.tar.gz 原材料
解压: tar -zxvf 包名.tar.gz
压缩: tar -jcvf 包名.tar.gz2 原材料
解压 tar -jxvf 包名.tar.gz2
注: c 打包;x 解包; v:显示版本信息; f :显示文件信息。
(2)zip 加密压缩:
最后: 使用zip压缩的文件后缀是 tar.gz 可在window 解压
(3)ZIP源文件的交叉编译
第一步下载 zip源码:
https://pan.baidu.com/s/1agxlCmRnIQH21pm_3Ye3iA
第二步:解压修改makefile(交叉工具链)
tar xvf zip30.tar.gz
cd zip30
vi unix/Makefile
# 修改makefile,即:不同的arm平台下面红色部分“交叉工具链不同”
# CC = arm-none-linux-gnueabi-gcc
# CPP = arm-none-linux-gnueabi-g++
注: 某虚拟机的交叉工具量如下:/home/ngos/toolchain/gcc-linaro-5.3-2016.02-x86_64_aarch64-linux-gnu路径下的:
aarch64-linux-gnu-gcc
aarch64-linux-gnu-g++
即: 修改成
CC = aarch64-linux-gnu-gcc
CPP = aarch64-linux-gnu-g++
最后一步: 编译
在当前目录下生成了 arm64环境下使用的 zip !!!!!!
7. 文件查找 find
(1) find 路径名 -选项
按照名字查找 -name “文件名”
按照类型查找 -type f
按照大小查找 -size +1M // 大于1M的
-size +1M -size -5M //大于1M,小于5M
-size 5M 等于5M
注: 4.9M 就看成 5M来处理。
递归一级目录: -maxdepth 1 //最大深度1级。
(2)详情如下
按文件名查询:使用参数 -name
命令:find 路径 -name "文件名"
示例:find /home -name "*.c"
按文件类型查询:使用参数 -type
命令:find 路径 -type 类型
类型
普通文件类型用f表示而不是 -
d -> 目录
l -> 符号链接
b -> 块设备文件
c -> 字符设备文件
s -> socket文件
p -> 管道文件
查找指定目录下的普通文件: find 路径 -type f
按文件大小查询:使用参数 -size
命令:find 路径 -size 范围
范围
大于:+表示 -- +100k
小于:-表示 -- -100k
等于: 不需要添加符号 -- 100k
大小
M 必须大写(10M)
k 必须小写(20k)
c 表示字节数
例子: 查询目录为家目录
等于100k的文件: find ~/ -size 100k
大于100k的文件: find ~/ -size +100k
大于50k, 小于100k的文件: find ~/ -size +50k -size -100k
按文件日期
创建日期:-ctime -n/+ n
-n: n天以内
+n: n天以外
修改日期:-mtime -n/+n
访问日期:-atime -n/+n
按深度
-maxdepth n(层数)
搜索n层以下的目录, 搜索的层数不超过n层
-mindepth n(层数)
搜n层以上的目录,搜索的层数不能小于n层
(3)简单例子
例子1:按大小查找 查找100k,10M的文件: 大于+, 小于-
find ~ -size +100k -size -10M
例子2:查找指定目录下所有目录,并列出目录中文件详细信息
find ./ -type d -exec shell命令 {} \;
find ./ -type d -exec ls -l {} \;
find ./ -type d -ok shell命令 {} \;
find ./ -type d -ok ls -l {} \;
ok比较安全, 特别是在执行rm删除文件的时候.
find ./ -type d | xargs shell命令
find ./ -type d | xargs ls -l
例子3:: 将文件中信息--输入到文件中:
find ./ -size -1k -size +2k -type d | xargs ls -l >>hello.c
注: > 重定性,是覆盖。
>> 是追加。 总之: 都是讲内容输入到文件中。
8. 磁盘管理: 三个命令为df、du和fdisk。
df:列出文件系统的整体磁盘使用量
du:检查磁盘空间使用量
fdisk:用于磁盘分区
8.1 df 检查文件系统的磁盘空间占用情况。
语法: df [-ahikHTm] [目录或文件名]
-a :列出所有的文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以 GBytes, MBytes, KBytes 等格式自行显示;
-i :不用硬盘容量,而以 inode 的数量来显示
-T :显示文件系统类型
8.2 du: 是对文件和目录磁盘使用的空间的查看
语法: du [-ahskm] 文件或目录名称
-a :列出所有的文件与目录容量。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;
8.3 fdisk : 磁盘分区表操作工具。
语法: fdisk [-l] 装置名称
-l :输出后面接的装置所有的分区内容。
8.4 磁盘挂载与卸除 : 磁盘挂载(mount),卸载(umount)。
磁盘挂载语法:
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点
实例 1
[root@www ~]# mkdir /mnt/hdc6
[root@www ~]# mount /dev/hdc6 /mnt/hdc6
[root@www ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
.....中间省略.....
/dev/hdc6 1976312 42072 1833836 3% /mnt/hdc6
磁盘卸载命令 umount 语法:
umount [-fn] 装置文件名或挂载点
-f :强制卸除!
-n :不升级 /etc/mtab 情况下卸除。
例子: [root@www ~]# umount /dev/hdc6