linux一些命令

来源:互联网 发布:蚁群算法python实现 编辑:程序博客网 时间:2024/05/21 18:37
目录和文件的管理:
1.*绝对路径从/目录写起例/usr/local/srv
  *相对路径不是从/写起的例进入到/usr/local/srv后cd ../
常见处理目录命令:
cd :进入目录
pwd:显示当前目录
makdir:目录创建
rmdir:删除一个空目录,一般用rm -rif来删一个目录就好;
mkdir(目录创建)还可以这样用
$:mkdir -m 711 abc
创建目录的同时还可以规定权限;
2.*关于变量PATH
PATH这个变量有一堆目录组成,一般是一些命令的路径,这是我们执行命令时都会从这个变量里面找,找到的就执行,找不到时就会报错,而且对先后循序有影响,当我们把一些没必要加进来的目录加进来时就会有危险,比如把/tmp这个目录加进来了,应为这个目录什么人都可以进入有w权限,这是很危险的当把一条木马命令放到这个目录下(可执行文件),并改名为ls等常用命令,当我们执行命令ls时就可能会执行到这个木马命令,那就危险了;也可以用绝对路径来执行命令/bin/ls,这时就避免了同命令问题。
 *ls -la查看目录一般这样就足够了,他还有一个别名ll -h加参数-h时会以G,k等来显示文件大少
 *cp这个命令的用途还可以用来连接;
$;cp -l bashrc bashrc_sling
建立硬链接;
$:cp -s bashrc bashrc_tyuh
建立软连接相当于快捷键一样;
而且加-a或-p参数时连文件的属性也会复制过去,也就是权限也会复制过去可以用来备份用。
而且加入-i参数是在覆盖之前进行确认,-u参数如果源文件比目标文件新测进行覆盖,非常人性化。
root@ubunt-cgy:/tmp# cp -s .bashrc  bashrc_slink
root@ubunt-cgy:/tmp# cp -l .bashrc bashrc_hlink
root@ubunt-cgy:/tmp# ll bashrc*
-rw-r--r-- 2 root root 3228 2012-04-01 18:46 bashrc_hlink   同用一个inode
lrwxrwxrwx 1 root root    7 2012-04-01 18:46 bashrc_slink -> .bashrc

  *mv移除文件或改名
ls -la
ls -l这个命令现在的 linux distributions都把它改成ll了,也就是说用ll都能有ls -l的功能了。
而且还可以用ll来看不同目录下的文件,可以用它来看不同文件或目录的差别,非常放便;
还有一个-i参数是用来查看inode号的;
/tmp$:ll ~/.bashrc bashrc;
加-h参数的时候文件或目录的大小将以k或g来显示这个符合我们的习惯。
3文件内容查看:
  *cat中加参数-n可以显示行号-b也差不多只是空行的不显示,还有一个参数-A是显示全部内容的意思(可以看到分行符号$当然还有其他);
   *nl也是一个显示文件内容的命令且显示行号。
   *more中再翻页的时候打加进/查找的字符串,能在后面中进行查找。
   *less,less命令中多了先前翻页和向前查找(?字符串);
   *head -n 要显示行号,数据选取命令
root@ubunt-cgy:/tmp# head -n 4  /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
   *tail -n 要显示行号,默认时10行(取出后面几行)
