Linux常用命令

文章目录

Linux常用命令

1. 解压缩

1)zip

(1)压缩
将 /home/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip:
zip -q -r html.zip /home/html
如果在我们在 /home/html 目录下,可以执行以下命令:
zip -q -r html.zip *

(2)解压
unzip [选项] 压缩包名
【例 1】不论是文件压缩包,还是目录压缩包,都可以直接解压缩,例如:
[root@localhost ~]# unzip test.zip
Archive: test.zip
creating: test/
【例 2】使用 -d 选项手动指定解压缩位置,例如:
[root@localhost ~]# unzip -d /tmp/ ana.zip
Archive: ana.zip
inflating: /tmp/anaconda-ks.cfg

【例3】解压某目录下的所有zip文件
unzip ‘*.zip’

2)rar

(1)压缩
如,将/test目录压缩为etc.rar 命令为:
rar a test.rar /test
这里可以将参数 a 看成 all,方便记忆
(2)解压
将etc.rar 解压 命令为:
rar x test.rar unrar -e test.tar

【附】:下载并安装rar软件
(1)下载

mkdir -p  /home/oldboy/tools
cd /home/oldboy/tools
wget http://www.rarlab.com/rar/rarlinux-3.8.0.tar.gz

(2) 安装

tar zxvf rarlinux-3.8.0.tar.gz
cd rar
make
make install 

3)tar.gz

压缩 tar -czvf test.tar.gz test/
解压 tar -xzvf test.tar.gz

2. 改权限chomd

改某文件权限:chmod 777 filename
改某目录及其子文件的权限:chmod 777 -R dirname (注意R大写。若忘记命令可查看 chomd --help)

3. 改用户密码

1)改超级管理员root密码

说明:
sudo 和 su不同,sudo输入的密码是开机密码,su是进入root用户的管理员密码,两个密码不一样。
刚装好的系统没有设置root密码,可以输入 sudo passwd来更改root密码。如下图:
在这里插入图片描述

2)改普通用户密码 ---- 即开机密码

  • 法1:直接输入passwd,但需要设置成复杂度高的密码。如下:
    在这里插入图片描述
    那么我们想强制设置简单密码如123怎么办呢?强制当然root下搞事情!如下:
    法2:输入su进入root模式,比如我装系统的时候设置的用户名是user,输入passwd user来修改user用户的密码!
    注:root模式下不要直接输入passwd啦,这样是在修改root的密码
    在这里插入图片描述

4. 切换用户登录。如:root用户和普通用户切换

使用 su进行用户名的切换的切换

  1. 进入其他用户username1:输入 su username1。实战中,如有一个用户名叫hadoop,输入su hadoop即可进入hadoop用户。
  2. 普通用户模式下:输入su即可进入root用户
  3. root用户模式下:输入exit即可切回到普通用户

5. 统计文件夹下文件或子文件夹的个数

1.包括子文件夹
(1)统计文件夹下所有文件的个数(包括子文件夹)
$ ls -lR | grep "^-" | wc -l
(2)统计文件夹下所有文件夹的个数(包括子文件夹)
$ ls -lR | grep "^d" | wc -l
2. 不包括子文件夹
(1)统计文件夹下所有文件的个数(不包括子文件夹)
$ ls -l | grep "^-" | wc -l
(2) 统计文件夹下所有文件夹的个数(不包括子文件夹)
$ ls -l | grep "^d" | wc -l
注释:
ls -l :列出当前目录下所有信息。
ls -lR:列出当前目录及其子目录下的所有信息。(R 看成递归、循环、遍历)
grep “^-” 过滤前面ls的输出信息只保留文件。(- 看成一般文件)
grep “^d” 过滤前面ls的输出信息只保留目录。(d 看成dir)

6. 计算文件或文件夹的大小

du -sh dir_name 显示出dir_name目录的总量大小
du -h dir_name 显示出dir_name目录下每个单位的大小,并显示出dir_name目录的总量大小
du -h file_name 显示file_name文件的大小
du -ah --max-depth=1 dir_name 显示dir_name目录下的一级子目录或文件的大小。常用来看某个文件夹下的各个文件夹的大小。
说明:
-h 表以人民较易读的容量格式呈现(G/M/K)显示,自动选择显示的单位大小。
-s 表列出总量而已,而不列出每个个别的目录占用容量。 常用-sh
-a 列出目录下所有文件和目录容量

举例如下:统计mysql数据目录下信息
在这里插入图片描述

典例:

(1)计算目录 /root/bak/ 目录总大小。
# 法1
du -sh /root/bak

# 法2
cd /root
du -sh bak

# 法3
cd /root/bak
du -sh
(2)分别计算目录 /root/bak/ 目录下的一级子目录的各自大小。
cd /root/bak
du -sh *

7. 关机快捷键

  1. halt 立刻关机
  2. poweroff 立刻关机
  3. shutdown -h now 立刻关机(root用户使用)
  4. shutdown -h 10 10分钟后自动关机

8. 打开终端快捷键

ubuntu:Ctrl + Alt + T

9. SSH安装和使用

SSH 为 Secure Shell 的缩写,为建立在应用层基础上的安全通信协议。

1)检查SSH服务是否已启动

打开终端输入:

$ ps -e | grep ssh

# 结果:
7529 ?        00:00:00 sshd
7852 pts/1    00:00:00 ssh

其中sshd表示ssh-server已启动,ssh表示ssh-client已启动

2)安装SSH服务

 $ sudo apt-get install openssh-client
 $ sudo apt-get install openssh-server

3)启动SSH服务

$ sudo /etc/init.d/ssh start

启动后通过以下指令判断SSH服务是否正确启动:

$ ps -e | grep ssh

4)修改SSH端口号

SSH默认端口号为22,若有修改SSH端口号的需求,则运行以下指令打开SSH配置文件:

$ sudo gedit /etc/ssh/sshd_config

修改端口号(Port)后,重启SSH服务即可生效,命令如下:’

$ sudo /etc/init.d/ssh restart

5)SSH远程登录

SSH服务启动后,即可远程登陆,登陆命令格式为:ssh 远程主机用户名@IP地址,例如:

$ ssh user@10.234.5.81

