Linux学习笔记 (未完待续)

linux 文件夹结构


/bin/

可执行文件,所有人都可以使用。

/sbin/

可执行文件,管理员才可用,有些文件也可以执行,但要指定目录,如:/sbin/ifconfig。

以上两个目录可以使用:echo $PATH,查看当前用户包含使用哪些目录的权限。

/usr/bin/ 和/usr/sbin/

系统非必须文件,如:Apache。 两者区别:
1, /usr/bin/下所有人都需要执行的文件,例如vim,可以使用which vim来查看目录。
2, /usr/sbin/下不是所有人都需要执行的文件,例如:Apache。

/dev/

保存大部分设备(硬件)文件。例如:/dev/sda:系统第一块sata硬盘。这个千万不要乱动。。。

/home/

系统创建的非root用户的用户的家目录。

/lib/

库文件夹。

/lib/modules/

内核模块。内核放在:/boot/vmlinux-2.6.9-22.EL。当然你的系统可能是其他版本。这里是2.6的版本。而/lib/modules/下是操作系统核心配套的模块,有如下文件:

/media、mnt

/proc/

当前内存中的值。如果不启动系统,就没有任何文件。

/var/

可变文件。如/var/log、/var/mail等。

/boot/

1.kernel
2.grub:放bootLoader。

/etc/

放配置文件。如:/etc/passwd。

/opt/

第三软件的目录。

/root/

root用户主目录。

文本控制台和图形界面

/etc/inittab

配置是否启动图形界面。
id:5:initdefault: 改为 id:3:initdefault: 这样开机默认不启动图形界面。

startx

启动图形界面。

ctrl+alt+F1

第一个是图形界面,以前是F7是图形界面。

ctrl+alt+F2

启动第一个文本界面。

system-config-network

安装后网络默认不启动,上述命令是配置网络。eth0:为第一个网卡,后面一次类推。

service network restart:重启network. 配置重启后,ifconfig,发现eth0还是没有启动。
这时用命令: vim /etc/sysconfig/network-scripts/ifcfg-eth0 保存了网卡eth0的配置文件。

ONBOOT=no 所以重启后没有默认开启,改为yes即可。

Device not managed by NetworkManager:这个错误需要重启一下NetworkManager 服务,执行下面命令即可:
service NetworkManager restart

shell常用命令

tab键

一下是补齐命令,两下是显示当前输入的所有候选。

man
--help

ls --help 查看帮助。

cd

cd .. 上级目录
cd - 回到上次跳转过来的文件夹
cd 或 cd ~ 回到当前用户主目录

pwd

查看当前所在目录。

touch

创建文件

↑、↓、history

查看执行过的命令。

ls -F 查看文件类型 可执行:* 。目录:带/。 ll

file

file /etc/passwd 可以查看文件类型

alias 查看别名

alias ii='ls -l' 定义别名:ii等于执行 ls -l,不会永久生效。
unalias ii :取消别名。
vi ~/.bashrc 然后把别名复制进去,保存退出。 别名永久生效。

mv

mv a b: 改名
mv a /tmp/c

cp

cp -r 复制文件夹
cp a /tmp/d
cp -r /etc/ /tmp/ 赋值文件夹

rm

rm -r 删除文件夹
rm -rf 不询问删除

cat

cat /etc/passwd

more

more /etc/passwd 按空格,只能顺序往下一页。

less

less /etc/passwd 上下翻滚都可以。

head

查看文件前10行,如:head text。

tail

查看文件末尾10行,如:tail text。

tail -f + 文件名

如:tail -f text ,动态查看文件,如果文件末尾有变化,会动持续动态展示,多用于查看部署日志,按ctrl+c退出查看。

vi

i:insert模式。
: 命令行模式。
u: undo,取消上次操作。
ctrl+r: redo,再做一次。
q
q! 也可以ZQ
wq 也可以ZZ

echo

echo aaaaaaaaaaaaa :屏幕打印aaaaaaaa
echo $HOME 查询变量 HOME的值。

echo $USER
返回USER变量的值。

