文章目录
-
Linux常用命令 - 1. 解压缩
- 2. 改权限chomd
- 3. 改用户密码
- 4. 切换用户登录。如:root用户和普通用户切换
- 5. 统计文件夹下文件或子文件夹的个数
- 6. 计算文件或文件夹的大小
- 7. 关机快捷键
- 8. 打开终端快捷键
- 9. SSH安装和使用
- 10. Ubuntu16.04离线安装ssh
- 11. 两台linux系统用网线传文件
- 准备
- 12. 一台windows和一台linux系统d的电脑互传
- 13. Ubuntu修改磁盘名(如机械硬盘。不用uuid)
- 14. ubuntu16.04 离线安装vim
- 15. deb文件操作
- 16. 更改ip
- 17. vim命令
- 18. 查看进程,杀死进程
- 19. 修改linux终端的 root@后面的别名
- 20. U盘
- 22. 查看设备信息
- 23. Ubuntu apt 相关命令
- 24. 设置添加软件启动快捷方式
- 25. ACL权限 --- 文件夹指定用户访问
- 26. 知识大全:linux各版本(centos、redhat、debian、ubuntu、国产银河麒麟)、架构(x86, arm)、安装包后缀名(.rpm, .deb, .sh)及安装卸载命令
- 27. 查找文件(快速):mlocate
- 27. sudo参数妙用
- 28. 修复缺失的依赖(如在安装软件的时候报缺少依赖)
- 29. Linux(无图形界面)快速高效复制粘贴文字
- 30. linux 查询目录下文件个数
- 31. 字体下载
- 31. 系统当前日期和时间
- 32. ls 和 ll 的一些技巧
- 32. 查看目录结构 tree
- 33. Linux 常用目录介绍
- 34. Ubuntu: apt install 报错:“E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
- 35. Ubuntu20.04设置鼠标右键新建txt普通文本文件
- 36. nohup 设置“退出终端也不会影响程序的运行”
- 37. Systemctl 常用指令
- 38. 开机自启动总结
- 39. (文本追加内容)添加文本内容到指定行
- 40. Shell 脚本那些事
- 41. 环境变量 /etc/profile、/etc/bash.bashrc、 ~/.bashrc等
- 42. 卸载应用
- 43. 给用户添加sudo权限
- 44. 设置屏幕分辨率
- 45. 修复ntfs硬盘挂载失败
- 45. 查看二进制文件命令 xxd
- 46. pathlib.Path
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’
(3)分卷解压缩
分卷解压缩:
############ 压缩 ############
# 先压缩为一个html.zip
zip -qr html.zip /home/html
# 再将html.zip分卷为data.zip、data.z01、data.z02 ...
zip -s 10m html.zip --out data.zip
############ 解压 ############
# 先将分卷data.zip、data.z01、data.z02 ...合为一个undata.zip
cat data.* > undata.zip
# 再解压
unzip undata.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)下载
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
进行用户名的切换的切换
- 进入其他用户username1:输入
su username1
。实战中,如有一个用户名叫hadoop,输入su hadoop
即可进入hadoop用户。 - 普通用户模式下:输入
su
即可进入root用户 - 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. 关机快捷键
- halt 立刻关机
- poweroff 立刻关机
- shutdown -h now 立刻关机(root用户使用)
- 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登录。安装方法如下:
- 下载
官网地址: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 - 安装
用sudo dpkg -i 安装包名
依次安装上面下载的包,如:
sudo dpkg -i openssh-client_7.2p2-4_amd64.deb
- 执行
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:
- 先使用网络连接–编辑–保存;
- 使用ifconfig命令查看网卡名称,如ens33
- 刷新IP网卡: sudo ip addr flush ens33
- 重启网络 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
;还有个jps
,jps
是用来查看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盘
20.1 挂载磁盘/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
20.2 格式化磁盘/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单个大文件
20.3 使Ubuntu24.04支持exfat格式
Ubuntu24.04有exfat格式的驱动,但默认是不开启的。
开启命令
# 加载驱动
modprobe exfat
如果没有该驱动,可以下载后安装,如下:
# 下载
git clone https://github.com/dorimanx/exfat-nofuse.git
# 编译安装
cd exfat-nofuse
make
make install
# 加载驱动
modprobe exfat
附:
- 禁用exfat格式
sudo vim /etc/modprobe.d/blacklist.conf
# 在文件中添加下面行,并保存
blacklist exfat
# 更新initramfs映像,以便更改生效
sudo update-initramfs -u
# 重启
reboot
- 卸载exfat驱动模块
sudo modprobe -r exfat
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
5)查看linux的什么系统及版本、发行版等
cat /etc/os-release
或
cat /etc/lsb-release
或
cat /etc/issue
或
lsb_release -a
6)查看cpu信息
lscpu
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
"""
结果:
2021年 10月 11日 星期一 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.bash
或 bash test.bash
来执行!(最正规)
法2
test.sh:
#!/bin/bash
source /etc/profile
用 ./test.sh
或 bash 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