root@ubunt-cgy:/tmp# tail -n 4  /etc/passwd
statd:x:115:65534::/var/lib/nfs:/bin/false
ftp:x:116:123:ftp daemon,,,:/srv/ftp:/bin/false
sshd:x:117:65534::/var/run/sshd:/usr/sbin/nologin
cgy:x:1001:1001::/home/cgy:/bin/sh
4.*touch这个命令大家都知道是用来创建一个空文件的,但是还可以用他来修该文件的时间呢!
mtime是当文件内容改变时才会改变的时间,也是用ls -l看文件时所显示的文件时间,还有两个比较重要的时间,有必要说一下的,那就是ctime和atime;ctime这个时间是当文件的状态改变是,就会更新这个时间,像是权限和属性被改时都会更新。atime这个时间是当文件内容被读取时就会更新,也就是被查看了。
用touch时可以带-a来改atime这个时间,带-c这个参数来改ctime这个时间,还有一个更好用的参数,那就是-t了,可以一次性来改mtime,atime这两个时间不个ctime不能。
可以这样查看三个时间:$:ll bashrc;ll --time=atime;ll --time=ctime;
用cp来复制是就算加了-a后-p时也无法复制ctime的;
  *umask是用来默认权限用到的命令,文件默认的权限为rw_rw_rw_,因为默认下是不能执行的,一般文件都是看看而已。而目录就不同了默人权限为rwxrwxrwx,当然上述是最大的权限来的。
当执行$:umask 022时就会用户组和其他人就会拿去w这个权限,就变成了rw_r__r__,因为w(2)和2对应的这样好理解了吧,有什么就拿去那个权限,这比有些书上写文件和666目录与777做与操作与好理解一点吧!!!
  *chattr,lsattr
chattr -a -i -a参数加上去以后只能增加数据,不能进行删除,root都不行,只有root才能设置
-i 更厉害加上以后不能删不能增加数据,这两个参数常用在安全上如日志文件。
*文件特殊权限:SUID,SGID,SBIT
当s这个标志出现在文件所用者x权限上时,权限状态为rwsr_xr_x此时就称为,那他有什么用呢?
1SUID只对二进制程序有效
2执行者对该程序要有x权限
3本权限只在执行过程中有效
4执行者将具有程序所有者的权限,这个很重要。
这个是有点难理解的,怎么说呢举个例子,在linux中,所有账号的密码都是放在/etc/passwd里面的,这个文件权限为-r_________ 1 root root,意思是只有root才能查看修改,那我们一般用户明明可以改自己的密码啊,这就是S这个权限的作用了,当我们执行passwd时就会暂时获得root(程序所有者)的权限,当然能改。
root@ubunt-cgy:/work/hardware/key_led# ll /usr/bin/passwd
-rwsr-xr-x 1 root root 37140 2011-02-15 06:11 /usr/bin/passwd*
看到没有这个文件是有s权限的,而且其他人也有x权限.
SGID可以对文件和目录进行设置
1SUID只对二进制程序有效
2执行者对该程序要有x权限
3本权限只在执行过程中将会获得用户组的支持
除了二进制程序外,也能用在目录上
1若用户其有r和w权限时就能进入yigemulu
2用户在该目录下的用效用户组将变成该目录;
3若用户在该目录下其有W权限就可以新建文件,这是新建的文件用户组将是此目录用户组相同(获得用户组支持)。
SBIT只对目录有效
举个例子来说明他作用好了,就拿/tmp这个目录来说吧,这个目录权限为drwxrwxrwt这代表任何人都可以进入到里面工作,但是聪明的你注意到没有最后那个是t权限,这个就是SBIT权限了,当一个用户对目录有w权限时就说明可以在这个目录里建立很删除文件,那这就说明root的文件作为普通用户的你也可以把它删了,其实并不是这样,这就是t权限的作用了,他限制了你自己在这个目录里只能建立和删除你自己的文件而已,限制了你乱删别人的东西,这可是很不好的。
说了这么多,那么着几个权限这样设置呢:
4为SUID
2为SGID
1为SBIT
比如你要改一个文件的权限为-rwsr-xr-x时就是
$chmod 4755 filename
*file 查看文件类型
root@ubunt-cgy:~# file /etc/passwd
/etc/passwd: ASCII text
*while  执行文件名查询
root@ubunt-cgy:~# which ls
/bin/ls
**文件名查询
whereis
-b 只找二进制文件
-s 只找source源文件
root@ubunt-cgy:~# whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
*locate
-i 忽略大少写
root@ubunt-cgy:~# locate passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/chpasswd
/etc/pam.d/passwd
/etc/security/opasswd
/opt/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/usr/man/man1/passwd.1
/opt/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/usr/man/man3/SSL_CTX_set_default_passwd_cb.3
.....
这两个命令都是从/var/lib/mlocate数据库里查找数据的,所以会比较快,手动输入$updatedb可以更新数据库。
*find  查找速度没有whereis,locate快
-mtime n n为数字,意义是为n天前的一天之内被改过文件
-mtime +n 意义列出n天前不包过n天被改过文件
-mtime -n n天之内被改过文件
root@ubunt-cgy:~# find /etc -newer /etc/passwd
列出比/etc/passwd日期还要新的文件
root@ubunt-cgy:~# find /  -nouser
在根目录下找出不属于任何人的文件
root@ubunt-cgy:~# find / -user  cgy
在根目录下找出属于cgy文件
root@ubunt-cgy:~# find / -name passwd
找出名为passwd文件
-perm mode 刚好相等时
-perm +mode  包含也就是说我要查找-perm +755时,-rw-------也会被列出来;
-perm -mode  也就是被包含的意思了,当我要查找-perm -700时,rwx---rw-也会找出来;
root@ubunt-cgy:~# find / -perm +7000
只要包含s或t的都会被列出
root@ubunt-cgy:~# find / -perm +7000 -exec ls -l {} \;
将找到文件用ls -l列出来,-exec一直到\;代表find额外命令开始和结束,{}表示把查找到数据装进出;
********************************************************************************************
最后来说一下权限和命令之间的关系:
让用户能进入一个目录成为可工作的权限是什么
1可以使cd命令
2用户对这个目录至少要有x权限
3如果用户还想查看其它使用ls -l侧还要有r权限
用户在一个目录下读取一个文件基本权限
1可使用的命名有cat ,head,more,tail,nl等;
2对目录要有x权限;
3用户对文件至少要有r;
让一个用户修改一个文件的基本权限是什么:
1可使用命令有nano,vim,gedit等;
2目录要用的权限为w(当说的文件是目录时),x一定要有的要么就进不到目录里去了;
3文件要求有的权限为r,w;
让一个创建一个文件要有什么权限
1可以用的命令为touch filename; 
2对目录要有w,x重点是w;
3文件要求权限,至少要有x; 
 