AAA=sss
echo AAA :屏幕打印AAA
echo $AAA : 屏幕返回sss

su - ttt :切换到ttt用户 。exit 退出返回前用户
useradd

添加用户rick: useradd rick

passwd

更改rick用户密码:passwd rick。 (root用户可以随意更改,其他其他用户需要设置复杂密码,比如大小写数字字母组合等。)

用户及组管理操作

useradd

useradd rick :添加用户rick

useradd rick都做了哪些操作呢?

  • vi /etc/passwd 在文件里添加用户rick的属性。

vi /etc/passwd 打开这个文件,会发现添加了 rick的记录。用冒号分隔,其中第一个是用户名,x代表这个用户有登录密码,如果把x删除,则这个用户不需要密码登录,500是用户序号,501是组序号,501后面::中间位置是这个用户的备注,类似于comment,这里为空。然后/home/xxx是用户的主目录。再后面是登录后的shell,这里/sbin/nologin是指不允许登录,正常情况下应该是/bin/bash。这里说下,用户id和组id都是从500开始的,500之前是系统保留序号。

vi /etc/shadow 在文件里添加rick的密码。

/etc/shadow

用于储存用户密码的文件。如图可以看到 xxx的密码是一串乱码,是用MD5加密过的。

两个$中间是个阈值,后面才是密码。后面:13822:是一个unix time,以1970年1月1日开始到现在多少天,1970年1月1日就是1。:0:表示密码的最短历史,如果是0,表示立刻就可以更改密码,如果是1则表示一天后才可以更改密码。:99999:是密码最长历史,如果设置30,则表示密码30天过期。:7:表示密码过期前多少天通知你。:7:后面的冒号之间代表着密码过期后仍然可用的天数。最后两个冒号中间代表这个账号禁用的unix time,如果最后是:1:,那么代表这个账号1970年1月1日就禁用了。
觉得以上记不住怎么办?
man 5 shadow, 可以查询shadow文件的具体意义。5,指配置文件。

man 5 shadow

可以查询shadow文件的具体意义。5,指配置文件,上图。

vi /etc/group 在文件里添加用户的组,创建rick用户,同时出现一个rick的组。
/etc/group

组文件,可以看到xxx组,最后一个冒号后面是组成员,如果要在组内添加成员可以直接在对应组后面添加,如添加tom和lucy两个成员:xxx:x:501:tom,lucy。但是如果添加到root:x:0:root后面添加用户也不会使添加的用户成为管理员,因为linux只区分用户id为0和非0,而只有root用户id为0,其他都是大于500的,加入root组最多是对某些文件的权限变大了,仍然无法成为管理员。

vi /etc/gshadow 在文件里添加组密码。 /etc/gshadow

用于保存组密码,很少用。

/etc/login.defs

这个配置文件可以设置最短密码时间,最长密码时间,最短密码长度,密码过期提醒时间,最小UID,这里是500,最大UID,最小组ID(GID_MIN),最大组ID(GID_MAX)等。

mkdir /home/rick 创建用户目录。
cp -r /etc/skel/.* /home/rick/
chown -R rick.rick /home/rick/

passwd
userdel
groupadd
groupdel
gpasswd

组密码。

gpasswd -M rick,tom,lucy root

把多个用户指定到一个组,这里是把3个用户rick,tom,lucy加入到root组。 goupdel
usermod -G root,bin,todd rick 把rick指定到 root,bin,todd 组下面。如果再执行一下,usermod -G root rick 则rick只属于root组,其他组会被去掉。可用id rick来查看相关信息。

id rick

可以查看用于的uid,gid,groups,即用于id,组id和所属的组。

查询登录者信息

users

查看当前系统登录用户。

who

查看当前登录本机的用户及来源。如哪个控制台登录的,如果从外部访问到本机或者startx打开xwindow,就是pts,如果本地开启控制台就是tty。

w

查看当前登录本机用户和运行程序。如果远程登录可以看到ip,其他信息包括:登录时间、空闲时间、运行时占cpu的时间、当前在运行什么命令,如果想要强制让登录者退出可以使用:skill -9 pts/3,这样登录在pts/3的用户就被断开了。

