解析Linux中sudo,su与su -的异同
在linux系统中,由于root的权限过大,一般情况都不使用它。只有在一些特殊情况下才采用登录root执行管理任务,一般情况下临时使用root权限多采用su和sudo命令。
前言
su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户tom登录的,但要添加用户任务,执行useradd ,tom用户没有这个权限,而这个权限恰恰由root所拥有。解决办法无法有两个,一是退出tom用户,重新以root用户登录,但这种办法并不是最好的;二是我们没有必要退出tom用户,可以用su来切换到root下进行添加用户的工作,等任务完成后再退出root。
我们可以看到当然通过su切换是一种比较好的办法;通过su可以在用户之间切换,而超级权限用户root向普通或虚拟用户切换不需要密码,而普通用户切换到其它任何用户都需要密码验证。
sudo
sudo是一种权限管理机制,依赖于/etc/sudoers,其定义了授权给哪个用户可以以管理员的身份能够执行什么样的管理命令;
格式:sudo -u USERNAME COMMAND
默认情况下,系统只有root用户可以执行sudo命令。需要root用户通过使用visudo命令编辑sudo的配置文件/etc/sudoers,才可以授权其他普通用户执行sudo命令。
su
su为switch user,即切换用户的简写。
格式为两种:
su -l USERNAME(-l为login,即登陆的简写)
su USERNAME
如果不指定USERNAME(用户名),默认即为root,所以切换到root的身份的命令即为:su -root或su -,su root 或su。
su USERNAME,与su - USERNAME的不同之处如下:
su - USERNAME切换用户后,同时切换到新用户的工作环境中。
su USERNAME切换用户后,不改变原用户的工作目录,及其他环境变量目录。
su -
su -,su -l或su --login 命令改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,LOGNAME。此外,也会变更PATH变量。用su -命令则默认转换成成root用户了。
而不带参数的“su命令”不会改变当前工作目录以及HOME,SHELL,USER,LOGNAME。只是拥有了root的权限而已。
注意:su -使用root的密码,而sudo su使用用户密码
- 通过上面的例子我们可以看出:使用”su”命令切换为root用户的时候,系统使用的还是之前的用户的环境变量。那么,这样就会导致一个问题–很多属于root的指令没法直接执行,想要执行的话,只能使用命令的绝对路径。
- 简单地说:”su”命令并没有真正切换到root用户;如果想要真正切换到root用户,应该使用”su -“命令。
C:\Program Files (x86)\Microchip\maXTouch Studio Lite\Release\BridgeClients
1、在串口中输入
su //切换用户 切换到root
echo "peripheral" > /sys/devices/soc/6a00000.ssusb/mode\n // host切换到 外部设备
/**************************************************************/
Host/Device switch command
echo "peripheral" > /sys/devices/soc/6a00000.ssusb/mode //Sets to periperhal mode
echo "host" > /sys/devices/soc/6a00000.ssusb/mode //Sets to host mode
echo "none" > /sys/devices/soc/6a00000.ssusb/mode //Sets to disconnected state
/*********************************************************/
2、在ADB中输入如下:
adb root
adb push D:\uidq1580\Desktop\20220520_IC321_tp\mxt-app\mxt-app-1.27-atmel\android\armeabi-v7a\mxt-app-PIE /data/local/tmp/mxt-app
adb shell chmod 777 /data/local/tmp/mxt-app
adb fowward tcp:4000 tcp:4000
adb shell /data/local/tmp/mxt-app -S p4000 -v1 -d sysfs:/sys/bus/i2c/devices/8-0049
(c) 2018 Microsoft Corporation。保留所有权利。
D:\uidq1580\work\09_IC321\22_HUT\IC321 Updata\adb>adb root
* daemon not running; starting now at tcp:5037
* daemon started successfully
D:\uidq1580\work\09_IC321\22_HUT\IC321 Updata\adb>adb root
D:\uidq1580\work\09_IC321\22_HUT\IC321 Updata\adb>adb shell
ic321:/ # exit
D:\uidq1580\work\09_IC321\22_HUT\IC321 Updata\adb>adb root
D:\uidq1580\work\09_IC321\22_HUT\IC321 Updata\adb>adb push D:\uidq1580\Desktop\20220520_IC321_tp\mxt-app\mxt-app-1.27-atmel\android\armeabi-v7a\mxt-app /data/local/tmp/
D:\uidq1580\Desktop\20220520_IC321_tp\mxt-app\mxt-app-1.27...\mxt-app: 1 file pushed. 4.7 MB/s (104716 bytes in 0.021s)
D:\uidq1580\work\09_IC321\22_HUT\IC321 Updata\adb>adb shell chmod 777 /data/local/tmp/mxt-app
D:\uidq1580\work\09_IC321\22_HUT\IC321 Updata\adb>adb forward tcp:4000 tcp:4000
D:\uidq1580\work\09_IC321\22_HUT\IC321 Updata\adb>adb shell /data/local/tmp/mxt-app -S p4000 -v1 -d sysfs:/sys/bus/i2c/devices/8-004a
"/data/local/tmp/mxt-app": error: Android 5.0 and later only support position-independent executables (-fPIE).
D:\uidq1580\work\09_IC321\22_HUT\IC321 Updata\adb>adb shell /data/local/tmp/mxt-app -S p4000 -v1 -d sysfs:/sys/bus/i2c/devices/8-0049
"/data/local/tmp/mxt-app": error: Android 5.0 and later only support position-independent executables (-fPIE).
D:\uidq1580\work\09_IC321\22_HUT\IC321 Updata\adb>adb push D:\uidq1580\Desktop\20220520_IC321_tp\mxt-app\mxt-app-1.27-atmel\android\armeabi-v7a\mxt-app-PIE /data/local/tmp/
D:\uidq1580\Desktop\20220520_IC321_tp\mxt-app\mxt-app-1.27-atmel\android\armeabi-v7a\mxt-app-PIE: 1 file pushed. 7.2 MB/s (104716 bytes in 0.014s)
D:\uidq1580\work\09_IC321\22_HUT\IC321 Updata\adb>adb push D:\uidq1580\Desktop\20220520_IC321_tp\mxt-app\mxt-app-1.27-atmel\android\armeabi-v7a\mxt-app-PIE /data/local/tmp/mxt-app
D:\uidq1580\Desktop\20220520_IC321_tp\mxt-app\mxt-app-1.27-atmel\android\armeabi-v7a\mxt-app-PIE: 1 file pushed. 7.2 MB/s (104716 bytes in 0.014s)
D:\uidq1580\work\09_IC321\22_HUT\IC321 Updata\adb>adb shell chmod 777 /data/local/tmp/mxt-app
D:\uidq1580\work\09_IC321\22_HUT\IC321 Updata\adb>adb forward tcp:4000 tcp:4000
D:\uidq1580\work\09_IC321\22_HUT\IC321 Updata\adb>adb shell /data/local/tmp/mxt-app -S p4000 -v1 -d sysfs:/sys/bus/i2c/devices/8-004a
Could not open /sys/bus/i2c/devices/8-004a/mem_access, error No such file or directory (2)
Failed to read ID information
D:\uidq1580\work\09_IC321\22_HUT\IC321 Updata\adb>adb shell
ic321:/ # cd /sys/bus/i2c/devices
ic321:/sys/bus/i2c/devices # ls
12-006c 7-003a 7-0068 8-0049 8-0062 8-0064 i2c-12 i2c-13 i2c-3 i2c-6 i2c-7 i2c-8
ic321:/sys/bus/i2c/devices # dmesg | grep mxt
1|ic321:/sys/bus/i2c/devices # cd 8-0049
ic321:/sys/bus/i2c/devices/8-0049 # ls
config_crc debug_info debug_notify driver hw_version link_status modalias object power subsystem touch_type update_cfg version_id
debug_enable debug_msg debug_v2_enable fw_version input mem_access name of_node self_test touch_enable uevent update_fw
ic321:/sys/bus/i2c/devices/8-0049 # cat name
maxtouch_a
ic321:/sys/bus/i2c/devices/8-0049 # /data/local/tmp/mxt-app -S p4000 -v1 -d sysfs:/sys/bus/i2c/devices/8-0049
AWAITING_CONNECTION
CONNECTED
/*********************************************************************************************/