Linux Shell编程第2章——Linux文件系统
用户和用户组管理
用户管理常用命令
用户的角色是通过UID来识别的,且UID是全局唯一的。Linux用户可以分为三类。
- root用户(超级用户):可以登录系统,系统唯一,可以操纵系统中的一切文件和执行一切命令,拥有最高权限。
- 虚拟用户(伪用户、假用户):不可以登录系统,系统必不可少,比如bin、daemon、adm、ftp、mail。这类用户是系统自身拥有的,非后来添加,不过我们也可以添加虚拟用户。
- 普通用户:可以登录系统,只能操纵用户根目录的内容,权限受到限制。这类用户由系统管理员添加。
Linux用户管理常用命令有:用户添加命令useradd或adduser、用户修改命令usermod、用户删除命令userdel及用户口令管理命令passwd。
1.用户添加——useradd或adduser
useradd和adduser是等价的,都用于创建新的用户账号。命令格式如下:
useradd [option] [username] #option为命令选项,username为用户名
执行该命令后,系统会做以下两件事
- 在/etc/passwd文件中添加一行记录。
- 在/home目录下创建新用户的主目录,并将/etc/skel目录中的文件复制到该目录中。
使用该命令后,新建的用户还无法登陆,需要用passwd命令设置口令后才能登陆。用户的UID和GID是自动生成的,将/etc/passwd文件中的UID加1得到新建用户的UID,将/etc/group文件中的GID加1得到新建用户的GID。
常用useradd或adduser命令选项及其意义
选项 | 意义 |
---|---|
-g [initial_grp | 指定新建用户的私有组。若未指定-g参数,则该用户私有组的名称与新建用户账号同名 |
-G [grp...] | 添加附属组 |
-D | 显示或设置useradd命令使用的默认值 |
-d [directory] | 指定用户主目录,如果此目录不存在,则同时使用-m选项来创建主目录 |
-m | 使用的目录若不存在,则自动建立 |
-u UID | 指定用户的用户号,若同时有-o选项,则可以重复使用其他用户的标识号。UID不能为负,预设为最小不得小于99而逐次增加。0~99一般保留给系统账号使用 |
$ sudo useradd wang #新建一个用户wang
[sudo] password for jerring:
$ tail -1 /etc/passwd #查看passwd文件中添加的用户账号信息
wang:x:1001:2221::/home/wang:
$ sudo tail -1 /etc/shadow #查看加密后的用户账号及密码信息
wang:!:17241:0:99999:7::: #“!”表示还未指定密码
2.用户修改——usermod
usermod命令可用来修改用户账号的各种属性,包括用户主目录、私有组、登录Shell等内容,命令格式如下:
usermod [option] [username] #option为命令选项,username为用户名
常用usermod命令选项及其意义
选项 | 意义 |
---|---|
-d [directory] | 修改用户登入时的目录 |
-e [days] | 修改账户的有效期限,days表示天数 |
-g [group] | 修改用户所属的群组 |
-l [login_name] | 修改用户登录时的名称为login_name |
-p [password] | 修改用户密码 |
-s [shell] | 指定用户登陆的Shell,若未设置,则选用系统默认的Shell |
需要注意的是,不建议使用usermod -p修改用户密码。因为如果用useradd命令,则显示在/etc/shadow文件中的是明文密码,建议使用passwd命令修改密码。
$ sudo usermod -p 123456 wang #修改用户wang的密码为123456
$ sudo tail -1 /etc/shadow #查看用户账号及密码信息
wang:123456:17241:0:99999:7::: #可以看到此时密码显示为123456,且是明文显示
还需注意,usermod不允许修改已登录用户的账号名称。当用户修改UID时,也必须确认这个用户没有正在运行的程序。
3.用户删除——userdel
命令格式如下:
userdel [option] [username] #option为命令选项,username为用户名
常用的命令选项是-r,即userdel -r username,删除用户的同时一并删除主目录和邮件池。
4.用户密码管理——passwd
用户账号刚创建时是没有密码的,会被系统锁定,必须为其指定密码才能使用,这是需要使用passwd命令。命令格式如下:
passwd [option] [username] #option为命令选项,username为用户名
常用的passwd选项及其意义
选项 | 意义 |
---|---|
-l | 锁定指定的账户 |
-u | 解锁被指定账户 |
-d | 删除指定账户的密码,需要有root权限 |
用户组管理常用命令
1.用户组添加——groupadd
命令格式如下:
groupadd [option] [groupname] #option为命令选项,groupname为用户名
常用groupadd命令选项及其意义
选项 | 意义 |
---|---|
-g GID | 为新组使用GID |
-o GID | 允许创建有重复 GID 的组 |
-r | 创建一个系统账户 |
-f | 如果组已经存在则成功退出,并且如果 GID 已经存在则取消 -g |
$ sudo groupadd -g 666 wangyq #新建一个用户组wangyq,GID为666
$ tail -1 /etc/group #查看信息
wangyq:x:666:
如果调用groupadd命令时不设置GID,如下面的命令:
groupadd group1
则在系统中增加的新组的组标识GID是当前最大组标识加1
2.用户组修改——groupmod
命令格式如下:
groupmod [option] [groupname] #option为命令选项,groupname为用户名
常用groupmod命令选项及其意义
选项 | 意义 |
---|---|
-g GID | 指定新的GID |
-o GID | 重复使用GID |
-n | 为群组改名 |
$ sudo groupmod -g 555 wangyq #修改GID为555
$ tail -1 /etc/group #查看信息
wangyq:x:555:
3.用户组删除——groupdel
命令格式如下:
groupdel [option] [groupname] #option为命令选项,groupname为用户名
$ sudo groupdel wangyq #删除用户组wangyq
$ tail -1 /etc/group
guest-zlp0vy:x:999: #用户组wangyq已被删除
文件和目录操作
文件操作常用命令
1.文件清单——ls
ls是英文单词list的简写,作用是列出目录下的文件和子目录的信息。命令格式如下:
ls [option] [file or directory]
如果[file or directory]为目录,则ls命令列出该目录下的子目录和文件;如果[file or directory]为文件,则ls命令将列出文件名及相关信息。默认情况下,输出条目按字母顺序排序。当未给出目录名或是文件名时,就显示当前目录的信息。下面是常用ls命令选项及其意义
选项 | 意义 |
---|---|
-a | 显示指定目录下所有子目录和文件,包括隐藏文件 |
-A | 显示指定目录下所有子目录和文件,包括隐藏文件,但不包含“.”和“..” |
-b | 对文件名中不可显示字符用八进制逃逸字符显示 |
-c | 按文件的修改时间排序 |
-C | 分成多列显示各项 |
-d | 如果参数是目录,只显示其名称而不显示其下的各文件。往往与l选项一起使用,以得到目录的详细信息 |
-f | 不排序,该选项使ls选项失效,使用aU选项有效 |
-i | 在输出的第一列显示文件的i节点号 |
-l | 显示文件详细信息。每行的信息依次是:文件类型与权限、链接数、文件属主、文件属组、文件大小、最近修改的时间、名字 |
-L | 若指定的文件是一个符号链接文件,则显示链接所指向的文件 |
-m | 输出按字符流格式,文件跨页显示,以逗号分开 |
-n | 输出格式与l选项相同,只不过在输出文件属主和属组用UID和GID表示 |
-o | 输出格式与l选项相同,只是不显示用户属组信息 |
-p | 在目录后面加上“/” |
-q | 将文件名中的不可显示字符用“?”代替 |
-r | 逆序显示 |
-R | 递归地显示指定目录的各个子目录中的文件 |
-s | 给出每个目录项所用的块数,包括间接快 |
-t | 按修改时间排序,最近修改排在前面 |
-u | 按访问时间排序,最近访问排在前面 |
-x | 按行显示信息 |
$ ls -l #显示当前目录下文件和目录的详细信息
-rw-rw-r-- 1 jerring jerring 1829 3月 16 13:31 ch01.md
-rw-rw-r-- 1 jerring jerring 5655 3月 16 23:00 ch02.md
-rwxrw-r-- 1 jerring jerring 21 3月 14 22:33 log.sh
2.文件复制——cp
cp命令把文件复制到目标文件或把多个文件复制到目标目录中。命令格式如下:
cp [option] [source] [destination] #option为命令选项,source为源文件,destination为目标目录或目标文件
常见cp命令选项及其意义
选项 | 意义 |
---|---|
-a | 通常在复制目录时使用,它保留链接、文件属性,递归地复制目录 |
-d | 复制时保留链接 |
-i | 在覆盖目标文件之前将给出提示要求用户确认。 |
-p | 不仅复制源文件,还复制修改时间和访问权限 |
-r | 递归复制 |
-l | 不复制,只是链接文件 |
3.文件移动或重命名——mv
mv命令将文件从一个位置移动到另一个位置,同时可移动多个文件。mv命令还可用于重命名,命令格式如下:
mv [option] [source] [destination] #option为命令选项,source为源文件,destination为目标目录或目标文件
如果[destination]类型是文件时,mv命令将所给源文件或目录重命名为给定的目标文件,此时,源文件只能有一个(也可以是源目录);如果[destination]是已存在的目录名称,源文件或目录参数有多个,mv命令将各参数指定的源文件全部移至目标目录中。在跨文件系统移动时,mv先复制,再将原有文件删除,从而导致该文件的链接丢失。常用mv命令选项及其意义如下:
选项 | 意义 |
---|---|
-i | 交互方式操作。如果mv操作将覆盖已存在的文件时,则系统会询问是否覆盖 |
-f | 强制操作。在mv将覆盖已存在的文件时不给出提示,直接覆盖。使用此选项,i选项将不起作用 |
-p | 移动时保持权限 |
4.文件删除——rm
命令格式如下:
rm [option] [fileName or directoryName] #option为命令选项,fileName or directoryName为文件名或目录名
常用rm命令选项及其意义如下
选项 | 意义 |
---|---|
-f | 忽略不存在的文件,从不给出提示 |
-r | 递归删除 |
-i | 交互式删除,即删除前会提示是否删除 |
-d | 删除空目录 |
运用rm命令删除文件后文件是不能恢复的。如果不确定文件是否应被删除,可以加上-i选项,这样每次删除前都会给出提示。删除目录及目录里的内容加上-r,这样可以递归删除。此时也可加上-i选项,即rm -ri directoryName
,这样在删除每个文件或目录前均会提示,避免删错。如果很明确整个目录需要被删除,可以加上-f,即rm -rf directoryName
。
目录操作常用命令
1.目录创建——mkdir
命令格式如下:
mkdir [option] [directoryName] #option为命令选项,directoryName为需要创建的目录名称
运用mkdir命令创建目录时,要求创建目录的用户在当前目录中(directoryName的父目录中)具有写权限,并且directoryName不能是当前目录中已有的目录或文件名称。常用的mkdir命令选项及其意义如下:
选项 | 意义 |
---|---|
-m | 对新建目录设置存取权限 |
-p | directoryName是一个路径名称,若路径中的某些目录不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录 |
-v | 每次创建新目录都显示信息 |
$ ls
ch01.md ch02.md log.sh
$ mkdir -m 777 tsk #创建目录,并指定权限
$ ls -l #显示信息
总用量 24
-rw-rw-r-- 1 jerring jerring 1829 3月 16 13:31 ch01.md
-rw-rw-r-- 1 jerring jerring 8671 3月 17 20:29 ch02.md
-rwxrw-r-- 1 jerring jerring 21 3月 14 22:33 log.sh
drwxrwxrwx 2 jerring jerring 4096 3月 18 10:05 tsk
上面的例子创建了一个名为tsk的目录,所有的用户都具有rwx权限(读、写、执行权限)
$ mkdir testdir/test #testdir目录不存在,不带-p选项将报错
mkdir: 无法创建目录"testdir/test": 没有那个文件或目录
$ mkdir -p testdir/test #带上-p选项成功创建testdir目录及其子目录test
$ ls
ch01.md ch02.md log.sh testdir tsk
$ cd testdir
$ ls
test
在上例中,由于testdir目录是不存在的,不带-p选项创建testdir/test时产生错误;当带上-p选项后,mkdir能够成功创建testdir目录及其子目录test。
2.目录删除——rmdir
rm命令可以删除一个或多个目录,在删除目录时,目录必须为空,且必须拥有该目录的父目录的写权限。命令格式如下:
rmdir [option] [directoryName]
常用的rmdir命令选项为-p,即删除子目录时,若父目录为空,父目录也会被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统会在标准输出上显示相应的信息。rmdir -p a/b/c
相当于rmdir a/b/c a/b a
。由于rmdir只能删除目录中只包含空子目录的目录,如果目录中存在文件,则使用rmdir
和rmdir -p
命令是无法删除该目录的,需要使用rm -r
命令。
3.目录切换——cd
命令格式如下:
cd [directoryName]
该命令用于变换当前工作目录。其中,directoryName可以为绝对路径,也可以为相对路径。常用cd命令如下:
命令 | 说明 |
---|---|
cd | 切换到登录目录 |
cd ~ | 切换到登录目录 |
cd / | 切换到根目录 |
cd /root | 切换到root用户(超级用户)的主目录,只有root用户才能访问该目录 |
cd /home | 切换到home目录,home目录通常为用户登录目录的上一级目录 |
cd .. | 切换到上一级目录 |
cd - | 切换到上次的工作目录 |
在目录切换过程中,有三个比较重要的字符:.
..
~
。.
表示当前目录,..
当前目录的上一级目录,~
表示用户的主目录。
文件和目录权限管理
Linux系统中的每个文件和目录都有访问许可权限,以此确定用户能以何种方式对文件和目录进行操作。文件或目录的访问权限分为读、写、可执行三种。文件或目录被创建时,所有者自动拥有对该文件或目录的读写权限(对目录还有可执行权限),以便用户进行阅读和修改。用户也可根据需要把访问权限设置为任何组合。
有三种不同类型的用户可对文件或目录进行访问:文件所有者、同组用户和其他用户。文件所有者一般是文件的创建者,他可以允许同组用户访问文件,还可以将文件的访问权限赋予系统中的其他用户,从而使系统中每一位用户都能访问该所有者拥有的文件或目录。
每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限,与属主同组的用户的读、写和执行权限,以及系统中其他用户的读、写和执行权限。
$ ls -l testdir
总用量 4
-rw-rw-r-- 1 jerring jerring 0 3月 18 10:36 data
drwxrwxr-x 2 jerring jerring 4096 3月 18 10:54 test
上例中,用ls命令显示目录下详细信息。第一个字符为-
代表文件,第一个字符为d
代表目录。权限字段r
代表可读,w
代表可写,x
代表可执行。文件和目录都有三组权限。以data文件为例,第1组是rw,表示文件属主具有读写权限;第2组是rw,表示文件属主的同组用户具有读写权限;第3组是r,表示其他用户只有读的权限。test目录也是类似分析。
文件和目录权限管理依赖于两个重要的命令:chmod和chown。
1.文件(目录)权限更改——chmod
chmod命令用于更改文件或目录的访问权限,它有两种用法:一种是包含字母和操作符表达式的文字设定法,另一种是包含数字的数字设定法。
文字设定法的格式如下:
chmod [userType] [signal] [type] [fileName]
chmod命令的三种参数类型如下:
用户类型(userType) | 数学符号(signal) | 文件类型(type) |
---|---|---|
u 表示用户(user),即文件(目录)属主 | + 添加 | r 可读 |
g 表示同组(group),即与文件(目录)属主同组的用户 | - 取消某个权限 | w 可写 |
o 表示其他(others)用户 | = 清空权限后赋予给定权限 | x 可执行 |
a 表示所有(all)用户 |
下面运用chmod命令改变data文件的权限,将data文件的权限改为:属主可读可写可执行,同组用户和其他用户只可读,不能写和执行。
$ ls -l data #查看权限信息
-rw-rw-r-- 1 jerring jerring 0 3月 18 10:36 data
$ chmod u+x,g-w data #属主添加可执行权限,同组用户取消可写权限
$ ls -l data #再次查看权限信息
-rwxr--r-- 1 jerring jerring 0 3月 18 10:36 data
文字设定法我们已经知道了,那么什么是数字设定法呢?首先需要知道数字表示属性的含义,用3个二进制位表示文件权限,即???
,从左到右依次表示可读可写可执行,当具有某个权限时,相应位为1。因此可用1个八进制数字表示可读可写可执行权限,可用3个八进制数字表示属主、同组用户、其他用户的权限,其顺序为u、g、o。
如刚才的chmod u+x,g-w data
命令替换为chmod 744 data
可以达到同样的效果。下面新建一个data2文件演示一下:
$ touch data2 #新建一个文件data2
$ ls -l data2
-rw-rw-r-- 1 jerring jerring 0 3月 18 13:14 data2
$ chmod 744 data2
ls -l data2
-rwxr--r-- 1 jerring jerring 0 3月 18 13:14 data2
2.文件(目录)属主更改——chown
利用chown命令可以改变文件或目录的属主。一般而言,这个指令只有系统管理员(root)才能使用,一般使用者没有权限改变别人的文件或目录属主,也没有权限将自己的文件属主更改为他人。它的命令格式如下:
chown [option] [owner] [fileName]
其中,option为命令选项,owner为改变后的用户属主,fileName为需要改变属主的文件或目录。常用chown命令选项及其意义如下:
选项 | 意义 |
---|---|
-c | 若该文件或目录属主确实已更改,显示更改动作 |
-h | 改变符号链接文件的属主时不影响该链接所指向的目标文件 |
-f | 若该文件或目录属主无法被更改也不要显示错误信息 |
-v | 显示属主变更的详细资料 |
-R | 对目录下的所有文件和子目录进行相同的属主变更(即递归地变更) |
3.特殊权限——SUID和SGID
除了上面提到的基本权限以外,还有所谓的特殊权限存在。用户若无特殊需要,不应该打开这些特权,避免系统出现严重漏洞。但有时却需要没有被授权的用户完成某项任务,例如passwd命令,它允许用户改变密码,这就要求更改/etc/passwd文件,然而系统管理员决不允许普通用户拥有直接更改这个文件的权利。为了解决权限问题,SUID、SGID、SBIT应运而生,下面介绍这三个特殊权限的说明。
- SUID:当一个设置了SUID位的可执行文件被执行时,执行者以文件所有者的身份运行该文件。如果所有者是root,那么执行者在执行文件时临时拥有root权限。
- SGID:当一个设置了SGID位的可执行文件被执行时,执行者在执行过程中会获得该文件用户组的权限(相当于执行者临时加入了文件的用户组)。若一个目录设置了SGID,则所有被复制到这个目录下的文件,其用户组都会被设置为和这个目录的用户组相同,除非在复制文件时加上-p选项,才能保留原来的设置。
- SBIT,只针对目录有效,当用户对目录拥有wx权限时,用户在该目录创建的文件或目录,只有自己与root才可以删除。最具有代表性的例子就是/tmp目录,任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与root能够删除自己的目录或文件。 注意,SBIT对文件不起作用。
和之前所说的rwx权限类似,也有字符和数字两种命令格式。
#字符形式
chmod u+s [fileName] #设置SUID
chmod u-s [fileName] #去除SUID
chmod g+s [fileName] #设置SGID
chmod g-s [fileName] #去除SGID
chmod u+t [fileName] #设置SBIT
chmod u-t [fileName] #去除SBIT
#数字形式
chmod ???? [fileName] #?代表八进制数字。第一个?表示这三个特殊权限,即代表的三位从高到低为SUID、SGID、SBIT。后面三个?代表普通权限。
#如果希望查找系统中所有具有特殊权限的文件,则可以通过命令find / -perm +7000 解决。
查看特殊权限的方法就是普通的ls命令:
- SUID会在所属用户权限本应是x的地方显示s
- SGID会在所属用户组权限本应是x的地方显示s
- SBIT会在其它用户权限本应是x的地方显示t
上面的规则适用于文件或目录已被赋予x
权限。如果首先没有被赋予x权限,那么这个特殊的权限就相当于一个空的权限,没有意义。相应的地方字母会变成大写,即s
变为S
,t
变为T
。如下例所示:
$ ls -l
总用量 0
-rwxr--r-- 1 jerring jerring 0 3月 18 10:36 data
-rwxr--r-- 1 jerring jerring 0 3月 18 13:14 data2
$ chmod u+s data #data设置SUID
$ ls -l
总用量 0
-rwsr--r-- 1 jerring jerring 0 3月 18 10:36 data
-rwxr--r-- 1 jerring jerring 0 3月 18 13:14 data2
$ chmod g+s data #data设置SGID
$ ls -l
总用量 0
-rwsr-Sr-- 1 jerring jerring 0 3月 18 10:36 data
-rwxr--r-- 1 jerring jerring 0 3月 18 13:14 data2
$ chmod o+x data2 #data2添加x权限
$ ls -l
总用量 0
-rwsr-Sr-- 1 jerring jerring 0 3月 18 10:36 data
-rwxr--r-x 1 jerring jerring 0 3月 18 13:14 data2
$ chmod o+t data2 #data2设置SBIT
$ ls -l
-rwsr-Sr-- 1 jerring jerring 0 3月 18 10:36 data
-rwxr--r-t 1 jerring jerring 0 3月 18 13:14 data2
$ chmod o+t data #data设置SBIT
$ ls -l
总用量 0
-rwsr-Sr-T 1 jerring jerring 0 3月 18 10:36 data
-rwxr--r-t 1 jerring jerring 0 3月 18 13:14 data2
文件查找——find
find命令是Linux系统查找文件的命令,格式如下:
find [路径] [选项] [操作]
路径是find命令所查找的目录路径。例如,用.
表示当前目录,用/
表示系统根目录。选项用于指定查找条件,可以指定按照文件属主、更改时间、文件类型等条件来查找。find命令的操作名称及其意义如下:
操作名称 | 意义 |
---|---|
将匹配到的文件输出到标准输出 | |
exec | 对匹配的文件执行该参数所给出的Shell命令。相应命令的形式为command {} \; |
ok | 和-exec的作用相同,只不过以一种更安全的方式来执行参数给出的Shell命令:对于每一个匹配项,都会给出提示,让用户来确定是否执行命令 |
两个详细讲解find命令的例子如下:
Linux Shell编程第2章——Linux文件系统的更多相关文章
- Linux Shell编程第5章——文件的排序、合并和分割
目录 sort命令 sort命令的基本用法 uniq命令 join命令 cut命令 paste命令 split命令 tr命令 tar命令 sort命令 sort命令是Linux系统一种排序工具,它将输 ...
- Linux Shell编程第3章——正则表达式
目录 正则表达式基础 正则表达式的扩展 通配 grep命令 正则表达式基础 Linux Shell以字符串作为表达式向系统传达意思.元字符(Metacharacters)是用来阐述字符表达式意义的字符 ...
- Linux Shell编程第1章——Shell脚本编程概述
目录 Linux和Shell简介 Linux是一套可免费使用和自由传播的类UNIX操作系统.Shell是一种具备特殊功能的程序,它提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令,并把它送 ...
- Linux Shell编程第4章——sed和awk
目录 sed命令基本用法 sed命令实例 命令选项 文本定位 编辑命令 awk编程模型 awk编程实例 1.awk模式匹配 2.记录和域 3.关系和布尔运算符 4.表达式 5.系统变量 6.格式化输出 ...
- Linux Shell编程与编辑器使用详解
<Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...
- linux shell编程总结
linux shell编程总结 本周学习了unix/linux shell编程,参考的是<LINUX与UNIX Shell 编程指南>,David Tansley著:徐焱,张春萌等译,由机 ...
- linux —— shell 编程(文本处理)
导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed aw ...
- linux —— shell 编程(编程语法)
导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 再识变量 函数 条件语句 循环语句 ...
- Linux Shell编程参考大全
本文记录Linux Shell编程中常用基本知识,方便快速入门以及查询使用. 本文主要分为以下几个部分: 一.Shell中的变量 任何编程语言中,有关变量的定义,作用范围,赋值等都是最最基础的知识. ...
随机推荐
- 最纯粹的直播技术实战02-Camera的处理以及推流
最纯粹的直播技术实战02-Camera的处理以及推流 最新实战教程.Android自己主动化刷量.作弊与防作弊.案例:刷友盟统计.批量注冊苹果帐号 这个系列的文章将会研究最纯粹的Android直播的实 ...
- idea传入HttpServletRequest时显示cannot resolve symbol的问题
在使用idea ide的时候,在控制器中我需要获取HttpServletRequest这个request对象,编译时出现cannot resolve symbol的问题,然后网上查找资料,这里记录一下 ...
- JS 怎么刷新当前页面
reload 方法,该方法强迫浏览器刷新当前页面. 语法:location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当前页 ...
- 【转】移动App测试中的最佳做法
一说起软件测试,测试员想到肯定是去检查文件,功能,API,性能并确定软件是否安全,以及关于软件特定部分的其他事项.但是对于移动测试,测试员不得不基于用户移动使用模式考虑移动相关的功能. 本文是基于我的 ...
- win10执行shell脚本
我们在win10如何执行以.sh文件的脚本呢? 开发步骤:1.写脚本b2q_goods.sh #!/bin/bashsql="select * from b2q.goods where go ...
- html 调用ActiveX
html网页调用ActiveX控件时,要获取到ActiveX的ClassID,这个ClassID是注册到系统里的,而不是工程中的uuid,(下图为uuid). 正确的是在注册表的HKEY_CLASSE ...
- 【vijos】1768 顺序对的值(特殊的技巧)
https://vijos.org/p/1768 之前不知道为什么,我yy了一个n^2的做法,但是没能写出来..sad 然后看了题解才发现这题好神.. 为什么一定要照着题意找两个点然后算呢?这就是问题 ...
- Android 消息处理源代码分析(2)
Android 消息处理源代码分析(1)点击打开链接 继续接着分析剩下的类文件 Looper.java public final class Looper { final MessageQueue m ...
- Dependency Property 依赖属性
依赖属性就是一种可以自己没有值,并能通过使用Binding从数据源获得值(依赖在别人身上)的属性.拥有依赖属性的对象称为“依赖对象”. WPF开发中,必须使用依赖对象作为依赖属性的宿主,使二者结合起来 ...
- SurvivalShooter学习笔记(三.敌人移动)
1.敌人和玩家若存活,敌人始终朝着玩家所在位置移动,所以要给玩家物体一个Tag:Player从而找到玩家 2.敌人的自动寻路使用Unity自带的NavMeshAgent寻路组件寻路,要先把场景中不动的 ...