交互命令,写消息

write

可以写信息给其他登录用户。mesg:是否可以给别人写消息。

wall

给所有人写消息,例如: wall time for eating。

查看登录日志信息

last

查看用户的登录日志。

lastlog

查看每个用户最后登录的情况。每个用户最后登录的时间。

finger

如:finger rick,查看用户信息。查看用户信息和最后登录时间。

Linux下的文件

ls -al

分别是文件类型(第一个字符)、所属者权限(3个字符,r:读,w:写,x:执行)、组权限(3个字符)、其他人权限(3个字符)、链接数、所属者、所属组、链接数、所有者、所有组、文件大小、修改时间、文件名。

inode

inode(发音:eye-node)译成中文就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等。
stat a:可以查看文件a的inode。

硬链接、软连接

ln a b :创建一个b的硬链接,指向a只想的文件。 ln -s a b : 创建一个b的软连接。
硬链接:不能跨分区,不能给目录做硬链接。作用:防止文件被误删。
软连接:可以跨分区,能给目录做软连接。ln -s /etc eee:对文件夹/etc做软连接,访问eee就进入文件夹。

权限(chmod、chown)

  • 文件权限

chmod

chmod u+x A :对A添加执行权限。
chmod go+x A :表示给group和others添加x权限。
chmod a-x A:给所有人减掉执行权限。
chmod a=rw A: 给所有人的权限设置成rw,即读写。
chmod -R g+w /tmp : 对/tem下所有文件和文件夹赋予所属组的读权限。
u、g、o、a分别代表:u:所有者。g:group,组。o:others,其他用户。a:all,所有人。 +、-和rwx组合进行设置权限。 chmod 777 A:对所有人赋予A文件的读、写、执行权限。4:读。2:写。1:执行。加起来就是对应的权限,三个7分别代表,所有者,所属组,其他人的权限。
chmod 046 A:假设文件所有者时rick,那么rick对A文件有什么权限?
答案是:没有任何权限,虽然所属组有读的权限,但是权限不会叠加。

chown

chown rick b:把b文件的拥有者改为rick。
chown rick.root b:把b文件的拥有者改为rick,拥有组改为root组。
chown .root b 或 chown :root b:只把b文件的拥有组改为root组。
chgrp root b:等价于上一句,只把b的拥有组改为root组。 chown -R rick.root /tmp/ :把tmp文件夹下所有文件的拥有者改为rick,拥有组改为root组。

  • 文件夹权限

ls -ld testdir/

-d : 看文件夹的权限。

文件夹权限:

r : ls,在文件夹下ls的求权限,当然如果只有r权限,没法ls,因为无法cd进去。

w :
1, touch a,在文件夹下创建文件的权限。
2,随意改写(vi、vim)其他人的文件的权限,如果修改后wq不行,可以wq!:强制保存退出。
3,rm :删除其他人文件的权限。

x : cd,能不能cd到该文件夹下的权限。

r-x : cd、ls,权限。

-wx : cd、touch、rm(self、others)、vi(self、others)修改自己和别人的文件。
-wxt :cd、touch、rm(self)、vi(self),只能删除、修改自己的文件。

如何加t权限?

chmod o+t testdir/ 或 chmod 1703 testdir/ :对others(其他用户)赋予文件夹testdir/的t权限。这时ls -ld testdir/ 如下:
drwx----wt,原来的x变成了t。
其实从x权限变为t权限,权限是变低了。
其实可以看/temp文件夹的权限:
ls -ld /temp : 权限是 rwxrwxrwt,这就是t权限的一个例子,因为临时文件夹,所有用户都可以保存文件,运行文件,但是当前用户不能影响其他用户,所以不能是x权限,即:不能删除、修改其他人的文件。

其他权限:
SUID(强制位)、SGID(冒险位)、Sticky

umask

创建者 默认文件夹权限 默认文件权限
root 755 644
others 775 664