远程登录后若想退出,输入$ exit

6)数据传输

完成SSH服务配置之后即可实现基于SSH的数据传输,最常用方便的指令便是scp,速度非常快!
以下是常用scp指令:
(实际操作过程中,可借助上面的ssh命令远程登录来查看远程目录和文件)

(1)本机拷入目标机
# 传单个文件
sudo scp 本机文件  t_user@192.168.10.10:目标机目录/

# 传目录及其子目录和子文件
sudo scp -r 本机目录/  t_user@192.168.10.10:目标机目录/
(2)目标机拷入本机
# 传单个文件
sudo scp t_user@192.168.10.10:目标机文件  本机目录/

# 传目录及其子目录和子文件
sudo scp -r t_user@192.168.10.10:目标机目录/  本机目录/

注释: 为了方便记忆,可将scp 看成 cp,语法几乎一致!!!
注: 注意保证远程的用户目录的读写权限,最好 /home/usr一般可以,或者新建个目录后chmod -R 777

10. Ubuntu16.04离线安装ssh

新安装的Ubuntu系统默认不支持ssh登录。安装方法如下:

  1. 下载
    官网地址:http://archive.ubuntu.com/ubuntu/pool/main/o/openssh/
    下载包:
    openssh-client_7.2p2-4_amd64.deb
    openssh-sftp-server_7.2p2-4_amd64.deb
    openssh-server_7.2p2-4_amd64.deb
    ssh_7.2p2-4_all.deb
  2. 安装
    sudo dpkg -i 安装包名依次安装上面下载的包,如:
    sudo dpkg -i openssh-client_7.2p2-4_amd64.deb
  3. 执行sudo pd -e | grep ssh,运行结果有sshd则说明服务已经启动。
    如果没有,则执行sudo service ssh start
    默认端口22,如果需要修改,则修改/etc/ssh/sshd_config文件里面的port值即可。

11. 两台linux系统用网线传文件

用scp命令,传输速度80MB/s

准备

想用scp功能需要确保有ssh功能。没有ssh需要安装,Ubuntu环境离线安装方法见上面第9节。

已知:

(1)本机:ubuntu16.04。
(2)目标机:centos7,
用户t_user,
密码123456,
ip 192.168.10.10

步骤:

一根网线,将两台电脑连接,确定能ping通后在本机输入下面命令传输:
(1)本机拷入目标机

# 传单个文件
sudo scp 本机文件  t_user@192.168.10.10:目标机目录/

# 传目录及其子目录和子文件
sudo scp -r 本机目录/  t_user@192.168.10.10:目标机目录/

会提示输入目标机的开机密码,输入后即可传输。
(2)目标机拷入本机

# 传单个文件
sudo scp t_user@192.168.10.10:目标机文件  本机目录/

# 传目录及其子目录和子文件
sudo scp -r t_user@192.168.10.10:目标机目录/  本机目录/

同样会提示输入目标机的开机密码,输入后即可传输。
注释: 为了方便记忆,可将scp 看成 cp,语法几乎一致!!!
注: 注意保证远程的用户目录的读写权限,最好 /home/usr一般可以,或者新建个目录后chmod -R 777

12. 一台windows和一台linux系统d的电脑互传

方法

利用winscp或者 Xftp软件。建议winscp,免费。
官方下载 https://winscp.net/eng/index.php
在windows装好后,两台电脑先ping一下,能通后,打开winscp输入linux的ip、电脑用户名、密码即可。
【注意】:这种通过端口通信的都是类似网线传输,需要ssh支持。所以前提是先保证linux装有ssh。安装方法见上面有讲解。

补充:

两台windows电脑可以用飞秋或直接ftp设置共享文件夹来传输。

13. Ubuntu修改磁盘名(如机械硬盘。不用uuid)

刚装好的系统,硬盘名都是以uuid命名的,很长,如13D34B34-1234-AA81-12345C12343256,修改环境变量等配置或日常输入linux命令用起来很不方便。
修改磁盘名方法如下:

1.查看当前所有分区:
fdisk -l
2.或查看所有分区磁盘格式:
df -TH

3.卸载要修改名称的分区: 
sudo umount /dev/sdb    # 其中/dev/sdb为需要修改的硬盘
4.修改磁盘名称:
#(适用于ext2或ext3)
sudo e2label /dev/sdb new_name
#(适用于NTFS)
sudo ntfslabel /dev/sdb new_name

说明:sdb为某个物理硬盘,uuid是这块sdb硬盘的标识名,咱们又起来一个别名叫做new_name,相当于指针变量。

14. ubuntu16.04 离线安装vim

http://archive.ubuntu.com/ubuntu/pool/main/v/vim/ 下载如下安装包:

vim-common_7.3.429-2ubuntu2.2_amd64.deb
vim-runtime_7.3.429-2ubuntu2.2_all.deb
vim_7.3.429-2ubuntu2.2_amd64.deb

然后依次安装

sudo dpkg -i vim-common_7.3.429-2ubuntu2.2_amd64.deb
sudo dpkg -i vim-runtime_7.3.429-2ubuntu2.2_all.deb
sudo dpkg -i vim_7.3.429-2ubuntu2.2_amd64.deb

15. deb文件操作

(1)安装deb
dpkg -i
如: sudo dpkg -i vim-common_7.3.429-2ubuntu2.2_amd64.deb
(2)解压deb
dpkg -X
如:将mysql-connector-java_8.0.13-1ubuntu16.04_all.deb 解压到 /usr/local/hive目录下
dpkg -X mysql-connector-java_8.0.13-1ubuntu16.04_all.deb /usr/local/hive
解压后可以得到mysql-connector-java-8.0.22.jar
(3)卸载deb
dpkg -r
如:将wps软件卸载,
要先利用 查看所有dpkg已经安装的软件的命令sudo dpkg -l 找到自己的安装的软件名。可以通过“grep”进行过滤。sudo dpkg -l | grep wps
这里找到的名是wps-office,则
输入 dpkg -r wps-office 卸载。
输入 dpkg -r --purge wps-office 卸载并连同配置文件一起删除。

16. 更改ip

1)手动改IP后,不重启的生效命令

