Linux程序基础与程序设计学习笔记

1、Linux基础指令

  1. man +指令:可以查看命令手册;
  2. $PATH:输入命令可以执行,是因为PATH告诉你这些命令在哪;
  3. whereis/which:在目录中找文件或目录;
  4. id:可以看出自己的用户身份,属于哪个组;
  5. finger + user:可以看出登录用户的登录情况以及键盘空闲时间;
  6. du -sh 查看服务器空间;
  7. du -sh directory/ 查看目录空间;
  8. 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、目录

  1. 在Linux系统中文件与目录不区分;
  2. bin:存放可执行程序,如:ls、mkdir、cp;
  3. sbin:存放超级管理员的可执行程序,如:restart,shutdown;
  4. etc:用于存放配置文件;
  5. lib:用于存放库文件;
  6. mnt:声卡显卡完善,只存放硬盘;
  7. var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件;
  8. boot: 放置linux系统启动时用到的一些文件;
上述都是根目录
  1. home:所有用户在这工作,需要分配硬盘90%的空间,保证空间足够大;
  2. proc:内存信息与cpu信息:meminfo/cpuinfo;
  3. 登录目录:/home/username;
  4. .:当前目录;ls、ls .、ls ./ 结果相同;
  5. …:上级目录: cp …/htk/1.txt .;
  6. pwd:显示当前目录路径;
  7. tar:tar包传输文件安全可靠;
  8. -l:可以查看详细信息;
  9. -a:可以显示所有文件,包括隐藏;
  10. -F:针对目录加“/”,针对可执行文件加"*";
  11. -R:可以看子目录;
  12. cd -:可以回到上一工作目录,有一个环境变量存储位置;

2.2、文件命名规则

  1. 命令使用数字、字母以及三种分隔类型:"_"、"."、"-";
  2. cat file:查看文件、cat file1 file2;
  3. cat file > file_cmb:将屏幕中的内容抓起来输出到新的文件;

2.3、文件操作

  1. cp file file.copy
  2. cp file work/
  3. cp -r work1/ work2/ work/ : 将work1和work2拷贝到work里
注:Linux拷贝时,如果目标目录有同名文件或目录,不会提示,直接覆盖,可添加“-i”,如cp -i file work
  1. ls -R:可显示下级目录;
  2. mv file newfile:改名;
  3. mv work/ fancy/:将work目录移动到fancy目录;
  4. mv work fancy:将work目录修改为fancy目录;
ln -s file file_ln:生成file的索引,file_in并不是一个真的文件 ,可以用来拷贝一个需要不断更新的文件的索引,不仅不需要占用资源,而且能随时查看更新后的文件,缺点是拷贝文件时拷贝的只是符号,并不是真实的文件,linux系统中多用户分享同一个文件常用的办法;
  1. rm file:删除文件;

  2. rm -r work/:删除目录;

  3. rm -rf :强制删除,没有任何的提示,删不掉的时候加f;

  4. du file or directory/:查看文件或目录大小,多少字节;

  5. du -sh file or directory/ : 查看文件或目录字节换算后的大小

3、文件和目录的接入权限

超级用户和文件拥有者可以将文件送给其他用户,送了之后除非对方归还,或者通过超级用户修改,负责要不回来;
  1. ll or ls -S :查看文件用户使用权限;
  2. chmod u+x hello:对hello文件给用户自己增加可执行权限;
  3. 三个用户等级:user,group,other;
  4. linux中的文件目录可通过设置用户权限决定能不能访问;
  5. 可执行文件:.pl,.sh,*.csh,binanry executive file;
  6. chmod u+x g+x o+x file == chmod a+x, 除了“+”也可以“-”和“=”;
  7. 数字方式:read-4,write-2,execute-1;
  8. chmod 711 file -> -rwx–x--x
  9. 创建一个目录或者文件,默认权限:drwxr-xr-x 755
  10. umask-S:可以查看创建文件的默认权限;
  11. mkdir -m 700 private:创建自定义权限的目录;
  12. touch file:改变文件的时间标签,不改变内容,如果没有该文件则新建一个该文件;
  13. chown user file:将文件的所有者修改给user;
  14. su [username] -c [shell_program…]:在超级用户下不退出本id以其他用户运行某个程序;
  15. diff file1 file2:比较两个纯文本文件(不能是二进制文件)的差别;
  16. diff -r dir1/ dir2/:比较两个目录中的文件;
  17. comm file1 file2 [-1 2 3]:显示两个纯文本文件的公共部分,file1独有,file2独有,两者共有;
  18. 查看操作系统信息:[uname -a/] [more /proc/version] [cat /etc/redhat-release]