root用户下输入umask,会发现返回值是0022。其他用户登录下umask返回是0002。所以根据每个用户的umask可以判断每个用户创建的文件和文件夹的默认权限。例如:root创建的文件夹是755权限,加上022,正好是777,创建的文件夹是644,加上022,是666。而others的umask是0002,所以others创建的文件夹应该是777-002,就是775,而others创建的文件的权限是666-002,是664。
查看umask值:
vi /etc/bashrc

用户id大于99的话,umask值默认为002,否则umask默认值为022。
总结,创建的文件和文件夹的权限为如下,umask代表当前用户的umask:
1.文件夹权限:777 - umask
2.文件权限:666 - umask

Linux编辑器及vim

编辑命令包括:ed、sed、emacs、vi、vim等。这里主要介绍vim。

vi、vim

/bin/vi 和 /usr/bin/vim, VIM : Vi IMproved,简单来说vim就是vi的升级版。不过很多系统vi是有alias(别名),所以执行vi就是执行vim,而有些系统(如:RHEL5)没有这个别名,这点需要注意。可以通过:alias命令查看别名。

命令模式

vim /tmp/aaa,刚进入vi和vim以后是命令模式。

vim进入输入(insert)模式命令:

i: 在光标当前位置进入输入模式。 如果先按一个数字,如,5i:5再按i,输入:hello,那么按esc退出后会输入5个hello。
I: 在光标所在行的头部进入输入模式。
a: 在当前光标的下一个字符进入输入模式。
A: 在当前光标所在行的末尾进入输入模式。
o: 在当前光标所在行之下开启新的一行进入输入模式。
O: 在当前光标所在行之上开启新的一行进入输入模式。
s: 删除当前光标所在字符,进入输入模式。
S: 删除光标所在行,进入输入模式。

其实以上记住i就可以了,其他看兴趣。

  • vim取消操作和取消取消操作。

u: undo,如果操作后想回滚,可以按u。
ctrl+r: redo,保留前一步的undo,比如删除了,按u取消删除,但是又想删除了,就按ctrl+r:redo。
:e! : 放弃对当前文件的所有修改。

  • vim替换命令:

r: 替换一个当前光标所在位置的字符。
R: 一直替换字符,直到按esc退出为止。

  • vim移动位置、翻页命令:

0: 到当前行头部。
$: 到当前行的末尾。
G: 到文件末尾。
数字+G: 到文件的第几行,如,10G:到文件的第10行。
:10 : 冒号+数字也是跳转到那一行。 ctrl + G : 在最下面显示文件一共多少行,现在位置的百分比。
w: 一次向后移动一个单词。
[ : 移动到上一段。
] : 移动到下一段。
ctrl + b: 向上翻一页。
ctrl + f: 向下翻一页。
ctrl + u: 向上翻半页。
ctrl + d: 向下翻半页。
ctrl + y: 向上翻一行。
ctrl + e: 向下翻一行。

  • vim查找命令:

/:正向查找,从文件头开始查找,如:/test,查找test。
? : 反向查找,?test,如上例。
n: next,查找下一个符合条件的字符,与"/"和"?"组合使用。
N: 查找上一个,与"/"和"?"组合使用。
:set ignorecase: 查找忽略大小写。 :set noignorecase: 查找不忽略大小写。

  • vim复制、粘贴、剪切命令,支持多剪切板:

x: 删除一个字符,3x:删除3个字符。 dd: 剪切一行,也可以当做删除,3dd : 剪切3行。
dw: 剪切一个单词,5dw : 剪切5个单词 yy: 复制一行,3yy : 复制3行。
p: 粘贴。 "byy : 在光标所在位置复制1行到剪切板b。 "5ayy : 表示使用剪切板a,在光标所在位置复制5行到剪切板a。
"ap : 把剪切板a中的内容粘贴出来,也就是指上面复制的那5行内容。
"bp : 把剪切板b中的内容粘贴出来,也就是上面复制的那一行内容。

  • vim退出命令

:q : 退出(命令行模式)。
:q! : 强制退出(命令行模式)。
:wq : 保存修改并退出(命令行模式)。
:wq! : 强制保存修改并退出(命令行模式)。
ZQ : 不保存退出(命令模式)。
ZZ : 保存退出(命令模式)。