手动改ip后,重启生效,或者不重启,输入如下命令:
ubuntu:

  1. 先使用网络连接–编辑–保存;
  2. 使用ifconfig命令查看网卡名称,如ens33
  3. 刷新IP网卡: sudo ip addr flush ens33
  4. 重启网络 sudo service network-manager restart

2)centos7 无图形界面的Server设置永久固定的静态ip

# 先查看网卡名,是否有网络
ip addr

cd /etc/sysconfig/network-scripts/
# 修改正在使用的网卡(可能有多个网卡)
vim ifcfg-enp100s0f0

将相应的配置项修改为

BOOTPROTO=static    # 启用静态IP地址
ONBOOT=yes    # 开启自动启用网络链接

并在尾部添加配置项

IPADDR=192.168.0.100   # IP
NETMASK=255.255.255.0  # 子网掩码
GATEWAT=192.168.0.1  # 网关

如图:
在这里插入图片描述

如果要改DNS,可以修改配置文件 vim /etc/resolv.conf ,并添加DNS地址,如下:

nameserver 114.114.114.114  // 添加DNS地址

如图:
在这里插入图片描述

最后,重启网络服务

systemctl restart network

3)自动获取的动态IP
参考上面,改动如下图:
在这里插入图片描述
其他步骤同上

3)统信UOS无图形界面的Server设置永久固定的静态ip

# 查看网卡
$ ip addr  # 结果:假设4个网卡 enp125s0f0、enp125s0f1、enp125s0f2、enp125s0f3

# 假设网线插在第1个网卡enp125s0f0上,下面配置网卡1:
$ vim /etc/network/interfaces

内容如下:
------------------------------------------
source-directory /etc/network/interfaces.d
auto enp125s0f0
iface enp125s0f0 inet static
address 192.168.0.100/24
gateway 192.168.0.0
------------------------------------------

# 重启网络
$ systemctl restart networking

# 再次查看网卡或ip,确认
$ ip addr
$ ifconfig 

17. vim命令

功能模式命令例子
粘贴普通shift + ctrl + v
查找ESC后输入:/ + 所查的字符如查找string, /string
查找ESC后输入:? + 所查的字符如查找string, ?string
快速查找普通让光标先停留在想要查找的单词的任意一个字母前面, 然后输入 Shift + * ,即可快速选中该单词,并且通过 n 或 N 进行上一个或下一个的匹配。
删除指定范围行ESC后输入:起始行,结束行 + d删除3~10行,3,10d
删除自某行起之后的几行普通光标先定位到该行,然后输入 要删除的行数 + dd如要删除自第3行起之后的7行,则:光标放在第3行后,输入7dd

18. 查看进程,杀死进程

1)杀死进程

kill -9 进程号PID

2)查看某个应用占用的 PID(进程ID)

ps -aux | grep 程序名称ps -fA | grep 程序名称

例子:找到mysql的 PID(即进程ID),并杀死!

输入

ps -aux | grep mysql

命令查看某个相关进程,获取进程号PID;然后使用

kill -9 进程号PID

命令即可杀死进程
附:除了ps;还有个jpsjps是用来查看java相关运行中的进程及其id号。可以通过它来查看到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机实例),和他们的进程号
jps存放在JAVA_HOME/bin/jps,使用时为了方便会将JAVA_HOME/bin/加入到Path中。

3)查看某个端口占用的 PID(进程ID)

sudo lsof -i:端口号

例子:找到占用5000端口号的进程,并杀死!
# 查找被占用的端口(这个命令可以参考)
netstat -tln | grep 5000
# 查找被占用端口的PID,如5000端口
sudo lsof -i:5000
# 杀死PID(进程ID)
sudo kill -9 进程ID

19. 修改linux终端的 root@后面的别名

vim /etc/hostname

20. 挂载磁盘/U盘

以centos7挂载U盘为例。
先新建好挂载目录 /mnt/usb,
i)查看u盘的设备文件名,
$ fdisk -l
根据u盘大小可找到你的u盘设备文件名,如:
32G的u盘对应/dev/sdd4,一般新插入的U盘的信息结尾处显示。
有时该32Gu盘会对应两个结果:/dev/sdd和/dev/sdd4,要选/dev/sdd4(即选数字的,有start标识的),注意区分
ii)挂载U盘
将u盘挂载到新建好的/mnt/usb目录下
$ mount /dev/sdd4 /mnt/usb
如无报错信息即可到/mnt/usb下查看u盘的内容。
iii)卸载U盘
$ umount /mnt/usb
拔U盘前记得要卸载U盘哦~
iv) 开机自动挂载硬盘

# 查看磁盘 UUID 和 类型
$ blkid
# 如:UUID="700C6FA3CXXXXX" TYPE="ntfs"
$ vim /etc/fstab
在/etc/fstab文件末尾追加: UUID=上面查到的UUID /mnt/usb ext4 defaults 0 0
# 注释:UUID=<磁盘或分区UUID> <挂载目录> <磁盘类型:如ntfs、vfat、fat、ext4等> <挂载参数:一般填defaults> <硬盘数据备份:0表示不备份,1表示每天备份,现在很少用到dump这个工具,在这里一般选0> <开机自检顺序:用来指定如何使用fsck来检查硬盘。0表示开机不自检;挂载点为 / 的(即根分区),必须在这里填写1,其他的分区都不能填写1。其它磁盘分区从2开始,数字越小越先检查,如果两个分区的数字相同,则同时检查。>
# 官方注释:<file system> <mount point>   <type>  <options>       <dump>  <pass>
    pass
    这个参数用来决定在启动时需要被fsck扫描的文件系统的顺序,根文件系统"/"对应该字段的值应该为1,其他的应该逐渐递增,如果设置为0则表示不扫描。
或在/etc/fstab文件末尾追加:/dev/sdd4 /mnt/usb ext4 defaults 0 0

【补充】
(1)FAT32格式的U盘
上面的命令正常可以挂载,如果不能,用下面的命令
$mount -t vfat /dev/sdd4 /mnt/usb

(2)NTFS格式的U盘
NTFS格式的U盘,需要下载安装ntfs-3g包来支持,安装后
$mount -t ntfs-3g /dev/sdd4 /mnt/usb

21. 格式化磁盘/U盘

