1.终端 , shell , bash 的关系
在linux 上的黑窗口就是终端。
终端里面 内嵌了一个shell,这个shell 我们将其称之为 命令解释器。
当我们在终端 输入一些字符串的时候,shell就会解析这些字符串,然后给我们反馈结果。
shell 是有很多种的,bash就是其中的一个
查看当前linux系统支持哪些shell
cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
查看当前linux系统用的那个shell
echo $SHELL
/bin/bash
echo 是回显的意思,是将后面的那个显示在命名 提示
2.目录和文件
linux 下所见皆文件
~ 代表的是当前用户的home ,例如 : cd ~
/home/hunandede
3.切换到 root 用户 : su root
注意的是。第一次ubuntu 安装后,root用户默认被锁定,不允许登录,也不允许“su”到 root。
~$ sudo passwd root
Password: <--- 输入安装时那个用户的密码
Enter new UNIX password: <--- 新的Root用户密码
Retype new UNIX password: <--- 重复新的Root用户密码
passwd:已成功更新密码
切换到其他普通用户
su hunandede
4.linux常用命令
ls -lah -l 是list ,-a 是 隐藏文件, -h 是human 表示以人类正常的理解方式显示
ls -Rla R 是递归
touch a.c 创建文件
makedir abc 创建abc文件夹
which ls 查看ls 命令真正放在哪里
pwd 查看当前路径
rmdir abc 删除abc这个空目录,如果abc不是空目录则不能删除
rm -r abc 删除abc目录下的所有文件。。。rm是删除的意思,-r是递归删除
rm -rf abc 删除abc目录下的所有文件。。。rm是删除的意思,-r是递归删除 -f是强制删除,不提示,之前的linux版本是有提示的,在现在的版本加不加这个f是一样的。
cp source.txt desfile.asd 拷贝source.txt文件到desfile.asd,实际是会创建一个desfile.asd文件,并将source.txt的内容copy 到 desfile.asd
cp -a abcmulu .. 拷贝 abcmulu 到上一级目录,-a 表示 递归拷贝 也可以是 -r
-a 是all 的意思,和 -r的不同是会将文件的所有信息都拷贝过去
cat a.txt 查看a.txt
tac a.txt 倒着查看 a.txt
more a.txt 用于显示大文件,分屏显示 a.txt 知道就可以
less a.txt 用户显示大文件 知道就可以看
whoami 查看当前登陆用户
chmod 改变文件的属性
chmod u|g|o|a +|=|- r|w|x filename
u :代表user,g :group , o:other , a :all
chmod a=rwx b.txt 给b.txt 的所有用户 设定 rwx 的权限
chmod 471 b.txt 给b.txt 的user用户r权限,同组用户给rwx权限,其他用户给x权限
添加新用户
sudo adduser zhangsan 添加新用户 zhangsan
添加完成后 去查看是否有zhangsan 在这里查看 : vim /etc/passwd
删除用户
sudo deluser zhangsan 删除zhangsan用户
删除完成后 去查看是zhangsan是否被删除了 在这里查看 : vim /etc/passwd
修改文件所属用户
sudo chown 新用户名 待修改文件
sudo chown zhangsan a.txt
添加用户组
sudo addgroup 新组名
sudo addgroup tengxun
删除用户组
sudo delgroup tengxun
修改用户组
sudo chgrp 新用户组名 待修改文件
sudo chgrp tengxun a.txt
一次性修改用户组和用户
将a.txt 换成nobody用户,并且换成nogroup组
sudo chown nobody:nogroup a.txt
5.软硬链接
软链接
相当于 windows 上的快捷方式
ln -s abc.txt aa.s 给源文件 abc.txt创建一个软链接 aa.s
ln -s b.txt bb.s
ln -s b.txt aaaaaaaa.s
lrwxrwxrwx 1 hunandede hunandede 5 2月 20 11:30 aaaaaaaa.s -> b.txt
lrwxrwxrwx 1 hunandede hunandede 5 2月 20 11:28 bb.s -> b.txt
-rw-rw-r-- 1 hunandede hunandede 447 2月 20 11:29 b.txt
我们看到这个文件的大小 是 5, 5 , 447
如上有两个问题:
1.)bb.s 和 aaaaaaaa.s 都是使用的 相对路径创建出来的软链接。
这个软连接文件如果我们剪切到其他地方就不能使用了,这是因为其他地方没有这个相对路径。
那么创建软链接的方法最好对源文件使用 绝对路径
类似这样:
ln -s /home/hunandede/aaa/b.txt bbb.s
bbb.s这个软链接就是 这个绝对路径 /home/hunandede/aaa/b.txt 文件的软链接,因此不管将这个bbb.s放在哪里都可以访问。
2.)我们看到这两个软链接文件的大小 是 5, 5
这个5是啥呢?
硬链接
ln /home/hunandede/aaa/b.txt aaa
aaa 就变成了b.txt的 硬链接
改动aaa 后 b.txt也会跟着改动。
硬链接的设计原理是 所有 硬链接 都有相同的 Inode。类似于指针。
因此改动一个,其他的会跟着改动。
但是有不同于指针,还有一个 硬链接基数 存在,当删除一个硬链接的时候,硬链接基数会-1
stat file.h 查看文件详细信息。
hunandede@hunandede-virtual-machine:~/aaa$ stat a
文件:'a'
大小:447 块:8 IO 块:4096 普通文件
设备:801h/2049d Inode:664954 硬链接:2
权限:(0664/-rw-rw-r--) Uid:( 1000/hunandede) Gid:( 1000/hunandede)
最近访问:2024-02-20 11:29:10.337143198 +0800
最近更改:2024-02-20 11:29:10.337143198 +0800
最近改动:2024-02-20 11:52:11.290629957 +0800
创建时间:-
6.文件信息详情
drwxrwxr-x 3 hunandede hunandede 4096 2月 19 14:05 .
drwxr-xr-x 21 hunandede hunandede 4096 2月 20 09:49 ..
drwxr-xr-x 9 hunandede hunandede 4096 2月 19 15:37 nginx-1.14.2
-rw-rw-r-- 1 hunandede hunandede 1015384 2月 19 14:04 nginx-1.14.2.tar.gz
-rw-rw-r-- 1 hunandede hunandede 1112471 2月 19 14:04 nginx-1.24.0.tar.gz
文件权限, 硬链接计数,所有者, 所有者组, 文件大小, 时间, 文件名
drwxrwxr-x
d 表示文件类型
rwx 当前user 对于 该文件的或者该文件夹的权限
rwx 当前user 同组 对于 该文件的或者该文件夹的权限
r-x 其他user 对于 该文件的或者该文件夹的权限
文件类型对应表
l 符号链接 也就是软链接
stat file.h 查看文件详细信息。
hunandede@hunandede-virtual-machine:~/aaa$ stat a
文件:'a'
大小:447 块:8 IO 块:4096 普通文件
设备:801h/2049d Inode:664954 硬链接:2
权限:(0664/-rw-rw-r--) Uid:( 1000/hunandede) Gid:( 1000/hunandede)
最近访问:2024-02-20 11:29:10.337143198 +0800
最近更改:2024-02-20 11:29:10.337143198 +0800
最近改动:2024-02-20 11:52:11.290629957 +0800
创建时间:-
7.使用命令查找
find 按照指定的要求查找文件
find ./ -type 'l' 查找当前所有文件下 文件类型为 软链接的文件,会遍历当前目录下的所有目录。注意的是 一般文件类型是用的-,在这里要替换成f
find ./ -name '*.mp4' 查找当前所有文件下 后缀名为 .mp4的文件,会遍历当前目录下的所有目录
注意的是 会遍历所有的子文件
但是常常我们不想这么干,只想找当前目录下的,不想找子目录下的。
find ./ -maxdepth 1 -name '*.txt'
注意的是 -maxdepth 是要放在 -name之前
find 后面要紧跟 文件目录,然后才是各种参数
find ./ -size +20M -size -50M 查找大于20m 小于 50m的文件
find ./ -size +1c -size -50c
注意的是,从这个文档 copy 到 linux 命令行的时候 总是出现各种各样的问题,因此建议手敲
-b 是block 的意思,块的意思,最小空间就是512byte
-size n[cwbkMG]
File uses n units of space, rounding up. The following suffixes
can be used:
`b' for 512-byte blocks (this is the default if no suffix is
used)
`c' for bytes
`w' for two-byte words
`k' for Kilobytes (units of 1024 bytes)
`M' for Megabytes (units of 1048576 bytes)
`G' for Gigabytes (units of 1073741824 bytes)
-atime, a 代表access代表访问时间
-mtime, m代表modify,指的是属性变化,访问权限变化等,并不是内容变化
-ctime c代表changed,代表的文件内容变化
time 后面的时间代表天数
find /usr/ -name '*tem*' -exec ls -l { } \;
查找 /usr 目录下 含有 tem字符的文件名,找到后 执行 ls -l
{} \; 是 语法,意思是将 找到的文件名 放在{}里面,对{}里面的内容 执行 ls -l
find ./ -maxdepth 1 -name '*.txt' -exec ls -lah {} \;
-rw-rw-r-- 1 hunandede hunandede 0 2月 20 13:16 ./c.txt
-rw-rw-r-- 1 hunandede hunandede 33 2月 20 13:52 ./a.txt
find ./ -maxdepth 1 -name '*.txt' -ok ls -lah {} \;
如果换成 ok ,则表示要询问user ,是否真的执行
一般会用到rm 的时候
find ./ -maxdepth 1 -name '*.txt' -ok rm -r {} \;
hunandede@hunandede-virtual-machine:~/aaa$ find ./ -maxdepth 1 -name '*.txt' -ok rm -r {} \;
< rm ... ./c.txt > ? y
< rm ... ./a.txt > ? y
hunandede@hunandede-virtual-machine:~/aaa$ ls
b.c
xargs 对于find 的二次 过滤
find ./ -type f | xargs ls -la
hunandede@hunandede-virtual-machine:~/aaa$ find ./ -type f | xargs ls -la
-rw-rw-r-- 1 hunandede hunandede 0 2月 20 14:52 ./a.txt
-rw-rw-r-- 1 hunandede hunandede 21 2月 20 14:52 ./b.c
hunandede@hunandede-virtual-machine:~/aaa$
man find 查看文档
grep 按照内容查找
grep -r 'cpy' ./ 查找当前文件内容中 cpy字符串的文件
grep -r 'cpy' ./ -n 查找当前文件内容中 cpy字符串的文件,-n表示显示行数
注意这里使用 grep -r '*cpy*' ./ 反而查不到
常用方式:查看所有后台指令,并将有bash关键字的弄出来
ps aux | grep bash
hunandede@hunandede-virtual-machine:~/aaa$ ps aux | grep bash
hunande+ 3046 0.0 0.1 24176 5296 pts/20 Ss+ 09:49 0:00 bash
hunande+ 3852 0.0 0.1 24184 5452 pts/21 Ss+ 12:48 0:00 -bash
hunande+ 3999 0.0 0.1 24176 5504 pts/22 Ss 13:06 0:00 -bash
hunande+ 4480 0.0 0.0 15972 1084 pts/22 S+ 14:58 0:00 grep --color=auto bash
注意,最后一条是 自己当前查找命令的,并不是真正的和bash
通过前面的学习,我们应该这这里有一个领悟,就是如果 有两条命令,中间是可以通过 |关联起来的
类似这样 ps aux | grep bash ,将前面的内容 通过 | 再次分隔
但是这样的方式对于 前面是find 不好用
本身 aaa 文件夹下就有 两个文件,一个文件夹,我们通过find ./ -type f找到的应该就只有两个文件,然后 ls -la 就只能两个,但是实际上文件夹也显示出来了
find ./ -type f | ls -la
hunandede@hunandede-virtual-machine:~/aaa$ ls
a.txt b.c ccc
hunandede@hunandede-virtual-machine:~/aaa$ find ./ -type f | ls -la
total 16
drwxrwxr-x 3 hunandede hunandede 4096 2月 20 15:06 .
drwxr-xr-x 22 hunandede hunandede 4096 2月 20 14:57 ..
-rw-rw-r-- 1 hunandede hunandede 0 2月 20 14:52 a.txt
-rw-rw-r-- 1 hunandede hunandede 21 2月 20 14:52 b.c
drwxrwxr-x 2 hunandede hunandede 4096 2月 20 15:06 ccc
hunandede@hunandede-virtual-machine:~/aaa$
8.显示后台程序,相当于 windows的任务管理器
ps 命令
ps -aux
ps -ef
ps 命令用于监控后台进程的工作情况,
选项有 -e 显示所有进程
-f全格式
-h 不显示标题
-l 长格式
-w 宽输出
-r 只显示正在运行的进程
-a 查看当前系统所有用户的所有进程
-u
-x
ps -aux 是常用组合