vim命令行模式

":" : 冒号进入命令行模式。
:set nu : 显示行号,只有此次生效。
:set nonu : 取消显示行号。
:set ruler : 在底部显示光标所在行列的数值。
:set autoindent : 正文自动缩进。
:20 :也可以跳转到目标行,此例跳转到20行。
:q : 未做更改退出。
:q! : 放弃更改,强制退出。
:w :写入。
:w! : 强制写入。
:wq : 保存修改并退出。
:wq! : 强制保存修改并退出。
:w + 文件名 : 写入其他文件,如,":w a.test",就会在当前目录新生成一个a.test文件,保存这个文件的修改内容。
:w >> a.test : 追加写入,如果要在已存在的文件末尾进行追加写入,可以用。
:1,5 w >> a.test :当前文件第1行到第5行追加写入文件a.test。
:1,$ w >> a.test : 这里%代表最后一行,即,从第一行到最后一样。
r : 在当前光标位置读入文件,例如,":r /etc/test",就会把/etc/test文件读入到当前光标的位置。
r !ls : 可以把ls命令读取到当前光标位置。
e + 目标文件名 : 放弃修改文件,打开目标文件。
:e! : 放弃对当前文件的所有修改。

:1,$s/source/target/g : 1,$表示第一行到最后一行,s,是s型替换source,代表要被替换的字符串。target,表示替换成什么字符串。g,代表不询问,直接替换。 
复制代码

:1,$s/source/target/c : 询问替换,替换按y,不替换按n。其他和上面命令一样。

  • vim其他有趣命令

vim -o /tmp/a /tmp/b :同时打开两个文件,横屏展示。
ctrl + w + ↓ : 切换到下面文件的窗口。
vim -O /tmp/a /tmp/b : 同时打开两个文件,竖屏展示。

  • vim配置文件

~/.vimrc 文件是vim的配置文件。如果想要让每次进入vim让一些命令都生效,可以配置此文件。
比如要配置每次vim以后文件都显示行号,则在~/.vimrc里面添加命令":set nu",然后":wq",保存退出即可。

Linux查找及压缩

查找
  • which

一般查找可执行文件,如:which ls,执行结果如下图,可以看到返回连个ls命令,可以看到优先执行的事alias的ls。其他例子:which vi、which cd等等。

想要修改ls的后特殊文件的颜色,可以修改/etc/DIR_COLORS文件,vi /etc/DIR_COLORS

which查找范围是如下文件夹,一般是存放可执行文件的,所以查找普通文件不应该是用which。

  • whereis

除了查找可执行文件,也可以查询少量其他文件,除了查找文件位置,还会显示帮助文档位置。如,whereis ls,如下图,不但显示ls位置,还显示帮助文档位置,下面两行也可以看出whereis的查找范围,仍然是那几个可执行文件的目录。

  • locate、slocate

快速查找,但是需要查询数据库。今天新加入的文件一般不再数据库中,会查不到,但是历史文件可以快速查找到,如果要查找今天的文件可以先更新数据库:

updatedb
复制代码

然后在查找。

locate file_name                   (精确查找)
locate -r '.*file_name.*'  (模糊查找包含file_name的文件,-r:使用正则表达式。)
复制代码

如果没有更新数据库则会提醒:

题外话,/etc/cron.daily/文件夹每天都会执行,其中就包括updatedb的命令,如下图:

locate和slocate区别:可以使用命令:

ls `which locate` -l  
复制代码

从上面可以看出,locate是slocate的一个软链接。

  • find

find [路径] [参数] [表达式]

find /  -name file_name (精确查找)
find / '*file_name*' (模糊查找包含file_name的文件,注意和locate模糊查找的区别。)
以上两条命令表示从根目录/开始查找
复制代码

展示文件详情:

find /etc -name "*network*" -ls
复制代码

展示文件类型:

find /etc -name "*network*"  -exec file {}  \;
复制代码

find /home -name "*file_name*"  -ok rm {}  \;
复制代码

-ok表示询问,这里表示询问是否删除,如果是-exec就不询问直接删除了。

查找所属用户的文件:

find /home -user user_name  -ls
复制代码

复杂查询

find /home -user user_name -o -group gourp_name -a -type d
复制代码

-o代表or,-a代表and,-type可以指定查找的文件类型,d表示文件夹(如果是f则表示文件)。那么上面语句的意思就是: 在/home文件夹下查找文件所有者(-user)是user_name或者(-o)文件所有组(-group)是group_name并且(-a)文件类型是文件夹(-type d)的文件。

其他参数:

find /  [-user  -type  -name  -group -perm(权限) -size -mtime]  [-ok|exec] [ls|rm等]
复制代码

查询系统中权限是777的危险文件夹:

find / -perm -777 -type d -ls
复制代码

复习一下:

  • grep

查询文本内容,如a.text文件中有hello字样,可以查找hello而不是文件名。

在etc目录下查找包含shrek字样文件内容的文件,如果一个文件出现多次,也会多行展示。

grep -R shrek /etc   
复制代码


在etc目录下查找包含shrek字样的文件名:

grep -R -l shrek /etc   
复制代码

压缩

compress uncompress gzip gunzip zip unzip tar

  • gizp、bzip2 压缩
gzip file_name    
bzip2 file_name
复制代码

源文件会被删除,生成一个file_name.gz或file_name.bz2文件,bzip2压缩比例高于gzip。

  • gunzip、bunzip2解压
gunzip file_name   
gzip -d file_name   
bunzip2 file_name  
bzip2 -d file_name
复制代码

解压文件。

  • tar 打包、压缩
    打包:
tar cvf /tmp/target_package.tar  /tmp/source_file1  /tmp/source_file2   /tmp/source_dir/ (后面可继续追加)
复制代码

将文件/tmp/source_file1和文件/tmp/source_file2和文件夹/tmp/source_dir/打包成/tmp目录下的target_package.tar文件。后面可以罗列更多需要打包的文件和文件夹。
打包并压缩:

tar cvfz /tmp/target_package.tar.gz  /tmp/source_file1  /tmp/source_file2   /tmp/source_dir/ (后面可继续追加)   
tar cvfj /tmp/target_package.tar.bz2  /tmp/source_file1  /tmp/source_file2   /tmp/source_dir/ (后面可继续追加)
复制代码

z代表gzip压缩,j代表bzip压缩。

拆包并解压缩:

tar xvfz /tmp/target_package.tar.gz  /target_dir  
tar xvfj /tmp/target_package.tar.bz2  /target_dir
复制代码

z代表gzip压缩,j代表bzip压缩。

  • tar 对已打包的文件追加新文件
tar rvf /tmp/target_package.tar  /tmp/source_file1  /tmp/source_file2   /tmp/source_dir/ (后面可继续追加)
复制代码

/tmp目录下原来有一个target_package.tar文件,想继续将其他文件追加到这个包里面,用上面命令。

  • tar 解压
tar xvf /tmp/target_package.tar  (解压到当前目录)   
tar xvf /tmp/target_package.tar  -C /tmp/target_dir/ (解压到指定目录/tmp/target_dir/)
复制代码
  • tar 查看
tar tvf /tmp/target_package.tar      查看打包文件
tar tvfz /tmp/target_package.tar.gz  查看打包压缩文件  
tar tvfj 
复制代码

查看目标包内容。

文本处理以及正则表达式

  • cut
cut -d: -f1 /etc/passwd
复制代码

cut切割文件/etc/passwd,"-d:" 代表以冒号为分隔符;f1代表取第一列。

grep root /etc/passwd  | cut -d : -f7
复制代码

查看用户root用的是哪个shell。

cut -c1-3 /etc/passwd
复制代码

取第1到第3个字符。

  • sort
sort -t: +2 -n /etc/passwd
复制代码

sort排序,将文件/etc/passwd文件,"-t:" 按照逗号分隔,"+2",第三列;"-n",按照数字方式排序。

sort -t: +2 -n /etc/passwd  > /tmp/test
复制代码

将结果输出重定向到/tmp/test文件里。

你可能感兴趣的:(开发工具,shell,数据库)