。。。。
。。。。
####################################################################
#########################################################
####################################
有关脚本的
脚本中第一行是#!/bin/bash用于申明这个脚本使用的shell明称。
必要是还应该把PATH这个坏境变量也加进来,这样的话你就可以在别的目录下直接运行你的脚本来,真的很方便。。
脚本里要用到的命令有(这是我个人写的当然还会有很多):
1.echo  -n   #这是显示一句话要用到的,-n参数是用来换行的;
2.read -pt   #这是用来读写用户的输入用的,-p是输入前可以在后面加提示,-t是输入时间限制;
read -p "请输入一个数:" -t 30 fileuser
3.$(())   #是用来计算的 echo $((13+1));
4.test     #判断
-e 判断一个文件是否存在
-f 判断是否是一个文件
-d 判断是否是目录
-r 判断是否可以读
-w 判断是否可以写
-x 判断是否可以执行
-eg 不等
-ne 相等
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
-a 与
-o 或
其中test可以用[ ]替代一般都是用这个;
5.$0 $1 $2 $@ $*
这个是用来传参数给脚本的 $1 为第一个参数$@代表全部意思和$*差不多只是$*可能会没有空格,一般用$@就好。
. sh07.sh one two quot.....
     $0    $1  $2   $3
这就有点像我们输命令时带的参数一样。
6.if...then...fi
if [ 条件成立 ]; then   #注意其中的空格
    ......
fi
if [ 条件成立 ]; then
    ......
ekse
    ......
