学习到韩顺平的Linux教程,把遇到的Linux命令做一个记录,方便日后查看。
由于课程较长,做笔记的过程中,发现文章是越来越长,所以,就把这个教程的笔记分拆开来。
这篇笔记的主要内容包含了Linux的基础指令,用户管理,权限管理,文档操作,压缩/解压缩等一些基础指令。
关机
shutdown - h now
poweroff
重启
reboot
切换用户
前提条件:为了方便说明,我们以切换到zhangsan用户来举例。Linux的命令要格外注意每个指令之间的空格,有些指令之间需要空格,有些又不需要。这些需要仔细的观察,也需要经验的积累才能够发现而不致于报错,我曾经就是在网上找文章,拷贝原来的命令,报字符错误,自己手动输入,又不知道是否要加空格,导致被坑死。这里又不得不吐槽那些文章真的分享的太垃圾了。
su - zhangsan
创建用户
useradd -d /home/test zhangsan
-d 参数是指定用户的家目录,还可以添加其他参数
给用户设置密码
passwd zhangsan
注意:passwd指令后面必须跟用户名称,否则就是设置root用户的密码,带来的后果很麻烦的。其次,设置密码的过程中,可能会提示密码无效,不符合条件等等吓人的提示,可以一概无视,不会影响我们设置的密码生效,这对于我们做测试练习非常有效。当然,在实际生产环境,你可以把密码设置的越复杂越好。
删除用户
# 删除用户,但是保留用户家目录,实际工作中比如离职员工,保留他的工作内容。
userdel milan
# 删除用户apple以及用户的家目录
userdel -r apple
查询用户信息
# 查询milan用户的信息
id milan
查看当前登录用户
who am i
新增用户组
# 新增用户组wudang
groupadd wudang
# 新增用户zwj,并添加到用户组wudang
useradd -g wudang zwj
删除用户组
groupdel wudang
修改用户组
# 新增用户组mojiao
groupadd mojiao
# 修改用户zwj到mojiao用户组下
usermod -g mojiao zwj
说一下,Linux中与用户,用户组相关的文件
/etc/passwd : 用户的配置文件。
/etc/shadow :口令的配置文件。
/etc/group :用户组配置文件。
Linux运行级别
0:关机
1:单用户
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
# 进入图形界面
init 5
# 查看当前运行级别
systemctl get-default
帮助指令
# 查看ls命令的帮助文档
man ls
# 查看cd命令的帮助文档
help cd
more指令 - 查看文档
空白键: 向下翻一页
回车键: 向下翻一行
q :退出
CTRL
+ F :向下滚动一屏
CTRL
+ B : 向上滚动一屏
= : 输出当前行的行号
:f : 输出文件名和当前行的行号
more apple.txt
less指令 - 比more更好用,更强大的查看文档的指令
【pagedown】: 下一页。
【pageup】:上一页。
/
+ 要搜索的内容
:搜索字符串;点击小n,查找下一个。点击大N,查找上一个。
echo指令 - 输出内容到控制台
# 输出主机名
echo $HOSTNAME
# 输出 字符串
echo "hello world ~"
head指令 - 查看文档头部内容
head -n 5 apple.txt
tail指令 - 查看文档尾部内容
tail -n 5 apple.txt
>指令和>>指令
> : 输出内容重定向并覆盖原有内容。
>> : 追加内容。
ln指令 - 软链接:相当于快捷方式
# 给root目录创建软链接,注意:删除软链接和删除文件是一样的。
ln -s /root/ /home/myroot
history指令 - 查看历史命令
# 查看所有历史命令
history
# 查看最近10条历史指令
history 10
#执行编号658的指令
!658
date指令 - 查看日期
# 查看日期
date
# 设置日期
date -s "2020-01-01 11:11:11"
cal指令 - 查看日历
# 查看本月日历
cal
# 查看全年日历
cal 2020
find指令 - 搜索查找指令
# 根据文件名称查找/home目录下的hello.txt文件
find /home -name hello.txt
# 根据用户查找/opt目录下的文件,用户名称为nobody
find /opt/ -user nobody
# 查找整个linux系统下大于200M的文件(+n大于 -n小于 n等于 ; 单位有k,M,G)
find / -size +200M
locate指令 - 快速定位文件路径
意外总是来得很意外。locate命令在我的虚拟机中没有找到,我是用yum安装,yum命令又报错。根据yum命令报错的信息,我判断是磁盘存储不足,就想办法扩容,一番折腾,失败告终。我尝试切换到以前的快照。yum安装成功。问题通过躲避的方式解决,至于为什么只有天知道了。
# 前提条件,否则搜索不到
updatedb
# 查找hello.txt
locate hello.txt
which 指令 - 查找指令存放的位置
# 查找ls指令的存放位置
which ls
grep指令 - 文件内容过滤查找指令
# 查找文件hello.txt中yes字符串
grep -n "yes" hello.txt
# 另外一种方式,等价于上面的命令
cat hello.txt | grep -n "yes"
压缩和解压
意外还是来临了,虚拟机中安装zip软件,又失败了,这次搜索之后,是因为虚拟机根目录100%,磁盘没有空间造成的,按照网络上的步骤,删掉了大文件之后,确实腾出来了一些空间。但是yum下载的时候展示乱码,应该是把语言信息文件给删除了。唉,解决一个问题,又带来新的问题。看来后面给虚拟机要设置大一点的磁盘空间了。还有一个问题就是,在安装CentOS的时候,选择最小安装,就会导致很多必须的应用软件没有安装。所以,以后不要选择最小安装了。
# 压缩hello.txt文件
gzip hello.txt
# 解压hello.txt.gz
gunzip hello.txt.gz
# 递归压缩home目录,叫做myhome.zip压缩包
zip -r myhome.zip /home/
# 递归压缩
unzip -d /opt/tmp/ /home/myhome.zip
# 压缩多个文件
tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt
# 压缩文件夹
tar -zcvf myhome.tar.gz /home/
# 解压到当前目录
tar -zxvf pc.tar.gz
# 解压到指定目录
tar -zxvf /home/myhome.tar.gz -C /opt/tmp2/
组管理和权限管理
# 修改文件所有者
chown tom apple.txt
# 创建组monster
groupadd monster
# 创建用户fox,并放到monster组中
useradd -g monster fox
# 修改orange.txt文件所在的组到fruit组
chgrp fruit orange.txt
# 修改用户zwj到fruit组
usermod -g fruit zwj
- rwx作用到文件
W
权限代表写(write):可以修改,但是不代表可以删除该文件。删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件。- rwx作用到目录
X
代表可执行(execute),可以进入该目录。
ll指令
ll并不是linux下一个基本的命令,它实际上是ls -l的一个别名。用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。内容详情如下:
[root@localhost ~]# ll
总用量 4
drwxr-xr-x. 4 root root 24 1月 13 23:39 a
-rw-r--r--. 1 root root 2173 1月 13 20:18 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 1月 13 20:19 公共
drwxr-xr-x. 2 root root 6 1月 13 20:19 模板
drwxr-xr-x. 2 root root 6 1月 13 20:19 视频
drwxr-xr-x. 2 root root 6 1月 13 20:19 图片
drwxr-xr-x. 2 root root 6 1月 13 20:19 文档
drwxr-xr-x. 2 root root 6 1月 13 20:19 下载
drwxr-xr-x. 2 root root 6 1月 13 20:19 音乐
drwxr-xr-x. 2 root root 6 1月 13 20:19 桌面
其中,第二个栏位的含义,我存在疑惑。韩老师讲解的是文件数和子目录的总和。这种说法,我在动手实验的过程中,发现是错误的。在网上找了一大圈,也都是吵来吵去,说是
表示文件个数。如果是文件的话,那这个数目自然是1了,如果是目录的话,那它的数目就是该目录中的文件个数了。
,都是这样说,也全是错误的。最后才找到如下解释:
- 如果是一个文件:则这一字段表示这个文件所具有的硬链接数,即这个文件总共有多少个文件名。
- 如果是一个目录:则这一字段表示该目录所含子目录的个数。
新建一个空目录,这个目录的第二字段就是2,表示该目录下有两个子目录。
为什么新建的目录下面会有两个子目录呢?
因为每一个目录都有一个指向它本身的子目录"." 和指向它上级目录的子目录"..",这两个默认子目录是隐藏的,用ls -a可以看到。
每次在目录下新建一个子目录,该目录第2字段的值就增1,但是新建一个普通文件该字段值不增加。
chmod指令 - 修改权限
通过chmod指令,可以修改文件或者目录权限。
- 第一种方式:+、-、= 变更权限
u:所有者; g:所有组; o:其他人; a:所有人(u、g、o的总和)。
# 给abc文件的所有者读写执行的权限,给所在组读执行的权限,给其他组读执行权限
chmod u=rwx,g=rx,o=rx abc
# 给abc文件的所有者除去执行的权限,增加组的写权限
chmod u-x,g+w abc
# 给abc文件的所有用户添加读的权限
chmod a+r abc
- 第二种方式:通过数字变更权限
r=4;w=2;x=1 rwx=4+2+1=7
# 把abc文件的权限修改成 rwxr-xr-x
chmod 755 abc
chown指令-修改文件所有者
- 改变所有者(红字替换为实际的数据即可)
chownnewowner
文件/目录
- 改变所有者和所在组
chownnewowner
:newgroup
文件/目录
注:-R : 如果是目录,使用该参数,使其目录下所有目录和文件递归生效。
# 把abc文件的所有者改为tom
chown tom abc
# 把test目录下所有文件和目录的所有者修改为tom
chown -R tom test
chgrp指令-修改文件/目录所在组
chgrp newgroup 文件/目录
# 把abc文件所在组改为shaolin
chgrp shaolin abc
# 把test目录下所有的文件和目录所在组改成shaolin
chgrp -R shaolin test
Linux关于权限,主要有两个核心。也就是分别以两个核心概念来安排指令操作的。一个是
用户
,一个是文件/目录
。不管是用户,还是文件/目录,都又被分配到组管理中。组的操作有:groupadd、groupdel。
- 关于
用户
的操作,包括增删改查,分别是useradd、userdel、usermod、id用户名
。- 关于
文件/目录
的操作,也是增删改查,分别是touch/mkdir、rm、chmod(修改权限)、chown(修改所有者)、chgrp(修改所在组)、ll(陈列文件/目录详情)。
关于目录的rwx权限的细节讨论:
x:表示可以进入到该目录,比如cd;
r:表示可以ls,将目录的内容显示出来;
w:表示可以在该目录,删除或者创建文件。
总结
Linux的使用,就是大量的使用命令。或者说,这些命令背后是一个个软件做支撑的。一个或者一组命令都是对于某一个软件的使用。有一些是内置软件,所以,就可以使用一些内置的命令了。
本来听课的时候,只是听个热闹,以及就是理解其中的思想。但是,会发现Linux很多都是基于命令的操作,而这些命令时间长了,就很容易遗忘。鉴于现在中文互联网的垃圾程度,在用到的时候无法快速找到有用的信息,就需要自己动手做一个记录了。