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