1、Linux基础指令
- man +指令:可以查看命令手册;
- $PATH:输入命令可以执行,是因为PATH告诉你这些命令在哪;
- whereis/which:在目录中找文件或目录;
- id:可以看出自己的用户身份,属于哪个组;
- finger + user:可以看出登录用户的登录情况以及键盘空闲时间;
- du -sh 查看服务器空间;
- du -sh directory/ 查看目录空间;
- du -sh file 查看文件空间;
useradd –d /usr/sam -m sam
此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户主目录所在的父目录)。假设当前用户是sam,则下面的命令修改该用户自己的口令:
# passwd
Old password:******
New password:*******
Re-enter new password:*******
如果是超级用户,可以用下列形式指定任何用户的口令:
# passwd sam
New password:*******
Re-enter new password:*******
1.1、添加用户
首先用adduser命令添加一个普通用户,命令如下:
#adduser tommy //添加一个名为tommy的用户
#passwd tommy //修改密码
Changing password for user tommy.
New UNIX password: //在这里输入新密码
Retype new UNIX password: //再次输入新密码
passwd: all authentication tokens updated successfully.
1.2、赋予root权限
方法一:修改 /etc/sudoers 文件,找到下面一行,把前面的注释(#)去掉
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
然后修改用户,使其属于root组(wheel),命令如下:
#usermod -g root tommy
修改完毕,现在可以用tommy帐号登录,然后用命令 su - ,即可获得root权限进行操作。
方法二:修改 /etc/sudoers文件,找到下面一行,在root下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
tommy ALL=(ALL) ALL
修改完毕,现在可以用tommy帐号登录,然后用命令 su -,即可获得root权限进行操作。
2、文件系统
2.1、目录
- 在Linux系统中文件与目录不区分;
- bin:存放可执行程序,如:ls、mkdir、cp;
- sbin:存放超级管理员的可执行程序,如:restart,shutdown;
- etc:用于存放配置文件;
- lib:用于存放库文件;
- mnt:声卡显卡完善,只存放硬盘;
- var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件;
- boot: 放置linux系统启动时用到的一些文件;
上述都是根目录
- home:所有用户在这工作,需要分配硬盘90%的空间,保证空间足够大;
- proc:内存信息与cpu信息:meminfo/cpuinfo;
- 登录目录:/home/username;
- .:当前目录;ls、ls .、ls ./ 结果相同;
- …:上级目录: cp …/htk/1.txt .;
- pwd:显示当前目录路径;
- tar:tar包传输文件安全可靠;
- -l:可以查看详细信息;
- -a:可以显示所有文件,包括隐藏;
- -F:针对目录加“/”,针对可执行文件加"*";
- -R:可以看子目录;
- cd -:可以回到上一工作目录,有一个环境变量存储位置;
2.2、文件命名规则
- 命令使用数字、字母以及三种分隔类型:"_"、"."、"-";
- cat file:查看文件、cat file1 file2;
- cat file > file_cmb:将屏幕中的内容抓起来输出到新的文件;
2.3、文件操作
- cp file file.copy
- cp file work/
- cp -r work1/ work2/ work/ : 将work1和work2拷贝到work里
注:Linux拷贝时,如果目标目录有同名文件或目录,不会提示,直接覆盖,可添加“-i”,如cp -i file work
- ls -R:可显示下级目录;
- mv file newfile:改名;
- mv work/ fancy/:将work目录移动到fancy目录;
- mv work fancy:将work目录修改为fancy目录;
ln -s file file_ln:生成file的索引,file_in并不是一个真的文件 ,可以用来拷贝一个需要不断更新的文件的索引,不仅不需要占用资源,而且能随时查看更新后的文件,缺点是拷贝文件时拷贝的只是符号,并不是真实的文件,linux系统中多用户分享同一个文件常用的办法;
-
rm file:删除文件;
-
rm -r work/:删除目录;
-
rm -rf :强制删除,没有任何的提示,删不掉的时候加f;
-
du file or directory/:查看文件或目录大小,多少字节;
-
du -sh file or directory/ : 查看文件或目录字节换算后的大小
3、文件和目录的接入权限
超级用户和文件拥有者可以将文件送给其他用户,送了之后除非对方归还,或者通过超级用户修改,负责要不回来;
- ll or ls -S :查看文件用户使用权限;
- chmod u+x hello:对hello文件给用户自己增加可执行权限;
- 三个用户等级:user,group,other;
- linux中的文件目录可通过设置用户权限决定能不能访问;
- 可执行文件:.pl,.sh,*.csh,binanry executive file;
- chmod u+x g+x o+x file == chmod a+x, 除了“+”也可以“-”和“=”;
- 数字方式:read-4,write-2,execute-1;
- chmod 711 file -> -rwx–x--x
- 创建一个目录或者文件,默认权限:drwxr-xr-x 755
- umask-S:可以查看创建文件的默认权限;
- mkdir -m 700 private:创建自定义权限的目录;
- touch file:改变文件的时间标签,不改变内容,如果没有该文件则新建一个该文件;
- chown user file:将文件的所有者修改给user;
- su [username] -c [shell_program…]:在超级用户下不退出本id以其他用户运行某个程序;
- diff file1 file2:比较两个纯文本文件(不能是二进制文件)的差别;
- diff -r dir1/ dir2/:比较两个目录中的文件;
- comm file1 file2 [-1 2 3]:显示两个纯文本文件的公共部分,file1独有,file2独有,两者共有;
- 查看操作系统信息:[uname -a/] [more /proc/version] [cat /etc/redhat-release]
4、基础shell知识
- alias dir=‘ls’:定义别名,注意等号两边不要加空格,如果别名中间有空格,一定要加引号;
- env:查看环境变量;
HOSTNAME=yd211-new-pc
TERM=xterm
SHELL=/bin/bash
HISTSIZE=100
SSH_CLIENT=202.204.13.127 3010 22
OLDPWD=/home/yd211
SSH_TTY=/dev/pts/0
USER=yd211
LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:
MAIL=/var/spool/mail/yd211
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/yd211/bin:.
PWD=/home/yd211
LANG=zh_CN.GB18030
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
SHLVL=1
HOME=/home/yd211
- 自行定义环境变量时用小写,避免与系统冲突;
5、高级shell特性
- test=
pwd
/$(pwd):将pwd命令的输出结果赋值给test; - ~:代表你的登录目录;
- vi ~/.bash_profile:避免写绝对路径,程序灵活;
- 变量替换、命令替换、波浪号替换;
- 数组的定义:arr_number=(1 2 3 4 5),只支持整型计算,不支持浮点数;
- 输出数组:echo ${arr_number[0]}->1;
- set:能看见该进程下所有变量值(环境变量和局部变量);
- 获取数组长度方法:arr_length=KaTeX parse error: Expected '}', got '#' at position 2: {#̲arr_number[*]}或{#arr_number[@]};
- for循环:
for v in ${arr_number[@]}; do
echo $v;
done
- shell创建的变量位于局部区,环境变量位于环境区,每一个进程都有局部区和环境区,但是父进程的局部变量不能传递到子进程,但是将局部区的值拉到环境区,但这并不是环境变量;
- export:可以查看环境区中所有的值;
- #!/bin/sh:指定使用哪个shell;
- source/(. ./1.sh):将两个进程的内存空间merge到一起;
- ./sh &:将执行的进程放到后台,某些进程需要运行很长的时间,这样可以不影响前台的操作,通过ps查看该进程是否执行结束;
- ps xf:能以树状结构显示正在运行的进程父子关系;
- kill:杀进程,如果不能杀掉就用:kill -9 ;
- top:可以查看整个机器的进程运行情况,升级版htop;
- cmd1 && cmd2:只有cmd1执行成功再执行cmd2;
- cdm1 || cmd2:cmd1执行成功就不执行cmd2;
- 把进程扔到后台了,如果父进程死了,那后台执行的子进程也会死,可以使用top或者htop挂起,避免当前进程死掉;
6、产生文件名
- ?:通配符,可以匹配任一字符,适用于批处理,不能匹配隐含文件;
mv ??? /data
- [abc]??:第一个字母或a,b,c;
- [1-9][A-Z]:第一个字符1-9,第二个字符是大写字母;
- [!A-Z]:第一个字符不是大写字母;
- *:表示0-n个字符,但是仍不能匹配隐含文件;
- echo {\* ‘*’ “*”}:去掉特殊字符的特殊含义:[\,’’,""],\去除一个字符,’'去除一句,“”中变量替换不去除,命令替换不去除;
7、输入输出重定向
- 标准输入:键盘,标准输出:屏幕;
- 输入重定向:从文件读取;
- 输出重定向:输出到文件;
- > 输出重定向,会覆盖原内容,>>重定向,不会覆盖原内容;
- cp >1:输出重定向不能保留错误信息;
- nohup(扔后台) ./1.sh >output.txt 2>debug.txt &:2>保留错误信息,运行长时间脚本的通用方式;
- sort可以对文件中内容按照ASCII码进行排序:sort tt,sort -n(数字排序) tt;
- wc:统计,-l(行),-c(字节数),-w(字数),-m(字符数),-L(打印最长长度);
- find查找文件,grep查找文件中的字符串,egrep是grep的扩展,linux主要就是用来处理字符串的;
8、管道
- 管道:将上一级的输出直接作为下一级输入;
- ls | sort | wc | grep tmp :管道操作第一个可以是任意的cmd,但是后面的必须是filter cmd,过滤器,接受输入但是不改变输出;
- filter:sort, wc, grep, egrep, cut, sed, awk, bc, tr…
- grep yd211 < /etc/passwd 2> grep.err | sort > sorted.users 2> sort.err:从“/etc/passwd”中查找“yd211”字符串,错误的输出grep,err,正确的重定向并排序,处理后的结果正确的输入sorted.users,错误的输入sort.err;
- tr -s " " filename:将文件中的存在的字符串内容挤压成一个;
- train.sh | tee output.txt:tee不仅将结果输出屏幕,也将结果输出到文件;
- who | tee unsorted_display | sort | tee sorted_diplay;
- cut->column, sed->row, awk->row+sed;
- liubi 23 140004->cut -c 1-5,10-14 file->liubi14000;
- -f m-n:表示显示第m栏到第n栏;
- liubi[tab]23[tab]14000->cut -f 1,3 file->liubi 14000;
- -c和-f参数可以跟以下子参数:
m 第m个字符或段
m- 从第m个字符或段到文件结束
-n 从第1个到第n个字符或段