i)查看u盘的设备文件名,
$fdisk -l
根据u盘大小可找到你的u盘设备文件名,如:/dev/sdd4,一般新插入的U盘的信息结尾处显示
ii)格式化U盘
$ mkfs -t vfat /dev/sdd4 # 兼容linux和windows
$ mkfs -t ext4 /dev/sdd4 # Linux,支持最大16TB的单个大文件(假设由 4KB 的块组成),这个容量是 ext3 的 8 倍。支持的最大文件系统为 1EB(1000 PB)。
ntfs、vfat、fat、ext4
$ mkfs -t ntfs /dev/sdd4 # windows,支持最大2T单个大文件

22. 查看设备信息

先切换成root用户

su
# 输入秘密登陆root

1)查看设备基本信息

uname -a

-a为输出所有信息,还有其他参数可通过$ uname --help来查看。

2)查看有哪些硬盘

法1:

# 查看所有硬盘(已挂载+未挂载)
fdisk -l

法2:

# 查看已挂载的硬盘
df -Th

法3:

# 以树状列出所有硬盘
lsblk

法4:
这些都在/sys/class/block目录下:

cd /sys/class/block
ls
# 或者 ls /sys/class/block

3)查看硬盘序列号

假设结果有挂载的硬盘/dev/sda,还有自带的系统盘 /dev/nvmeon1。

(1)查看挂载的硬盘/dev/sda序列号

查看其序列号

# 法1(不推荐。仅适用于挂载的硬盘,有时候不能查看自带的系统盘)
hdparm -i /dev/sda

# 法2(推荐。一般可以查看各种磁盘,但要先下载该命令)
lsblk -n --nodeps -o name,serial /dev/sda

# 法3(推荐。一般可以查看各种磁盘)
udevadm info --query=all --name=/dev/sda | grep -w ID_SERIAL_SHORT

(2)查看自带的系统盘 /dev/nvmeon1序列号
# 法1(推荐。一般可以查看各种磁盘,但要先下载该命令)
lsblk -n --nodeps -o name,serial /dev/nvme0n1

# 法2(推荐。一般可以查看各种磁盘)
udevadm info --query=all --name=/dev/nvme0n1 | grep -w ID_SERIAL_SHORT

4)查看系统安装时间

因为系统是装在磁盘上的,故可通过查看系统磁盘使用的时间来判断装系统的时间。
假设有自带的系统盘 /dev/nvmeon1。

dumpe2fs /dev/nvme0n1 | grep -i created

4)查看linux的什么系统及版本

cat /etc/os-release
或
cat /etc/issue

23. Ubuntu apt 相关命令

# 搜索软件包。
apt-cache search package

# 获取包的相关信息,如说明、大小、版本等。
apt-cache show package

# 安装包。
sudo apt-get install package

# 重新安装包。
sudo apt-get install package --reinstall

# 修复安装。
sudo apt-get -f install

# 删除包。
sudo apt-get remove package

# 删除包,包括配置文件等。
sudo apt-get remove package --purge

# 更新源。
sudo apt-get update

# 更新已安装的包。
sudo apt-get upgrade

# 升级系统。
sudo apt-get dist-upgrade

# 了解使用该包依赖那些包。
apt-cache depends package

# 查看该包被哪些包依赖。
apt-cache rdepends package

# 安装相关的编译环境。
sudo apt-get build-dep package

# 下载该包的源代码。
apt-get source package

# 清理无用的包。
sudo apt-get clean && sudo apt-get autoclean

# 检查是否有损坏的依赖。
sudo apt-get check


---------------
# 将手动安装的包变成(或还原成)自动安装。
sudo apt-mark auto 包名

# 列出有哪些包是手动安装的?
apt-mark showmanual

24. 设置添加软件启动快捷方式

法1:命令快速启动
利用alias别名,如将pycharm软件设置启动快捷方式。

alias pycharm='sh /opt/pycharm/bin/pycharm.sh'

打开终端,直接输入pycharm即可启动pycharm了。
法2:图标快捷方式启动
科普一下:ubuntu软件图标快捷方式都在/usr/share/applications/下,软件名.desktop。
下面以pycharm为例,建立pycharm软件的图标快捷方式:
新建 /usr/share/applications/Pycharm.desktop 文件,并输入如下内容:

[Desktop Entry]
Type=Application
Name=Pycharm
GenericName=Pycharm3
Comment=Pycharm3:The Python IDE
# 软件安装路径
Exec=sh /opt/pycharm/bin/pycharm.sh
# 快捷图标路径
Icon=/opt/pycharm/bin/pycharm.png
Terminal=pycharm
Categories=Pycharm;

保存后,打开“搜索“找到图标pycharm,然后将其拖到需要放置的位置即可。

25. ACL权限 — 文件夹指定用户访问

ACL权限常出现在linux挂载的磁盘,比如在/media/user/磁盘名中的/media/user/目录就拥有ACL,如下图,有 + 号:
在这里插入图片描述
没有ACL权限的用户表现是:使用cd /media/user 无法访问!!!
一般,所有与ACL权限有关的,用 “setfacl” 命令来操作。
举例:目录1有ACL权限,用户1要想访问目录1,需将目录1的ACL权限添加给用户1,如下:

给“用户1”设置“目录名1”的ACL权限,用户1可对目录名1/进行rwx(读写执行)
sudo setfacl -m u:用户1:rwx 目录名1/

如果再想取消用户1访问目录1的权限,输入:

sudo setfacl -x u:用户1` 目录名1/

其他命令:

# 查看目录1的ACL权限
getfact 目录1/

# 所有子目录和子文件也设定ACL权限,用递归 -R
sudo setfacl -m u:用户1:rwx -R 目录名1/

删除“目录名1/”的所有用户的ACL权限。即:除了root所有用户都无法访问“目录1”
setfacl -b 目录名1

注:上面都是对目录操作,对文件操作同理。

26. 知识大全:linux各版本(centos、redhat、debian、ubuntu、国产银河麒麟)、架构(x86, arm)、安装包后缀名(.rpm, .deb, .sh)及安装卸载命令

以linux版qq为例:
在这里插入图片描述在这里插入图片描述

27. 查找文件(快速):mlocate

除了用 find -name "**文件名**",还有一个快速检索的大神器:locate 命令。
ubuntu现在已经没有这个命令了,升级为了mlocate 命令,可以通过 sudo apt-get install mlocate 来安装这个命令。
使用方法:

mlocate 文件名(或目录名)

例1:搜索包含 pycharm 的文件或目录位置。

mlocate pycharm

结果:
在这里插入图片描述例2:搜索包含 JetBrains 的文件或目录位置。

mlocate JetBrains

结果:
在这里插入图片描述可看到pycharm软件要搜索mlocate JetBrains 才能看到其配置文件等真实位置。

27. sudo参数妙用

# 提升用户权限:切换成root用户,切换后进入到/root下
sudo -i

# 打开root用户的shell:切换成root用户,当前目录不变
sudo -s

当你在某个目录时,sudo不起作用,必须要用root用户。
可以输入

sudo -s

快速切换成root用户,而不改变目录。
不必输入su 再输入root密码。
在这里插入图片描述

28. 修复缺失的依赖(如在安装软件的时候报缺少依赖)

当如下场景时:
(1)在安装软件的时候,缺少依赖包;
(2)系统出现错误报告
可通过如下命令来安装修复缺失的依赖。
Ubuntu:

sudo apt-get install -f

eg:
在这里插入图片描述

29. Linux(无图形界面)快速高效复制粘贴文字

1)通用方法(一般人都知道):

复制:鼠标选中要复制的区域后,ctrl + shift + c
粘贴:ctrl + shift + v
注:有图形界面的linux可以在设置里自定义快捷键。

2)高效方法(一般人不知道):

复制:鼠标选中要复制的区域
粘贴:按一下鼠标滑轮即可!
注:是按下滑轮,不是滑动滑轮!

30. linux 查询目录下文件个数

分析:
ll   # 输出结果中:文件以 - 开头,目录以 d 开头
ll | grep "^-"  # 过滤出以 - 开头的输出信息
ll | grep "^-" | wc -l # 统计个数
正式:
# 查询某目录下的文件个数
ll | grep "^-" | wc -l
# 查询某目录下的目录个数
ll | grep "^d" | wc -l

# 查询某目录下的所有文件及子文件个数
ll -R | grep "^-" | wc -l   # 参数-R 表递归
# 查询某目录下的所有目录及子目录个数
ll -R | grep "^d" | wc -l


31. 字体下载

ubuntu20.04 wps报错缺失字体,报错信息:
系统缺失字体:Symbol、Wingdings、Wingdings2、Wingdings3、Webings、MT Extra,WPS无法正确地显示某些符号(公式)!
在这里插入图片描述
推荐个免费的非常好的字体网站:
中华字体网:http://www.font5.com.cn/
将缺失的字体下载后放在 /usr/share/fonts 下即可解决报错信息!但建议在 /usr/share/fonts 新建一个文件夹 my_fonts,将 /usr/share/fonts/my_fonts 下。

31. 系统当前日期和时间

date

"""
结果:
20211011日 星期一 11:17:34 CST
"""

32. ls 和 ll 的一些技巧

1)只列出某目录下的所有目录

# 法1(常用)
ls -d */  # 横着显示
ll -d */  # 竖着显示

# 法2
ls -F | grep "/$" # 不包含隐藏目录
ll -F | grep "/$" # 包含隐藏目录

# 法3
ls -l | grep "^d"  # 不包含隐藏目录
ll | grep "^d"  # 包含隐藏目录

2)只删除某目录下的所有目录

ls -d */ | xargs rm -rf

3)显示 inode 节点信息

ls -i

4)按时间排序

# 由新到旧
ll -t  # t = time
# 由旧到新
ll -tr  # r = reverse反转

5)按大小排序(不适用于目录)

注意:正常计算目录文件夹大小命令为du -sh,而这里的计算方式不适用于目录(不是递归计算目录的方式)。

# 由大到小
ll -S    # S = size
ll -Sh   # 以可读的方式显示
# 由小到大
ll -Sr   #  r = reverse反转
ll -Shr  # 以可读的方式显示

32. 查看目录结构 tree

安装

如果Ubuntu系统没有安装tree需要先安装

sudo apt install tree

使用

# 查看当前目录下的,所有子目录结构
tree

# 查看当前目录下的,两层的目录结构
tree -L 2

结果如:
在这里插入图片描述
在这里插入图片描述

33. Linux 常用目录介绍

1)/usr

bin/  # 用户常用命令存放目录
include/  # 程序头文件存放目录
lib/  # 库文件目录
lib64/  # 64位库文件存放目录
local/  # 用户自己安装的程序与编译完成程序存放目录
share/  # 帮助文档与共享文档存放路径
src/  # 源码存放路径
(1)/usr/share
doc/  # 文档目录
fonts/  # 字体目录
man/  # man帮助文档目录

2)/etc

fstab  # 开机自动挂载磁盘的配置文件
hosts  # 主机名的配置文件
issue  # 打印系统版本内核版文件
passwd  # 用户信息文件
profile  # 环境变量文件
resolv.conf  # DNS配置文件
rsyslog.conf  # 系统日志配置文件
services  # 端口、网络服务配置文件

3)/usr/local

bin/  # 自定义命令存放目录

34. Ubuntu: apt install 报错:“E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

在用apt或apt-get安装xx包时

sudo apt install xx

报错:

下列软件包有未满足的依赖关系:
xxxx : 依赖: xxxx正要被安装
          依赖: xxxx 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

解决办法:
aptitude 给出方案,安装所有相关依赖包自动进行配置。

sudo aptitude install xx

如果未找到aptitude则现安装一下

sudo apt-get install aptitude

然后根据提示选择安装方案:

y  # 接受
n  # 不接受,然后会给出下一个方案

35. Ubuntu20.04设置鼠标右键新建txt普通文本文件

正常Ubuntu20.04鼠标右键是没有新建txt普通文本文件的功能的,有时候不太方便。如何设置呢?
方法如下:
进入 主目录 -> 模板目录下,
在这里插入图片描述
可以看到这些类型的文件是鼠标右键就能直接创建的。故在这个目录下进行配置,我们在这里把txt的普通文本文件也配置进来。
在这里插入图片描述
在这个目录下打开终端,输入:sudo touch 文本文件.txt 即可!如下图:
在这里插入图片描述
此时,Ubuntu20.04鼠标右键就可以新建txt普通文本文件了。

36. nohup 设置“退出终端也不会影响程序的运行”

如Pycharm:

i) 正常启动方式

sh Pycharm_dir/bin/pycharm.sh

启动后关闭终端,Pycharm程序便会关闭。

ii) 关闭终端也能运行程序地启动方式

nohup Pycharm_dir/bin/pycharm.sh &
# 注:最后的 & 表示:让命令退出终端扔旧执行。如果不写这个 & ,则虽关闭命令行程序不会停止,但关闭终端程序则停止。

来启动Pycharm,这样即使关闭终端,Pycharm程序也不会关闭。
注释:
nohup 即 no hang up(不挂起)的意思,用于在系统后台不挂断运行命令,即使退出终端也不会影响程序的运行。
nohup命令,默认会输出一个名叫 nohup.out文件到当前目录下,如果当前目录不可写,则会输出到主目录 $HOME/nohup.out 文件中。

iii) 以下命令是将log重定向到 ./test/pycharm.log 文件中。

nohup Pycharm_dir/bin/pycharm.sh > ./test/pycharm.log 2>&1 &

# 注:
"""
2>&1 解释:
将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 pycharm.log 文件中。
    0 – stdin (standard input,标准输入)
    1 – stdout (standard output,标准输出)
    2 – stderr (standard error,标准错误输出) 
"""

拓展应用(以Pycharm应用为例)

1)设置快捷启动

可以在 /etc/profile 或 ~/.bashrc 中写入:

alias 快捷名="shell命令"

例: 设置快捷启动Pycharm应用
在 /etc/profile 或 ~/.bashrc 中写入:

#=========== shortIcon ==========#
# method1:
# alias pycharm="sh /software/Pycharm/bin/pycharm.sh"
# method2:
# alias pycharm="nohup /software/Pycharm/bin/pycharm.sh &"
# method3:
alias pycharm="nohup /software/Pycharm/bin/pycharm.sh > /software/log_cache/pycharm.log 2>&1 &"
2)设置开机自启动

可以在 /etc/rc.local 中写入开机要运行的shell命令:

###  开机自启动应用: ###
自定义的shell命令

例: 设置开机自启动Pycharm应用
在 /etc/rc.local 中(如果没有这个文件见38.开机自启动总结)写入:

nohup /software/Pycharm/bin/pycharm.sh > /software/log_cache/pycharm.log 2>&1 &

再如

/usr/local/activemq/bin/activemq start

另外,开机自启动还可以用如下的 systemctl enable 服务名 来配置,详见下:

37. Systemctl 常用指令

常用总结:

指令功能
systemctl start 服务名开启服务
systemctl stop 服务名关闭服务
systemctl restart 服务名重启服务
systemctl status 服务名服务状态
systemctl enable 服务名设置开机自启
systemctl disable 服务名取消开机自启
systemctl is-active 服务名服务是否激活
systemctl is-enabled 服务名服务是否开机自启动
systemctl list-dependencies 服务名查看系统中服务的依赖关系
systemctl list-units查看系统中所有正在运行的服务
systemctl list-units-files查看系统中所有服务的开机启动状态
systemctl mask 服务名冻结服务
systemctl unmask 服务名解冻服务
systemctl set-default multi-user.target设置开机不启动图形界面
systemctl set-default graphical.target设置开机启动图形界面

38. 开机自启动总结

法一(systemctl enable)

如果可以直接用systemctl start 服务名启动的应用,则可以用 systemctl enable 服务名 来使应用自启动。

法二(/etc/rc.local)

/etc/rc.local 中写入开机要运行的shell命令:
如:

###  开机自启动应用: ###
自定义的shell命令

# 开机自启动Pycharm应用
nohup /software/Pycharm/bin/pycharm.sh > /software/log_cache/pycharm.log 2>&1 &

# 开机自启动activemq应用
nohup /usr/local/activemq/bin/activemq start > /software/log_cache/activemq.log 2>&1 &

# 适用于打印日志内容少的情形下。
/usr/local/activemq/bin/activemq start

注意: 一些应用的自启动打印日志内容较多甚至会一直打印,如包含SpringBoot等jar包的启动会一直输出,一定要用nohup写法,否则可能会导致电脑启动不了。

注:如果没有rc.local文件

对于新的Linux系统,如Ubuntu20.04,统信UOS等没有rc.local文件,自启动都由systemd管了,故可以新建.service文件,并用systemctl enable 服务名的方式。配置方法如下:

i)在 /etc/下新建 rc.local 文件
su
touch /etc/rc.local
chmod 755 /etc/rc.local

# rc.local 文件开头一定要加上 #!/bin/bash 才能被识别
echo '''#!/bin/bash''' >> /etc/rc.local

再将需要启动的shell命令写在 rc.local里,准备用。
如 rc.local中写入:

#!/bin/bash
#上面那句话必须有

# 自定义一些自启动应用
nohup /usr/local/activemq/bin/activemq start > /software/log_cache/activemq.log 2>&1 &

exit 0

然后执行一下

chmod 755 /etc/rc.local
ii)在 /etc/systemd/system 下新建一个.servive文件

如在 /etc/systemd/system 下新建一个 rc-local.service 文件(名字自定义)

su
touch /etc/systemd/system/rc-local.service

为了方便也可以用 cp /usr/lib/systemd/system/rc-local.service /etc/systemd/system/ 先复制一个,再在此基础上更改。

编辑/etc/systemd/system/rc-local.service文件,内容如下:

[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

[Install]
WantedBy=multi-user.target
Alias=rc-local.service

然后执行一下

chmod 755 /etc/systemd/system/rc-local.service
iii)将新建的 rc-local.service 服务添加到自启动列表里
su
# 自启动
systemctl enable rc-local.service

(如果报警告则不用管。)
这样便设置好了!

拓展一下,和第37节的用法一样,其他命令同理:

# 开启服务
systemctl start rc-local.service
# 关闭服务
systemctl stop rc-local.service
简洁版步骤

为了避免和原生的rc.local重复,可以再换个名。
/etc 下新建My_rc.local 文件,内容如下:

#!/bin/bash
#上面那句话必须有

# 自定义一些自启动应用
nohup /usr/local/activemq/bin/activemq start > /software/log_cache/activemq.log 2>&1 &

exit 0

然后执行一下

chmod 755 /etc/My_rc.local

/etc/systemd/system/ 下新建 My_rc-local.service文件,内容如下:

[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/My_rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/My_rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

[Install]
WantedBy=multi-user.target
Alias=My_rc-local.service

然后执行一下

chmod 755 /etc/systemd/system/My_rc-local.service

最后再将新建的 rc-local.service 服务添加到自启动列表里

su
# 自启动
systemctl enable My_rc-local.service

(如果报警告则不用管。)
这样便设置好了!

其他拓展:
/etc/systemd/system
/run/systemd/system
/lib/systemd/system

这三个目录的配置文件优先级依次从高到低,如果同一选项三个地方都配置了,优先级高的会覆盖优先级低的。
系统安装时,默认会将文件放在/lib/systemd/system目录。如果我们想要修改系统默认的配置,比如nginx.service,一般有两种方法:

1)在/etc/systemd/system目录下创建nginx.service文件,里面写上我们自己的配置。
2)在/etc/systemd/system下面创建 nginx.service.d/ 目录,在这个目录里面新建任何以.conf结尾的文件,然后写入我们自己的配置。推荐这种做法。
/run/systemd/system这个目录一般是进程在运行时动态创建unit文件的目录,一般很少修改,除非是修改程序运行时的一些参数时,即Session级别的,才在这里做修改。

39. (文本追加内容)添加文本内容到指定行

普通处理 “>”

 echo "这是一行文本" > 1.txt   # 重写,覆盖
 echo "这是一行文本" >> 1.txt   # 追加, 不覆盖

高级处理 “sed”(可以指定插入某行)

1)sed 插入到指定行
# 第一行
## 注意下面用法:是单引号!若双引号会报错! ##
 sed -i '1i 这是一行文本 ' 1.txt     # 插入到第一行之前
 sed -i '1a 这是一行文本 ' 1.txt      # 插入到第一行之后

# 第二行
 sed -i '2i 这是一行文本 ' 1.txt     # 插入到第二行之前
 sed -i '2a 这是一行文本 ' 1.txt      # 插入到第二行之后

# 最后一行(用 $ 表示)
 sed -i '$i 这是一行文本 ' 1.txt     # 插入到最后一行之前
 sed -i '$a 这是一行文本 ' 1.txt      # 插入到最后一行之后

【注】

  • 如果想插一次就直接插入多行内容,则可以用\n来换行。
  • 新建的从没有使用过的空白文档没有行,不能插入。但打开后经编辑过的空白文档有行,可以插入。
2)sed 插入变量

用双引号可以实现对变量的解析

# 将 JAVA_HOME=/usr/local/java/jdk1.8.0_271 插入1.txt的第一行之前
sed -i "1i JAVA_HOME=${JAVA_HOME}" 1.txt

# 将 JAVA_HOME="/usr/local/java/jdk1.8.0_271" 插入1.txt的第一行之前
sed -i "1i JAVA_HOME=\"${JAVA_HOME}\"" 1.txt

40. Shell 脚本那些事

40.1 判断是否为root用户,非root则退出。

法1(whoami法)(推荐)
if [ `whoami` != "root" ];then
	echo "You have no permission to run $0 as non-root user!"
	exit 1;
fi

注意: 语法上 [ `whoami` != "root" ][ ] 前后一定要有空格!!!否则报错。
[注释] :
在这里插入图片描述

法2(用户id法 id -u)(推荐)

由于root的用户id为0,而默认的第一个普通用户的id一般为1000,第二个普通账户为1001,依次类推…,所以可以通过判断用户id是否为0的方式来判断是否为root用户。

if [ `id -u` -eq 0 ];then
	echo "You have no permission to run $0 as non-root user!"
	exit 1;
fi

注意: 语法上 [ `id -u` -eq 0 ][ ] 前后一定要有空格!!!否则报错。
[注释] :
在这里插入图片描述

法3($USER法)(强烈不建议)
if [ "$USER" != "root" ];then
	echo "You have no permission to run $0 as non-root user!"
	exit 1;
fi

注意: 语法上 [ "$USER" != "root" ][ ] 前后一定要有空格!!!否则报错。
[注释] :
这个方法可能会判断错误,如果是su切换的root,则查不出来判断不了root。而sudo -s才能判断出root,如下:
在这里插入图片描述

40.2 判断是否存在某个环境变量

# 判断是否存在java环境变量
if [ -z $JAVA_HOME ];then
	echo "不存在JAVA环境变量!"
fi

注释: -z 表 -zero,判断$JAVA_HOME值的字符串长度是否为0

  • [ -z 字符串 ] :字符串长度为0?
  • [ -n 字符串 ] :字符串长度非0?

40.3 shell脚本里source命令不存在

背景

test.sh

source /etc/profile

然后执行 sh test.sh 将会提示source命令不存在,执行失败!

分析
  • 首先要明确的一点:在shell脚本中没有source命令!而在bash中有source命令!
  • 对于.sh文件和.bash文件,每种都有三种执行方式:
# sh文件
./test.sh
sh test.sh # 以sh形式执行test.sh
bash test.sh # 将test.sh转为test.bash后以bash执行,如同bash test.bash

# bash文件
./test.bash
bash test.bash # 以bash形式执行test.bash
sh test.bash # 将test.bash转为test.sh后以sh执行,如同sh test.sh

其中,./test.sh 或 ./test.bash是以默认格式来执行。

  • 如 test.sh:
source /etc/profile

./test.sh 是默认以sh形式执行的。

  • 而如果注释了
#!/bin/bash

source /etc/profile

./test.sh 则是默认以bash形式来解析执行的。

  • 同理
    如test.bash:
#!/bin/sh

source /etc/profile

./test.bash 则是以sh来解析的,将会报错。

解决方法
法1(建议)

test.bash:

source /etc/profile

./test.bashbash test.bash 来执行!(最正规)

法2

test.sh:

#!/bin/bash

source /etc/profile

./test.shbash test.sh 来执行!

法3(不建议)

test.sh:

source /etc/profile

只能用bash test.sh 来执行!(不正规)

41. 环境变量 /etc/profile、/etc/bash.bashrc、 ~/.bashrc等

知识点一:

  • /etc目录下:系统变量,对所有用户的
  • ~/ 目录下 :用户变量,对当前用户的

知识点二:

  • profile类型配置文件:开机自动加载。
  • bash 类型配置文件:打开新终端自动加载。

详细如下:

#### 一、系统变量(在/etc下):全局,对所有用户生效 ####
# 1、profile:开机自动加载执行生效,或source生效,但shell终端下切换用户不执行
/etc/profile
/etc/profile.d/
# 2、bash:打开新bash终端即执行生效。shell终端切换用户也生效。
/etc/bash.bashrc # 有的系统是 /etc/bashrc
/etc/bash_completion
/etc/bash_completion.d/


#### 二、用户变量(在~/ 下):仅对当前用户生效 ####
# 1、当前用户开机生效。
~/.profile

# 2、当前用户新开终端生效。切换用户不生效。
~/.bashrc
~/.bash_history
~/.bash_logout

综上:
如果想一劳永逸配置对所有用户都生效的环境变量,建议选择/etc/bash.bashrc(这个是Ubuntu20.04中的,在Centos7中叫 /etc/bashrc),打开终端切换用户也不影响。
/etc/profile有时切换用户需要source。
如果有单独供某用户使用的(如hadoop大数据环境配置),建议在其用户下 .bashrc 下配置。
拓展应用:

  • 终端切换root用户后 /etc/profile中配置的JDK失效,需要重新source
    解决办法:
    可在 /root/.bashrc 文件结尾添加 source /etc/profile
  • centos开机自启,/etc/profile中配置的JDK没有生效
    解决办法:
    可在 /etc/rc.local 追加 source /etc/profile

42. 卸载应用

42.1 Ubuntu卸载应用

1)dpkg 安装的软件
# 查询
dpkg --get-selections | grep 应用名

# 卸载(不保留配置)
dpkg -P 具体应用名

# 卸载(保留配置)
dpkg -r 具体应用名
# 清除残余数据(如配置等)
dpkg -l | grep ^rc | awk '{print $2}' | sudo xargs dpkg -P 具体应用名

42.2 Centos卸载应用

1)yum 安装的软件
# 查询
yum list installed | grep 应用名

# 卸载
yum -y remove 具体应用名

举例:
卸载新装系统内置的java、jdk

# 查询关于java、jdk相关的安装文件
yum list installed | grep java
yum list installed | grep jdk

# 卸载(根据上面查询到的文件名)
yum -y remove java*
yum -y remove jdk*
2)rpm 安装的软件
# 查询
rpm -qa | grep 应用名

# 卸载
rmp -e 具体应用名
# 如果上面命令提示有依赖,则如下命令:
rmp -e --nodeps 具体应用名 # 忽略依赖强制删除

例子同上,不再举例。

43. 给用户添加sudo权限

想使用 sudo 时,出现类似用户 不在 sudoers 文件中,此事将被报告。 这种提示都是用户无root权限。如何给用户加sudo呢?
以要加sudo的当前用户名为 TestUser1 为例
法1(推荐)
user1 添加到sudo用户组。编辑 /etc/group 文件,找到 sudo: 开头的那一行。信息为 sudo:x:27:用户1,将用户 user1 追加上即可。

sudo:x:27:用户1,TestUser1

法2
编辑 /etc/sudoers 文件,在

# User privilege specification
root    ALL=(ALL:ALL) ALL

后面追加上

# User privilege specification
root    ALL=(ALL:ALL) ALL
TestUser1    ALL=(ALL:ALL) ALL

即可。网上多是这种方法,但是不建议这么做。建议用法1添加sudo用户组的方式。

44. 设置屏幕分辨率

查看支持的分辨率

xrandr

设置分辨率

# 设置分辨率为 1920x1200 (注意是x,不是*)
xrandr -s 1920x1200
# 恢复初始默认分辨率(默认为0)
xrandr -s 0
# 选择前面xrandr展示出来的分辨率列表,第三个(下标2)
xrandr -s 2

45. 修复ntfs硬盘挂载失败

问题

电脑断电等再开机挂载硬盘(ntfs格式)时挂载不上,报错:
wrong fs type, bad option, bad superblock on /dev/sda2, missing codepage or helper program, or other error.

排查

输入

sudo dmesg | tail

看到下面有信息:

ntfs3: sda2: volume is dirty and "force" flag is not set!
ntfs3: sda2: volume is dirty and "force" flag is not set!

显示 /dev/sda2 这个 volume 被标记为了 dirty,并且 ntfs3 在没有 force 这个 flag 设置的情况下不会挂载。

解决

sudo ntfsfix -d /dev/sda2

45. 查看二进制文件命令 xxd

xxd:以十六进制格式查看二进制文件的内容

xxd 二进制文件名

46. pathlib.Path

pathlib.Path 可以将一个绝对或相对的目录或文件名变成一个对象,然后就可以调用自带封装好的方法,去读取文件名、父目录、判断是否是文件、判断是否是目录等操作。相当于将一些相关的方法统一作了封装。
例子:
假设 /root下有一个1.py

from pathlib import Path

#【相对路径】将当前目录'1.py'文件new成一个对象。
p = Path('1.py')
print(p.name) # 1.py
print(p.parent) # PosixPath('.')  # 父目录即相对目录“.”
# 等价于 os.path.isfile()
print(p.is_file()) # 如果当前目录确实有文件1.py,则True;否则False
# 等价于 os.path.isdir()
print(p.is_dir()) # False


#【绝对路径】将'/root/1.py'文件new成一个对象。
p2 = Path('/root/1.py')
print(p.name) # 1.py
print(p.parent) # PosixPath('/home/user/tmp2') # 父目录即相对目录“/home/user/tmp2”
print(p.is_file()) # 如果确实有文件/root/1.py,则True;否则False
print(p.is_dir()) # False
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值