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 属主:属组 文件(目录)
    
  • 基于uidpid来控制

    # 修改文件的属主【只有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
posted @ 2024-10-20 23:41  清风拂山岗(小高同学)  阅读(5)  评论(0编辑  收藏  举报