Ubuntu 设置开机 Root 用户登录

Ubuntu 设置开机 Root 用户登录

​ 默认安装 Ubuntu 18+ 都是不允许以root用户进行登录的,想要以root用户进行登录需要进行一些操作,主要是以下几个步骤:

  • 第一步:以普通用户登录系统,创建root用户的密码

    在终端输入命令:

    1
    sudo passwd root

    然后输入你要设置的密码,这样就完成了设置root用户密码的步骤。

  • 第二步:设置登录界面选择其他用户登录按钮

    修改文件 /usr/share/lightdm/lightdm.conf.d/50-xxxxxx.conf 文件,增加两行:

    1
    2
    greeter-show-manual-login=true
    all-guest=false

    保存即可。

  • 第三步:设置允许 Root 进行登录操作,未设置在登录页会不允许 Root 用户

    进入 /etc/pam.d 目录,修改 gdm-autologingdm-password 文件

    gedit gdm-autologin

    1
    2
    # 注释掉这一行,保存
    # auth required pam_succeed_if.so user != root quiet_success

    vi gdm-password

    1
    2
    # 注释掉这一行,保存
    # auth required pam_succeed_if.so user != root quiet_success
  • 第四步:修改 .profile 文件

    gedit /root/.profile ,将文件末尾的 mesg n || true 这一行修改成 tty -s && mesg n || true, 保存。

  • 第五步:输入 reboot 重启系统,输入 root 用户名和密码,登录系统。

VM 虚拟机 Ubuntu 无法连接到网络,解决方案

VM 虚拟机 Ubuntu 无法连接到网络,解决方案

1、检查网络相关的管理器是否正常

​ 桌面右上角设置点开,查看 Ubuntu 网络设置中是否有联网的相关设置:【Wired】,没有的话需要恢复。

  • 解决办法

1
2
3
4
5
6
7
8
9
# 打开终端,依次输入下面命令执行
sudo service network-manager stop
sudo rm /var/lib/NetworkManager/NetworkManager.state
sudo service network-manager start

# 到这应该就能看到按钮了,如果还看不到接着执行下面的
# 将其中的 managed=false 改为 managed=true
sudo gedit /etc/NetWorkManager/NetworkManager.conf
sudo service network-manager restart

2、重置虚拟机网络配置

​ 关闭虚拟机,在 VM ware 的编辑菜单里面,点击 虚拟网络编辑器 ,然后依次点击:

  1. 【更改设置】

  2. 【还原默认设置】

  3. 【确定】

​ 然后将虚拟机 Ubuntu 的网络适配器设置中,设备状态的两个选项打勾,网络适配模式选择为【NAT 模式】,点击确定保存配置,然后启动虚拟机。正常情况到此就可以正常上网了。若还不行,可以尝试下面第三步。

3、 设置 Windows 主机共享网络适配器

​ 打开 Windows 的网络适配器面板,打开你的外部有网的那一个适配器的 属性 面板,选择 共享 TAB,然后选中【允许其他网络用户通过此计算机的 Internet 连接】,选择专有网络为 【VMnet8】,然后确定,重启虚拟机即可。

VM 虚拟机设置 Windows 共享文件夹

VM 虚拟机设置共享文件夹

1、VM ware 自带共享文件夹功能

​ 要使用此功能,一定要先安装 VMware tools 安装完毕一定要重启虚拟机。

  • 打开 虚拟机 –> 设置

  • 设置共享文件夹路径

    虚拟机设置 中,选择 选项 标签,再点击 共享文件夹,然后点击右侧的 总是启用 ,之后再点击 添加… ,添加 Windows 主机上的共享目录,后面就跟着提示一步步操作即可。

2、打开创建的虚拟机查看共享文件夹

​ root 用户组,进入目录 /mnt/hgfs/ 即可看见配置的 Windows 全局共享文件夹。如果没有该目录则是 VMware tools 没有安装,请先安装后重启,在从头操作一遍即可。

​ 若已经有 /mnt/hgfs/ 目录,但是里面没有刚刚配置的共享文件夹,可以尝试执行下面的命令来挂载共享目录:

1
sudo vmhgfs-fuse .host:/ /mnt/hgfs

​ 然后重新进入 /mnt/hgfs/ 即可。但是这样每次重启都要重新执行该命令才会显示,可以通过下面的方法解决:

1
gedit /etc/fstab

​ 在最后添加一行:

1
.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other 0 0

​ 重启虚拟机即可。

Java 原子性、可见性、有序性知识点

Java 原子性、可见性、有序性概览知识点

原子性

原子性是指一个操作或多个操作要么全部执行,且执行的过程不会被任何因素打断,要么就都不执行,同一时间只有一个线程对一个变量进行操作。在多线程情况下,每个线程的执行结果不受其他线程的干扰,比如说10个线程同时对同一个共享成员变量n++100次,如果n初始值为0,n最后的值应该是1000,所以说它们是互不干扰的,这就是传说的中的原子性。但n++并不是原子性的操作,要使用AtomicInteger保证原子性。

可见性

可见性是指某个线程修改了某一个共享变量的值,而其他线程是否可以看见该共享变量修改后的值。在单线程中肯定不会有这种问题,单线程读到的肯定都是最新的值,而在多线程编程中就不一定了。

每个线程都有自己的工作内存,线程先把共享变量的值从主内存读到工作内存,形成一个副本,当计算完后再把副本的值刷回主内存,从读取到最后刷回主内存这是一个过程,当还没刷回主内存的时候这时候对其他线程是不可见的,所以其他线程从主内存读到的值是修改之前的旧值。

像CPU的缓存优化、硬件优化、指令重排及对JVM编译器的优化,都会出现可见性的问题。

有序性

​ 我们都知道程序是按代码顺序执行的,对于单线程来说确实是如此,但在多线程情况下就不是如此了。为了优化程序执行和提高CPU的处理性能,JVM和操作系统都会对指令进行重排,也就说前面的代码并不一定都会在后面的代码前面执行,即后面的代码可能会插到前面的代码之前执行,只要不影响当前线程的执行结果。

​ 所以,指令重排只会保证当前线程执行结果一致,但指令重排后势必会影响多线程的执行结果。

​ 虽然重排序优化了性能,但也是会遵守一些规则的,并不能随便乱排序,只是重排序会影响多线程执行的结果。