4、基础shell知识

  1. alias dir=‘ls’:定义别名,注意等号两边不要加空格,如果别名中间有空格,一定要加引号;
  2. 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
  1. 自行定义环境变量时用小写,避免与系统冲突;

5、高级shell特性

  1. test=pwd/$(pwd):将pwd命令的输出结果赋值给test;
  2. ~:代表你的登录目录;
  3. vi ~/.bash_profile:避免写绝对路径,程序灵活;
  4. 变量替换、命令替换、波浪号替换;
  5. 数组的定义:arr_number=(1 2 3 4 5),只支持整型计算,不支持浮点数;
  6. 输出数组:echo ${arr_number[0]}->1;
  7. set:能看见该进程下所有变量值(环境变量和局部变量);
  8. 获取数组长度方法:arr_length=KaTeX parse error: Expected '}', got '#' at position 2: {#̲arr_number[*]}或{#arr_number[@]};
  9. for循环:
for v in ${arr_number[@]}; do 
    echo $v; 
done
  1. shell创建的变量位于局部区,环境变量位于环境区,每一个进程都有局部区和环境区,但是父进程的局部变量不能传递到子进程,但是将局部区的值拉到环境区,但这并不是环境变量;
  2. export:可以查看环境区中所有的值;
  3. #!/bin/sh:指定使用哪个shell;
  4. source/(. ./1.sh):将两个进程的内存空间merge到一起;
  5. ./sh &:将执行的进程放到后台,某些进程需要运行很长的时间,这样可以不影响前台的操作,通过ps查看该进程是否执行结束;
  6. ps xf:能以树状结构显示正在运行的进程父子关系;
  7. kill:杀进程,如果不能杀掉就用:kill -9 ;
  8. top:可以查看整个机器的进程运行情况,升级版htop;
  9. cmd1 && cmd2:只有cmd1执行成功再执行cmd2;
  10. cdm1 || cmd2:cmd1执行成功就不执行cmd2;
  11. 把进程扔到后台了,如果父进程死了,那后台执行的子进程也会死,可以使用top或者htop挂起,避免当前进程死掉;

6、产生文件名

  1. ?:通配符,可以匹配任一字符,适用于批处理,不能匹配隐含文件;
mv ??? /data
  1. [abc]??:第一个字母或a,b,c;
  2. [1-9][A-Z]:第一个字符1-9,第二个字符是大写字母;
  3. [!A-Z]:第一个字符不是大写字母;
  4. *:表示0-n个字符,但是仍不能匹配隐含文件;
  5. echo {\* ‘*’ “*”}:去掉特殊字符的特殊含义:[\,’’,""],\去除一个字符,’'去除一句,“”中变量替换不去除,命令替换不去除;

7、输入输出重定向

  1. 标准输入:键盘,标准输出:屏幕;
  2. 输入重定向:从文件读取;
  3. 输出重定向:输出到文件;
  4. > 输出重定向,会覆盖原内容,>>重定向,不会覆盖原内容;
  5. cp >1:输出重定向不能保留错误信息;
  6. nohup(扔后台) ./1.sh >output.txt 2>debug.txt &:2>保留错误信息,运行长时间脚本的通用方式;
  7. sort可以对文件中内容按照ASCII码进行排序:sort tt,sort -n(数字排序) tt;
  8. wc:统计,-l(行),-c(字节数),-w(字数),-m(字符数),-L(打印最长长度);
  9. find查找文件,grep查找文件中的字符串,egrep是grep的扩展,linux主要就是用来处理字符串的;

8、管道

  1. 管道:将上一级的输出直接作为下一级输入;
  2. ls | sort | wc | grep tmp :管道操作第一个可以是任意的cmd,但是后面的必须是filter cmd,过滤器,接受输入但是不改变输出;
  3. filter:sort, wc, grep, egrep, cut, sed, awk, bc, tr…
  4. grep yd211 < /etc/passwd 2> grep.err | sort > sorted.users 2> sort.err:从“/etc/passwd”中查找“yd211”字符串,错误的输出grep,err,正确的重定向并排序,处理后的结果正确的输入sorted.users,错误的输入sort.err;
  5. tr -s " " filename:将文件中的存在的字符串内容挤压成一个;
  6. train.sh | tee output.txt:tee不仅将结果输出屏幕,也将结果输出到文件;
  7. who | tee unsorted_display | sort | tee sorted_diplay;
  8. cut->column, sed->row, awk->row+sed;
  9. liubi 23 140004->cut -c 1-5,10-14 file->liubi14000;
  10. -f m-n:表示显示第m栏到第n栏;
  11. liubi[tab]23[tab]14000->cut -f 1,3 file->liubi 14000;
  12. -c和-f参数可以跟以下子参数:
    m 第m个字符或段
    m- 从第m个字符或段到文件结束
    -n 从第1个到第n个字符或段
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值