1、在 Linux 这个系统当中,几乎所有的硬件装置文件都在/dev 这个目录下。
2、几个重要的存储文件
1)、 /etc/passwad :所有的系统上的账号与一般身份使用者,还有那个 root 的相
关信息
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
......
passwd文件由许多条记录组成,每条记录占一行,记录了一个用户帐号的所有信息。
每条记录由7个字段组
成,字段间用冒号“:”隔开,其格式如下:
username:password:User ID:Group ID:comment:home directory:shell
值得一提的
password 该帐号的密码是经过加密处理的。daemon、bin等,这些帐号有着特殊的用途,一般用
于进行系统管理。这些帐号的口令大部分用(x)号表示,代表它们不能在登录时使用。
2)、/etc/shadow:存放账户的真是密码,只有root用户才能看
whoopsie:*:16365:0:99999:7:::
avahi:*:16365:0:99999:7:::
lightdm:*:16365:0:99999:7:::
pulse:*:16365:0:99999:7:::
colord:*:16365:0:99999:7:::
hplip:*:16365:0:99999:7:::
joey:$6$enM1lo0k$xWyqfa5UhlDMQuaANeeiBUS.d0cqheaK0UOd4d4Iz1sEgPQr86QIc9QrHuMXBMS8rV
pz/zQTGgQSrpvc6SNOt/:17261
:0:99999:7:::
可以看到都是经过加密的。它的每个条目有7个域,分别是名字:密码:用户id:组id:用户信息:主目
录:shell
3)、/etc/group:用户组的配置文件,内容包括用户和用户组,并且能显示出用户是归属哪个用户组或哪
几个用户组,因为一个用户可以归属一个或多个不同的用户组。
root:x:0:
bluetooth:x:121:
pulse:x:122:
pulse-access:x:123:
colord:x:124:
joey:x:1000:
sambashare:x:125:joey
格式:
group_name:passwd:GID:user_list.
passwd密码也是加密的;
user_list
每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名;
新增加一个用户并将其列入一个已有的用户组中需要用到 useradd 命令。如果还没有这个用户组,可以先创建该用户组
useradd -G {group-name} username
root@Joey:/etc# cat group | grep "joey"
joey:x:1000:zhaoyuan
root@Joey:/etc# useradd -G joey liuyu
root@Joey:/etc# cat group | grep "joey"
joey:x:1000:zhaoyuan,liuyu
3、切换用户的命令
su/su - 用户名。 需要密码的输入密码即可。如果超级权限用户root向普通或虚拟用户切换不需要密码.
root@Joey:/etc# su joey
joey@Joey:/etc$ su sambashare
No passwd entry for user 'sambashare'
joey@Joey:/etc$ su
Password:
root@Joey:/etc#
root@Joey:/etc# su - joey
joey@Joey:~$
su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;
而后者连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误
sudo 表示获取临时的root权限命令,命令执行完成后,直接退回到当前用户。
4、Linux中各个类型的文件的详解。
-rw-r--r-- 1 xp022430 domain_users 16246 May 15 10:32 AndroidManifest.xml
-rw-r--r-- 1 xp022430 domain_users 1010 May 12 15:27 Android.mk
drwxr-xr-x 2 xp022430 domain_users 4096 May 12 15:27 assets
/dev下面的
crw------- 1 root root 10, 234 May 18 16:50 btrfs-control
drwxr-xr-x 3 root root 60 May 18 16:50 bus
lrwxrwxrwx 1 root root 3 May 18 16:50 cdrom -> sr0
brw-rw---- 1 root disk 7, 0 May 18 16:50 loop0
brw-rw---- 1 root disk 7, 1 May 18 16:50 loop1
第一 栏
:
当是[ d ]则是目录。
当是[ - ]则是文件。
当是[ l ]则表示为连结档(link file),类似 Windows 系统底下的快捷方式啦
当是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
区块(block)设备档,就是一些
储存数据, 以提供系统随机存取的接口设备
当是[ c ]则表示为装置文件里面的串行端口设备,如键盘、鼠标等
字符(character)设备文件。
这些设备
的特色就是『一次性读取』的,不能够截断输出。 举例来说,你不可能让鼠标跳到
另一个画面。
当是[ s ]则表示为资料接口文件(sockets)。
最常在/run 或/tmp 这些个目录中看到这种文件类型了。
当是[ p ]则表示为数据输送文件(FIFO, pipe):
FIFO 也是一种特殊的文件类型,他主要的目的在解决多个
程序同时存取一个文件所造成的错误问题。 FIFO
是 first-in-first-out 的缩写。
第二栏:
表示有多少档名连结到此节点(i-node):
每个文件都会将他的权限与属性记录到文件系统的 i-node 中,
不过,我们使用的目录树却是使用文件
名来记录, 因此每个档名就会连结到一个 i-node 啰!这个属性记录的,
就是有多少不同的档名连结
到相同的一个 i-node 号码去就是了。
第三栏:
表示这个文件(或目录)的拥有者账号。
第四栏:
表示这个文件的所属群组
第五栏:为这个文件的容量大小,默认单位为 bytes;
第六栏:为这个文件的建档日期或者是最近的修改日期:
第七栏:为这个文件的档名,
这个字段就是档名了。比较特殊的是:如果档名之前多一个『 . 』,则代表这个
文件为『隐藏档』。
5、文件和目录的权限的含义。
目录与文件的权限意义并不相同,这是因为目录与文件所记录的数据内容不相同所致。(按照Linux里面都因
该说是文件,目录是目录类型的文件)。
1)、对于文件里面存储的是数据所以:
r: 代表当前文件可以被读
w:代表当前文件可以被修改,一定要注意它控制不了这个文件是否能被删除。
还有个问题,你想修
改,必须有r不然丫的根本打不开!
x:代表当前文件可以被执行,就是运行。在windows下通过后缀.exe等来判断的这个是通过权限。
2)、存放的文件或者目录名列表结构。
r:代表可以读去当前目录下都有哪些内容,就是 ls可以显示。
如下没有可读权限的时候,
可以看到什么也不显示了。
d--x--x--x 2 xp022430 domain_users 4096 May 26 15:10 TestMode
cnbjlx24729:/media/$ cd TestMode/
cnbjlx24729:/media/TestMode$ ls
ls: cannot open directory .: Permission denied
w:代表可以去修改当前目录下的文件结构,如:新建文件/目录、删除文件/目录(和文件本身的权限
无关)、重命名等等
dr-xr-xr-x 2 xp022430 domain_users 4096 May 26 15:10 TestMode
cnbjlx24729:/media/TestMode$ rm TestFile.txt
rm: cannot remove ‘TestFile.txt’: Permission denied
即使文件本身就有w权限
cnbjlx24729:/media/TestMode$ ls -l
-rwxrwxrwx 1 xp022430 domain_users 19 May 26 15:10 TestFile.txt
cnbjlx24729:/media/TestMode$ rm TestFile.txt
rm: cannot remove ‘TestFile.txt’: Permission denied
x:代表的是用户能否进入该目录成为工作目录,说白了就是能不能进去这个文件。
dr--r--r-- 2 xp022430 domain_users 4096 May 26 15:10 TestMode
drwxr-xr-x 3 xp022430 domain_users 4096 May 12 15:27 tests
cnbjlx24729:/media/$ cd TestMode/
bash: cd: TestMode/: Permission denied
注意root用户其实是不受任何权限影响的即使比如root是所有者,你把所有者的权限也改为不可r,不起作
用的。
综上:要开放目录给任何人浏览时,应该至少也要给予 r 及 x 的权限,但 w 权限不可随便给!因为这样它就
可以删除你的文件了,即使不能修改文件内部的内容。
6、修改群组、所有者、权限。
1)、chgrp :改变文件所属群组,注意只有root用户才可以使用
格式:chgrp
(-R)
groupname filename
-R递归
root@Joey:/home/joey/Desktop# ls -l
drwxrwxr-x 2 joey joey 4096 5月 31 21:47 Test.txt
root@Joey:/home/joey/Desktop# chgrp zhaoyuan haha.txt
root@Joey:/home/joey/Desktop# ls -l
-rw-rw-r-- 1 joey zhaoyuan 7 5月 31 21:53 haha.txt
2)、
chown :改变文件拥有者,也是root用户才可以哦。
chown [-R] 用户名称:[组名] 文件 组名字可以省略。
root@Joey:/home/joey/Desktop# ls -l
-rw-rw-r-- 1 joey zhaoyuan 7 5月 31 21:53 haha.txt
root@Joey:/home/joey/Desktop# chown zhaoyuan haha.txt
root@Joey:/home/joey/Desktop# ls -l
-rw-rw-r-- 1 zhaoyuan zhaoyuan 7 5月 31 21:53 haha.txt
3)、chmod :改变文件的权限, SUID, SGID, SBIT 等等的特性,root用户使用。
chmod两种方式:(此处不介绍文件的权限描述位)
a、数字:
r w x 分别对应 4 2 1 ,也好记就是111二进制这种形式换算出来的数。
例子:chmod 754(权限) filename
b、字母:
u-----user, g-----group, o-----others,a------all。
+、-、=:分别对应宇添加、去掉某某权限。
例子:chmod u+x haha.txt 为文件所有者添加x权限
root@Joey:/home/joey/Desktop# ls -l
-rw-rw-r-- 1 zhaoyuan zhaoyuan 7 5月 31 21:53 haha.txt
root@Joey:/home/joey/Desktop# chmod u+x haha.txt
root@Joey:/home/joey/Desktop# ls -l
-rwxrw-r-- 1 zhaoyuan zhaoyuan 7 5月 31 21:53 haha.txt
root@Joey:/home/joey/Desktop# chmod a+x haha.txt
root@Joey:/home/joey/Desktop# ls -l
-rwxrwxr-x 1 zhaoyuan zhaoyuan 7 5月 31 21:53 haha.txt
7、Linux中的文件后缀。
基本上,Linux 的文件是没有所谓的扩展名的,我们刚刚就谈过,一个 Linux 文件能不能被执行,
与他的第一栏的
十个属性有关, 与文件名根本一点关系也没有。
还有就算具有x可执行权限,但也不一定能执行,具有『可执行的权限』以及『具有可执行的程序代码』是
两回事!这个 x 代表这个文件具有可执行的能力, 但是
能不能执行成功,当然就得要看该文件的内容。
Linux 系统上的文件名真的只是让你了解该文件可能的用途而已, 真正的执行与否仍然需
要权限的规范才行!
*.sh : 脚本或批处理文件 (scripts),因为批处理文件为使用 shell 写成的,所以扩展名就编成 .sh 啰;
*Z, *.tar, *.tar.gz, *.zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等等的,由于不
同的压缩软件,而取其相关的扩展名
*.html, *.php:网页相关文件,分别代表 HTML 语法与 PHP 语法的网页文件。
8、Linux命令小发现。
发现好多Linux命令都是 命令
来源处 目的地。
如:cp 来源文件 目标文件。
还有一个小技巧。当一个命令你不知道格式和参数的时候后 命令 --help。
如:ls --help
9、Linux系统的目录配置。
Filesystem Hierarchy Standard (FHS)标准 FHS 的重点在于规范每个特定的目录下应该要放置什么样子的数
据
而已。 这样做好处非常多,因为 Linux 操作系统就能够在既有的面貌下(目录架构不变)发展出开发者
想要的独
特风格。
FHS 所定义的三层主目录为:/, /var, /usr 三层而已。注意 usr是 Unix Software Resource 的缩写, 也就是
『Unix 操
作系统软件资源』所放置的目录,而不是users。
常见的系统目录。
/etc/, /boot, /usr/bin, /bin, /usr/sbin, /sbin, /dev, /var/log, /run
/etc/:几乎系统的所有配置文件案均在此,尤其 passwd,shadow
/boot:开机配置文件,也是预设摆放核心 vmlinuz 的地方
/usr/bin, /bin:一般执行档摆放的地方
/usr/sbin, /sbin:系统管理员常用指令集
/dev:摆放所有系统装置文件的目录
/var/log:摆放系统注册表文件的地方
10、特殊的几个符号代表的路径。
/ 代表根目录
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录 (上一个工作目录和上层目录是有区别的,如下)
cnbjlx24729:/media/xp022430/source/projects/pre-o-yoshino2$ cd frameworks/base/core/
cnbjlx24729:/media/xp022430/source/projects/pre-o-yoshino2/frameworks/base/core$ cd -
/media/xp022430/source/projects/pre-o-yoshino2
cnbjlx24729:/media/xp022430/source/projects/pre-o-yoshino2$
就到了你上次所在的目录
再比如:你好可以实现往前跳。
cnbjlx24729:~$ cd -
/media/xp022430/source/projects/pre-o-yoshino2/frameworks/base
cnbjlx24729:/media/xp022430/source/projects/pre-o-yoshino2/frameworks/base
~ 代表『目前用户身份』所在的家目录
~account 代表 account 这个用户的家目录(account 是个账号名称)
根目录的当前目录和上层目录是一样的
xp022430@cnbjlx24729:/$ ls -la
total 116
drwxr-xr-x 26 root root 4096 May 17 07:57 .
drwxr-xr-x 26 root root 4096 May 17 07:57 ..
drwxr-xr-x 2 root root 4096 May 18 07:56 bin
可以看到权限属性一模一样,它们其实是指向一块的。
一个查看路径的命令 pwd:显示当前目录 显示的绝对路径。
pwd [-P]
-P:显示出确实的路径,而非使用链接 (link) 路径。有时候是连接指向的,就直接把链接指向的那
个实际的地址显示。
root@Joey:/home/joey/Desktop# pwd
/home/joey/Desktop
如果仅输入 cd 时,代表的就
是『 cd ~ 』的意思~ 亦即是会回到自己的家目录。
11、几个常用的命令的缩写。
ls 是 list
pwd 是 print working directory
cd 是 change directory
chgrp 是 change group
chown 是 change owner
chmod 是 change mode
cp 是 copy
mv 是 move
rm 是 remove
12、mkdir、cp
mkdir (make directory) 创建新的目录.目录得一层一层的建立才行。
但是可通过添加参数-p(感觉应该是
patch的缩写吧)慎用,不然万一拼写错误,很乱。参数
-m 来强制给予一
个新的目录相关的权限, 例如上表当中,
我们给予 -m 711 来给予新的目录 drwx--x--x 的权限。
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ mkdir home/bird/testing
mkdir: cannot create directory ‘home/bird/testing’: No such file or directory
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ mkdir -p home/bird/testing
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ ls -l
drwxr-xr-x 3 xp022430 domain_users 4096 May 27 09:57 home
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ cd home/bird/testing/
要复制文件,请使用 cp (copy) (该文件你必须要有 read 的权限才行啊!)
格式:cp [-adfilprsu] 来源文件(source) 目标文件(destination)。
此时你可以写全路径,如 :cp TestMode/TestFile.txt Testelse/haha.txt 这样就会完成复制和改名,
如果你:
cp TestMode/TestFile.txt Testelse/ 那么就会用以前的名字。
复制文件的时候主要考虑如下:
1)、是否需要完整的保留来源文件的信息?
2)、 来源文件是否为连结档 (symbolic link file)?
3)、来源档是否为特殊的文件,例如 FIFO, socket 等?
4)、来源文件是否为目录?
对应不同参数,到时候自己选!
常用参数:
-r :递归持续复制,用于目录的复制行为;(常用)
-s :复制成为符号链接文件 (symbolic link),亦即『快捷方式』文件;
-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用);
-a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明;(常用) ,感觉比-p好用点,-a会递归!
-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制。
默认的赋值权限、文件所有者、群组等等都会变的。
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ ls -l
total 8
drwxr-xr-x 3 xp022430 domain_users 4096 May 27 09:57 home
-rwxrwxrwx 1 xp022430 domain_users 19 May 26 15:10 TestFile.txt (注意初始权限)
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ cp TestFile.txt ../
(复制当前目录下的TestFile文件到上一个目录,注意..的运用)
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ cd ..
cnbjlx24729:/media/packages/apps/Nfc$ ls -l
(可以看到默认的权限修改时间已经改变)
-rwxr-xr-x 1 xp022430 domain_users 19 May 27 11:13 TestFile.txt
使用-p的参数
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ cp -p TestFile.txt ../
cnbjlx24729:/media/packages/apps/Nfc/TestMode$ cd ..
cnbjlx24729:/media/packages/apps/Nfc$ ls -l
-rwxrwxrwx 1 xp022430 domain_users 19 May 26 15:10 TestFile.txt
使用-a 会递归的把入目下的所有的都复制过去,并且保留全部的属性和时间
- cnbjlx24729:/media/packages/apps/Nfc$ cp -a TestMode/ Testelse/
cnbjlx24729:/media/packages/apps/Nfc$ ls -l
drwxr-xr-x 3 xp022430 domain_users 4096 May 27 11:28 Testelse
drwxrwxrwx 4 xp022430 domain_users 4096 May 27 11:27 TestMode
cnbjlx24729:/media/packages/apps/Nfc$ cd Testelse/
cnbjlx24729:/media/packages/apps/Nfc/Testelse$ ls -l
total 4
drwxrwxrwx 4 xp022430 domain_users 4096 May 27 11:27 TestMode
cnbjlx24729:/media/packages/apps/Nfc/Testelse$ cd TestMode/
cnbjlx24729:/media/packages/apps/Nfc/Testelse/TestMode$ ls -l
total 12
drwxr-xr-x 3 xp022430 domain_users 4096 May 27 09:57 home
-rwxrwxrwx 1 xp022430 domain_users 19 May 26 15:10 TestFile.txt
drwxrwxrwx 3 xp022430 domain_users 4096 May 27 09:57 TestMode
至于移动目录与文件,重命名,则使用 mv (move)。
至于移除吗?那就是 rm (remove)
rm [-fir] 文件或目录
选项与参数:
下面这三个很常用啊!
-f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
13、对PATH变量的理解(
PATH 还是有点理解不到,应该是操作系统这块的概念)
PATH的值是一系列目录,当你运行一个程序时,Shell脚本在这些目录下进行搜寻。
格式:PATH=$PATH:<PATH1>:<PATH2>:<PATH3>:------:<PATHN>
执行文件路径的变量: $PATH
比如我们在任何地方使用ls,但其实那ls是在/bin/ls 目录下的,
我们把/bin配置到PATH当中就可以在任何
地方执行了!
查看PATH变量的值的命令: echo $PATH
root@Joey:/home/joey/Desktop# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
由一堆目录所组成的,每个目录中间用冒号(:)来隔开,有顺序之分,有多个的时候先查询到的就先执行。
添加patch,
添加到路径PATH="${PATH}:/test" “/test”是要添加的路径。此时是根目录下的test
root@Joey:/home/joey/Desktop# PATH="${PATH}:/test"
root@Joey:/home/joey/Desktop# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/test
为什么 ${PATH} 搜寻的目录不加入本目录(.)?
为了安全起见,不建议将『.』加入 PATH 的搜寻目录中。 比如我在当前目录,写了一个ls的程序,
一旦你
使用的时候,优先用到了我的,我在这个ls中加入窃取用户数据的程序!那么可想而知很恐怖!