fi
if [ 条件成立 ]; then
    ......
elfi [ 条件二成立 ]; then    #elif后面都要接then
   ......
else
   ......
fi 
7.case...esac
case $变量名称 in    #关键字case,还有变量前$
  "第一个变量内容")
   程序段
   ;;
  :
  :
*)                   #最后一个变量内容都会用*来代表其它值
    程序段
    exit 1
    ;;
esac                 #最后要用esac结尾!
  1 #!/bin/bash
  2 export PATH=$PATH:/usr/local/srv
  3 echo "Is it morning?please answer yes or on"
  4 read -p "qingshuru" timeofday
  5 case "$timeofday" in
  6   yes | y | Y | Yes |yes)
  7         echo "Good Morning"
  8         echo "Up bright and early this morning"
  9         ;;
 10 [nN]* ) 
 11         echo "GOOd Afternoon"
 12         ;;
 13 * )     
 14         echo "Sorry,answer not recognized"
 15         exit 1
 16         ;;
 17 esac


8.while do done,until do done
while [ condition ]    
do
   程序段
done
while 是当.....时,即condition成立时,就进行循环.
until
do
   程序段
doneil [ condition ]
until 跟while刚好相反;
9.for...do..done
for var in con1 con2 con3 ...
do
   程序段
done
第一次循环时,$var的内容为con1;
第二次循环时,$var的内容为con2;
第三次循环时,$var的内容为con3;
.....
10.exit n命令
在脚本中退出码0表示成功
#!/bin/bash
if [ -f .profile ]; then
 exit0
fi
exit 1
11.export    导出一个变量
export2脚本如下:
  1 #!/bin/bash
  2 echo "$foo"
  3 echo "$bar"
export1脚本
  1 #!/bin/bash
  2 foo="wwwwwwwwwwwwwwwwwwwwwwwwwww"
  3 export bar="ccccccccccccccccccccccccccc"
  4 bash sh7.sh
如果你运行了export1,将得到如下输出:
$. export1

ccccccccccccccccccccccccccc
12.trap command signal     #trap用于接收到信号后要采取的行动,第一个参数是接收到信号后要采取的行动,第二个参数是要处理的信号名。
信号名有:
HUP         挂起
INT         中断(ctrl + c)
QUIT        退出
ABRT        中止
ALRM        报警
TERM        终止,关机时发送
下面是一个演示脚本:
  1 #!/bin/bash
  2 trap 'rm -f /tmp/my_$$' INT
  3 echo creating file /tmp/my_$$
  4 date > /tmp/my_$$
  5 echo "press interrupt (CTRL + c)>>>"
  6 while [ -f /tmp/my_$$ ]; do
  7 echo FILE exitd
  8 sleep 1       #延时
  9 done
 10 trap INT
 11 echo creating file /tmp/my_$$
 12 date > /tmp/my_$$
 13 echo "press interrupt (CTRL + c)>>>"
 14 while [ -f /tmp/my_$$ ]; do
 15 echo FILE exitd
 16 sleep 1
 17 done

在这个脚本中,我们先用trap命令安排它出现一个INT信号时执行rm -f /tmp/my_$$删除临时文件。脚本程序然后进入一个while循环,只要临时文件存在就会一直循环下去(第一次按下ctrl + c 前),单用户按下ctrl + c 时会执行rm -f /tmp/my_$$,就会退出循环进入下一个循环,这是因为是trap INT,没有做任何处理将采用默认中止,所以当你第二次按下ctrl + c时就会退出来了。
12.printf   #这个命令只有最新版本shell才提供,用法跟C使用法差不多;
还有一些就是&&与||用法:(以后再补充)
在这里再说一下用bash和 .(source)执行脚本是区别,用 .(source)执行时还是在本来bash中所以本来变量什么的都不会变(这里说的是一般变量),用bash执行时就会跑到另一个shell中执行了。

0 0
原创粉丝点击