linux命令
linux
1.登录主机的方式
1.1 本地登录
输入用户名和密码
1.2 远程登录
基于ssh
- 终端【
ssh 用户名@ip地址
】 - 远程工具【xshell等】
如果xshell或者ssh指令连接linux系统的时候很慢,等好久才连接成功,那么就可以按照下面的方式优化一下。
# 修改配置文件,先备份
[root@localhost ~]# cp /etc/ssh/sshd_config /tmp/
[root@localhost ~]# vi /etc/ssh/sshd_config
# 直接输入:79回车
79 GSSAPIAuthentication no
115 UseDNS no
输入:wq保存退出
# 重启sshd服务
[root@localhost ~]# systemctl restart sshd
# 如果修改失败,还原配置文件
[root@localhost ~]# cp /tmp/sshd_config /etc/ssh/sshd_config
[root@localhost ~]# systemctl restart sshd
2.目录结构
/bin # 存放二进制的可执行文件,也就是命令
/boot # 开机启动需要的文件
/dev # 硬件设备控制文件
/etc # 存放系统的各种配置文件,相当于windows的注册表
/home # 所有普通用户的家目录就在这个home目录下
/root # root用户的专属家目录
/lib # 32位库,一般是so结尾的库文件,
/lib64 # library 64位库,一般是so结尾的库文件
/mnt # 全称:mount,挂载的意思,一般是用来挂载光盘,U盘,也就是插入U盘、关盘等
/opt # 部分软件安装存储目录【默认安装】
/proc # #全称:process,是进程的意思,每个进程编号一个目录 ps -ef指令可以查看到进程编号
/sbin # 全称:super bin,是超级用户才能使用的命令 eg:shutdown reboot 这些命令文件在sbin目录中
/srv # 存放软件源代码文件的,即命令文件,相当于windows下的可执行文件
/sys # 是系统功能目录
/tmp # 用来存放临时文件的目录,这里面的文件如果长时间没用的话,会被系统自动清除。
/run # 程序运行的时候产生的文件,多数也是临时文件,但是这里的文件不会被系统自动清除。
/usr # 用户级的目录,主要存放的是一些软件程序以及这些程序所需要使用的库
/var # 用来存放一些经常变动的文件,比如日志文件、网页文件、缓存等
3.常用指令
#远程登录linux系统
ssh root@ip地址
#断开连接
exit
#重启系统
reboot 或者 shutdown -r now
#关机指令
shutdown #默认30秒之后才会关机
#立即关机
shutdown -h now
# 关机
shutdown -h now
#十分钟之后关机
shutdown -h 10
3.1文件相关
新建文件
touch
touch 1.txt #创建单个文件
touch test{1..10}.txt #批量创建文件touch test{1..10}.txt
touch /root/tool/bin/data.txt #在指定的/root目录下,创建文件data.txt
# 如果touch的文件名称重复了,不会覆盖原文件
查看文件
ls # 查看所有【不包括隐藏文件】
ls -a # 查看所有【包括隐藏文件】
ls -1 # 以一行一个文件的方式显示,注意这是-1,是数字1,不是l
ls -lh # 大小以kb来显示
ls -l #类似于windows的详细列表,这个-l不是数字1
ls test09.txt # 查看test09.txt是否存在,有会显示文件名称,没有会报错
ls -a -1 #查看所有文件【包括隐藏文件】,以一行一个来显示
ls *.txt # 查看以txt结尾的所有文件,类似于windows下的*.后缀名搜索
删除文件
rm -f
rm -f 文件 # 删除一个文件
rm -f 文件1 文件1 # 删除多个文件
rm -f {1..10}.txt # 批量删除【根据需求自己改数字】
rm -f /opt/test01.txt # 将/opt目录下的test01.txt文件删除
复制与移动文件
cp
cp 1.txt 11.txt # 复制1.txt并重命名为11.txt
cp 1.txt /root/tool/bin/22.txt # 复制1.txt/root/tool/bin路径下到并重命名为22.txt
重命名&移动
mv
mv 1.txt 11.txt # 将1.txt命名为11.txt
# 目前在/root/tool/pycharm/bin 该路径下有一个文件
mv data.txt /root # 将/root/tool/pycharm/bin下的data.txt移动到root目录下
3.2 文件夹相关
·创建目录
mkdir
mkdir data # 创建一个data目录
mkdir data{1..10} #批量创建多个目录
mkdir -p tools/pycharm/bin #一次性创建多级子目录
·删除目录
rm -rf
rm -rf 目录 # 删除指定目录
rm -rf data{1..10} # 删除多个目录
重命名目录
mv
mv data data1
切换目录
cd
cd local #切换到local目录中
cd /usr/local #切换到目录/usr/local
cd .. #切换到上一级目录
cd ../.. # 进入上一级的上一级目录 ,还可以继续../
cd / # 直接切换到根目录
查看历史指令
history # 历史指令查询
复制目录
[root@localhost tmp]# cp -r /usr/data /tmp/
复制目录必须要带 -r参数
否则报错:
cp: 略过目录"/usr/data"
3.4 管道
管道符号: | ,可以将前面指令的执行结果,作为后面指令的操作内容。
查看ip地址
ip a|tail -4|head -1
3.5 文件内容过滤
查看文件内容
-
cat
【查看全部】cat 文件名 cat data.txt # 从上往下显示 cat -n data.txt # 从上往下显示&同时显示行数 # 补充 tac data.txt # 从下往上看
-
head
【正着看】head 文件名 head data.txt # 查看文件的前十行,默认 head -5 data.txt # 查看文件的前5行
-
tail
【倒着看】tail 文件名 tail data.txt #查看文件的倒数十行,默认 tail -5 data.txt #查看文件的倒数5行
查看行数
# 方式一
cat -n data.txt
# 方式二
vi data.txt
:set number
# 方式三
wc -l data.txt
查看字节
# 注意:一个英文字母是1个字节;一个中文是3个字节;
wc -c data.txt
wc
# 查看文件的行数
wc -l data.txt
# 查看文件的字节数
wc -c data.txt
# 统计指令执行结果有多少行
ip a |wc -l
# 统计bin目录下有多少个命令文件
ls /bin|wc -l
匹配
# 普通过滤【将含有pwp这个字符的行过滤出来】
grep 'pwp' anaconda-ks.cfg
# 在过滤的基础上显示行号
grep -n 'pwp' anaconda-ks.cfg
# 精准匹配【把有完整pwpolicy这个字符的行过滤出来】 如果不显示行号,直接去除-n 参数即可
grep -n -w 'pwpolicy' anaconda-ks.cfg
# 拿ip来举例
ip a |grep -w inet |tail -1
按列过滤
row 1, cell 1 row 1, cell 2
row 2, cell 1 row 2, cell 2
awk
# 取列,$1代表第一列,$2代表第二列,$NF代表最后一列
# 注意,必须是单引号
# 默认是以空格分开的
awk '{print $1}' data.txt
# 以,分开的
awk -F ',' '{print $1}' data.txt
3.6 生成数字序列【seq】
seq 1 5
sql -w 1 5
[root@localhost ~]# seq -w 1 5
01
02
03
04
05
[root@localhost ~]# seq -w 1 5
001
002
003
004
005
3.7 排序
sort # 默认排序,先数字后字母
# 先数字后字母
cat gaotao.txt|sort
#先字母后数字
cat gaotao.txt|sort -n
3.8 去重
uniq # 唯一、去重的意思,但是它是将连续的去重,不会间隔去重,所以最好先排序再去
# 对于不连续的,不会去重
cat gaotao.txt|uniq
# 先排序,后去重
cat gaotao.txt|sort -n|uniq
4.用户相关
# 创建用户
useradd 用户名
# 设置密码
passwd 用户名
# 基于windows下的cmd终端连接进来,并登录
ssh 用户名@ip
# 查看用户是否存在
id 用户名
# 查看所有用户
# 注意:输出的结果中第一行是root用户,最后一行倒着看都是普通用户【eg:root:x:0:0:root:/root:/bin/bash】 /bin/bash是标志
cat /etc/passwd
# 删除用户#
# 关联的文件全部删除 主要指的是/home 以及 /var/spool/mail/ 目录下
userdel -r 用户名
区分 userdel -r 用户名 与 userdel 用户名:
前者执行后,/home下彻底没有了该用户 ,但是后者还是存在的,即是否将关联的文件全部删除,windows采取后者的机制
注意:
1.被删除的用户退出登录之后,才能正常删除
2.每创建一个用户,系统都会从/etc/skel/下拷贝一份到/home/用户/ eg::ls -a /home/zilian/
# ####################################修改用户信息,修改属性####################################
# modify 它有很多选项(参数) 通过命令 -h(或者--help,一个-后面一般跟一个字母即可,两个-后面一般跟完整单词),可以查看命令的各种选项的意思
# eg:usermod -h / usermod --help
# 锁定用户(和windows的禁用用户一个意思)
usermod -L 用户名
# 解锁用户
usermod -U 用户名
# 查看用户详细信息
lchage -l 用户名
# 查看所有的用户
cat /etc/passwd
# 查看所有的密码
cat /etc/shadow
# 查看当前登录了几个用户,或者打开了几个终端
# tty1表示本地登录的、pts/0表示远程登录的
w
5.用户组相关
# #################################################创建#############################################################
# 创建组【默认未指定组】
groupadd 组名
# 创建用户并指定组
useradd -g 组名 用户名
# 注意:创建用户,如果没有指定组,那么创建用户的时候,linux会自动创建一个与用户名同名的组。
指定组,就不会自动创建与用户名同名的组
# #################################################查看###########################################################
# 查看用户的属组
id 用户名
[root@localhost home]# id laowang
uid=1003(laowang) gid=1003(junli) 组=1003(junli)
gid表示用户的属组的主组
组=表示用户的属组,用户可以属于多个组,一个主组,多个其他组。
# 查看所有组
# 倒着看就能看到用户组
cat /etc/group
# #################################################删除######################################################
# 删除组
groupdel 组名
# 注意:当删除某个用户的时候,如果他的用户名和组名是相同的,会把组名也给删除,但是,如果正好这个组名是其他用户的主组,就不会被删除
# #################################################修改########################################################
# 修改用户所属的主组
usermod -g 新组名 用户
# 将用户添加到多个其他组中
usermod -G 新组名 用户
# 注意:如果一个用户属于多个组,执行 usermod -g 新组名 用户 命令,则会把他从属的其他组的记录都干掉,然后只留下他属于主组的记录,用id 用户 来就检查
6.权限管理
6.1文件权限
[root@localhost tmp]# ls -l anaconda.log
-rw-r--r--. 1 root root 1253 10月 24 10:51 anaconda.log
# *******************************************************************************************************************
#第一段的第一个字符,表示文件类型 eg:-表示文件、d表示目录、l软链接(对应着windows快捷方式)、b块设备(ls /dev,可以看到硬盘sda等)
#第一段第2-4字符,表示该文件所属用户的权限
#第一段第5-7字符,表示该文件所属用户组的权限
#第一段第8-10字符,表示其他用户对该文件的权限
# ************************************************************************************************************************
# 第一段的第11个字符. 表示开启selinux的状态下创建的 也证明selinux是开启状态的。其实就是文件受到了selinux的保护
# 主要是红帽系的系统(redhat\centos\阿里的龙蜥\华为的欧拉)有这个机制。一般上来就是关闭它,安全方面我们通过其他方法来控制。查看selinux的指令
# 查看状态
sestatus
# enabled表示开启状态,disabled表示禁用状态
[root@localhost ~]# sestatus
SELinux status: enabled
# 关闭和开启selinux【需要root权限才能修改】
vi /etc/selinux/config
把7行改为: SELINUX=disabled #然后保存退出,并且重启系统才会生效。
然后再登录创建文件,查看文件信息,就看不到.了
# ***************************************************************************************************************************
#第五段的数字,表示该文件的大小,默认单位为B,如果想按照KB来显示,那么可以通过ls -lh指令来查
# ***************************************************************************************************************************
# linux系统会记录的三个时间:
# 访问时间(access time) 文件被打开时自动变化这个时间
# 修改时间(modify time) 文件内容发生变化时自动改变这个时间,
# 改变时间(change time) 文件属性发生变化时自动改变这个时间,文件大小也是文件的属性,所以修改文件内容导致大小变化的时候,这个时间也会自动改变。
# ***************************************************************************************************************************
r 4 代表读权限 read
w 2 代表写权限 write
x 1 代表可执行权限 executable
- 0 空权限位,表示没有这个权限,9位权限不能少,没有的权限就用-代替。
权限值表
0 ---
1 --x
2 -w-
3 -wx
4 r--
5 r-x
6 rw-
7 rwx
ugo权限体系:
rw- r-- r--
user group other
# 查看文件权限
ls -l 文件
# 去除读权限【默认对所有用户】
chomd -r 文件
# 去除读权限【指定哪类用户】 遵循ugo权限体系
chmod o-r 文件
# 去除读权限【指定哪几类用户】 遵循ugo权限体系
chmod o-r,g-r 文件
# 给文件属主用户添加读权限等
chmod u+r 文件
修改文件&目录所属
修改文件的所属【即属主和属组】,普通用户是不能修改其他用户文件的所属的,需要root用户,所以先切换到root用户来操作
这有两种方式
-
基于属主名来修改
# 修改文件的属主【只有root用户下改】 chown 属主 文件(目录) # 同时修改文件的属主和属组【只有root用户下改】 chown 属主:属组 文件(目录)
-
基于
uid
和pid
来控制# 修改文件的属主【只有root用户下改】 chown uid 文件(目录) # 修改文件的属主【只有root用户下改】 chown uid:gid 文件(目录)
注意:操作系统底层控制属主,属组的底层是数字
6.2 目录权限
修改目录权限和所属
都与文件类似,只不过把文件换成了文件夹
区分文件权限与目录权限
文件权限: rwx 读写执行
目录的权限: rwx,
r表示可以查看目录下有哪些文件
x表示可以cd切换到该目录
w表示可以在目录中创建、修改、删除文件等操作
为了安全操作:
文件权限默认: 644权限【rw-r--r--】、狠一点就给600权限【rw-------】
目录权限默认: 755权限【rwx-rw-rw-】、狠一点就给700权限【rwx------】
7.环境变量寻找目录
[hechao@localhost tmp]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hechao/.local/bin:/home/hechao/bin
[hechao@localhost bin]$ cp /usr/bin/ls /home/hechao/bin
我将ls这条执行命令移动到了寻找环境变量的路径,此时在任何路径都可以执行ls1
[hechao@localhost bin]$ cd /
[hechao@localhost /]$ ls1
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var