Monday, December 15, 2008
Good Link for Linux open source books
http://www.dailyart isan.com/ news/open- source-e- books-for- linux/
Agent Upload problem in version 10.2.0.5 (EM Related)
And it doesnt uploaded even if you give an hour to this..
The problem can be traced as follows:
goto
Goto
Hint here is clearing that file and uploading the rest to the OMS. at least the block is removed.
now do an agent reload
Things should be better now
and agent must show no pending files..
Thursday, December 11, 2008
ORA-01031: insufficient privileges upon instance startup
Very good link: http://it.toolbox.com/blogs/david/ora01031-insufficient-privileges-upon-instance-startup-13759
He then proceeded to creating his instance using the following command:
oradim -new -sid InstanceSID -startmode m -pfile C:\location_to_pfile\init.ora -intpwd password
After which, the instance was created. He proceeded to creating the database itself. Since he was all keen about doing this manually he opened up a Windows CMD and did the following steps:
C:> SET ORACLE_SID=InstanceSID
C:> sqlplus /nolog
SQL*Plus: Release 9.2.0.1.0 - Production on Wed Dec 13 10:18:27 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> conn sys/password as sysdba
Connected to an idle instance.
SQL> startup nomount pfile=C:\location_to_file\init.ora;
ORA-01031: insufficient privileges
SQL>
As you see, he got an
ORA-01031
. He didn't understand what is causing this. His O/S user was a member of the ORA_DBA group. He tried logging off windows and then logging backup in. Nothing.
Tuesday, November 4, 2008
The Concept of RAC/CRS and Database !!!!
There are 3 most important things to RAC/CRS setup. RAC is Real Application Cluster which is build on CRS (Cluster Ready Service).
We take a 2 node cluster.We try understanding the setup. Both the nodes will have a separate CRS setup. The version of CRS should be greater than or equal to that of RAC. So whenever we go for an upgrade to a newer version, we go for CRS upgrade first and then the RAC.
The reverse will make things unuseable. Reverting back the changes in the version is not possible.(as far as I have known).
Now the two nodes will have a shared location. This shared location contains the ORADATA. this oradata is what helps storing information , our data.
RAC is a normal DB installation except that the other db files are stored in the separate nodes but the oradata which manages the data is stored in the shared location. The two nodes are hence gateway to the same data. This is what increases the availability of the RAC and hence defines its use.
Now, the shared location defines the size of database.
And lets take the case of upgrading the RAC db. We first upgrade the db instance files on both nodes , and then the procedure to upgrade the oradata is not the same and is done by running a specific sql script. We can note that the script is run only from one node. This is because the oradata is accessible from both nodes.
Sunday, November 2, 2008
ORA-01031: insufficient privileges ON WINDOWS!
grant create table to user_lacking_privilege;
Startup
net localgroup
should help: C:\> net localgroup ora_dba rene /add
Sunday, September 28, 2008
USER DEFINED DEVICE NAMES
This red hat manual entry can be found HERE
A gist of this manual entry is presented here:
1. The /dev/ directory contains virtual files that represent devices. Device names for IDE devices begin with hd, and device names for SCSI devices begin with sd.For example, /dev/hda is the first IDE hard drive, /dev/hdb is the second IDE hard drive.If the device name is followed by a number, the number represents the partition number. For example, /dev/hda1 represents the first partition on the first IDE drive
2. Configuration: User-defined device names can be added based on the device name, partition name, or the UUID of the drive.
[a]: syntax to add a user-defined device name for a storage device
devlabel add -d
[b]: To add a device name for a device based on a UUID:
devlabel add -u
[c]: To use devlabel to retrieve the UUID for a device:
devlabel printid -d
[d]: To remove the symbolic link
devlabel remove -s
[e]: To determine the status of the devlabel symbolic links:
devlabel status
3. FOR HOTPLUG Devices:
A program called hotplug performs actions when a system event, such as hardware being added or removed, takes place while the system is running. For example, if a USB hard drive or a USB media card reader is attached to the system, hotplug notifies users by logging a message in the system log file (/var/log/messages) and loads the proper kernel modules so the device works.
After inserting the USB card reader into the USB port of the computer, issue the following command as root (where /dev/sda1 is the device name for the media card and /dev/usbcard is the user-defined device name to use:
devlabel add -d /dev/sda1 -s /dev/usbcard --automount
This commands adds an entry for the mount point to /etc/sysconfig/devlabel and creates a symbolic link from /dev/usbcard to /dev/sda1.The --automount option to devlabel specifies that the device should be automatically mounted when devlabel restarts if an entry for it is located in /etc/fstab and if the device exists (a device with the same UUID is found).
The updfstab is a program that scans the IDE and SCSI buses for new devices and adds entries to /etc/fstab for them if entries do not already exist. It also adds entries for USB devices since they appear as SCSI devices.
When a USB device is inserted, hotplug runs the updfstab program, which adds an entry to /etc/fstab for the storage device (such as the media card) if it exists. (If a card reader without a card in it is inserted, an entry is not added.) The line added contains the actual device name (such as /dev/sda1) and the kudzu option. The kudzu option tells Kudzu [1] that it can remove the line if the device does not exist. Since the line is required by devlabel, the kudzu option must be removed so the line remains in the file. Also change the device name to the devlabel device name (such as /dev/usbcard) and create the mount point (such as /mnt/usbcard).
Because of --automount, when devlabel is restarted, the storage media in the USB card reader device is mounted in /mnt/usbcard when the USB device is plugged into the computer. The trick is that when the USB card reader is plugged into the computer, the card must already be in the reader. If not, devlabel can not find the storage device, and thus it can not automatically mount it.
If the USB card reader is already plugged in without a card, when the card is inserted, run the command devlabel restart as root to mount the media card.
Wednesday, September 24, 2008
Oracle 10.1.0.3 installation to Oracle 10.1.05 upgrade patchset
How do we do it:
-goto /etc/init.d directory
-say ./init.cssd stop
it will stop the css demon saying
Shutting down CRS demon
Shutting down EVM demon
Shutting down CSS demon.
go back to continue with patchset installation ..
finish.
Tuesday, September 16, 2008
RAC/CRS installation
We say that its a two node RAC installation. let it be stamy04 and stamy05
1. Before going for RAC installation to confirm if crs is present, we can just do
'ps -ef |grep crs'
Searching for the process crs if its running. we get the bin location of the installed crs.
Go there and check for crs_stat and it lists the status of the crs. If it lists process like LISTENER and .gsd .ora files we know our crs is up and working.
Alternative in the bin directory go for ./crsctl check crs
if things are fine you find ::::
CSS appears healthy
CRS appears healthy
EVM appears healthy
Can go to other node to confirm the same situation there also.
We can view RAC as two standalone databases installation on 2 nodes( i am using a 2 node cluster). So it will have three standard steps:
1. db install(software install)
2. netca
3. dbca
db install command will be very similar to the silent command fired for a standalone installation. we just have to take care to add few other parameters.
a) first goto the corrosponding response file (.rsp) file. and edit at the CLUSTER_NODES location. CLUSTER_NODES= { "node1","node2"} add all nodes of your cluster to it.
b) fire the command . now i have a problem that i cannot enter the node1 or node2 but have to fire the command from a third location, so i will use a ssh connection for this.
The command goes as:
ssh
So the only addition from normal silent installation is clusterware oracle.crs,
c) Additionally if one wants to explore all the options provided with the runinstaller just go
and you will find all options and their meanings. there are things like -cfs or -local which might confuse and the usage will depend on experience.
d) Problem comes with Netca as you dont have the -help option to find out what arguments to give.
here i am pasting something i got from some blog. which will help for silent installation of netca and for majority it would of some help.
THE LINK FOR THIS BLOG IS
http://www.pythian.com/blogs/1045/oracle-silent-mode-part-7-installing-an-111-rac-database
Install the Oracle RAC Database Base Release
Once the clusterware has been installed, installing RAC Database software is very similar to installing a non-RAC database software, you just need to specify which servers you want the software to be installed on. The first step is downloading the software and unzipping it:
$ unzip linux.x64_11gR1_database.zip
$ cd database
$ export DISTRIB=`pwd`
To install the database software, you don’t need to modify the response files. You only have to run a command like the one below, in the case of an Enterprise Edition:
export DISTRIB=`pwd`
runInstaller -silent \
-responseFile $DISTRIB/response/enterprise.rsp \
FROM_LOCATION=$DISTRIB/stage/products.xml \
ORACLE_BASE=/u01/app/oracle \
ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1 \
ORACLE_HOME_NAME=ORADB111_Home1 \
CLUSTER_NODES={"rac-server1","rac-server2",\
"rac-server3","rac-server4"} \
n_configurationOption=3 \
s_nameForDBAGrp="dba" \
s_nameForASMGrp="dba"
Or in the case of a Standard Edition:
runInstaller -silent \
-responseFile $DISTRIB/response/standard.rsp \
FROM_LOCATION=$DISTRIB/stage/products.xml \
ORACLE_BASE=/u01/app/oracle \
ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1 \
ORACLE_HOME_NAME=ORADB111_Home1 \
CLUSTER_NODES={"rac-server1","rac-server2"} \
n_configurationOption=3
As you can see, only a few parameters differ from the non-RAC database installation described in Part 1 of this series:
CLUSTER_NODES
contains the list of cluster nodes you want to install the database software on.FROM_LOCATION
is used when the response file doesn’t point to the location of theproducts.xml
file.s_nameForDBAGrp
,s_nameForASMGrp
, ands_nameForOPERGrp
are used to specify non-default groups forSYSDBA
,SYSASM
, andSYSOPER
.
Once the software is installed, you have to execute the root.sh
script from the ORACLE_HOME
. Connect as root
on every server and run:
rac-server1# /u01/app/oracle/product/11.1.0/db_1/root.sh
rac-server2# /u01/app/oracle/product/11.1.0/db_1/root.sh
rac-server3# /u01/app/oracle/product/11.1.0/db_1/root.sh
rac-server4# /u01/app/oracle/product/11.1.0/db_1/root.sh
Install the Oracle RAC database Patch Set
The first 11.1 Patch Set is not available at the time of this writing.
Configure the Listeners
The fastest way to create and configure the listeners is to use NETCA as below:
$ export ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1
$ export PATH=$ORACLE_HOME/bin:$PATH
$ netca /silent \
/responsefile $ORACLE_HOME/network/install/netca_typ.rsp \
/nodeinfo rac-server1,rac-server2,rac-server3,rac-server4
Unlike other tools, NETCA uses the “/
” character instead of “-
” for its flags. With 11.1, the DISPLAY
environment variable can stay empty.
Configure Automatic Storage Management
If you plan to use ASM from the newly installed ORACLE_HOME
or another one you’ve installed earlier, you can use DBCA to configure it in silent mode. The syntax is the same as the 10.2 asm configuration syntax:
$ dbca -silent \
-nodelist rac-server1,rac-server2,\
rac-server3,rac-server4 \
-configureASM \
-asmSysPassword change_on_install \
-diskString "/dev/sd*" \
-diskList "/dev/sde,/dev/sdf" \
-diskGroupName DGDATA \
-redundancy EXTERNAL \
-emConfiguration NONE
Create a RAC Database with DBCA
You can use DBCA again to create the RAC database. The syntax is the same as that explained in the 10.2 RAC post:
$ dbca -silent \================================================================
-nodelist rac-server1,rac-server2,\
rac-server3,rac-server4 \
-createDatabase \
-templateName General_Purpose.dbc \
-gdbName ORCL \
-sid ORCL \
-SysPassword change_on_install \
-SystemPassword manager \
-emConfiguration NONE \
-storageType ASM \
-asmSysPassword change_on_install \
-diskGroupName DGDATA \
-characterSet WE8ISO8859P15 \
-totalMemory 500
Back to business:
1.This is a guide to 11g installation. So you can avoid ORACLE_BASE which was not there in earlier version. Other options will work as possible.
2. From where did ASM come from?
RAC can be a standalone database on the various nodes or it can be on ASM which has disks on various nodes to manage data. A more effective way of doing things!!
So if you have ASM below the RAC setup do see the installations for ASM
else forget it and come along with me..
IF its so well documented why to repeat things. My problem is i am using a third machine to remotely fire all commands and i do not find a solution how to fire netca commands because first we need to set $ORACLE_HOME env.
Finally some R n D we get the solution to the above problem as:
user@machine_name 'export ORACLE_HOME=$ORACLE_HOME; $ORACLE_HOME/bin/netca /orahome $ORACLE_HOME /instype custom /inscomp client,oraclenet,javavm,server,ano /insprtcl tcp,tcps /cfg local /authadp NO_VALUE /nodeinfo stamy04,stamy05 /responseFile $ORACLE_HOME/network/install/netca_typ.rsp /silent'
So for us a ";" works!!! :)
The DbCa works as illustrated in the blog i have named earlier or the text written above w.r.t blog.
except for a cliche. The problem here is that the dbca is unable to recognize the shared location as a shared location. Here we took the two nodes and ran a simple program which just engages mounting and dismounting the shared location and touching the files. So that the dbca could figure out that their is a shared location which is engaged in some process. and thus knows the shared location.
On a shell prompt
for EACH in `seq 1 80`
do
each $EACH
mount -o remount shared
tuch shared/X$EACh
sleep 5
rm shared/X$EACH
we tried on both machine and then from a third machine gave a try to dbca onto the local node.
Hence RAC installation compeletes
Detecting shared locations in linux
Now i have a case where i have to install a Real Application cluster on a 2 node CRS installation. The CRS installation has a shared space between nodes. To find out that we just need to go to the directory
/etc and vi the file exports.
The details are clear about the location which is being shared by the two nodes.
Monday, September 1, 2008
Interview related:Hard Link and soft Links.
A bit from this site is as follows:
A
% cat a-file.txt
The file a-file.txt
%
Now we use the
% ls
./ ../ a-file.txt
% ln a-file.txt b-file.txt
% ls
./ ../ a-file.txt b-file.txt
The two names
If we modify the contents of file
% ln -s a-file.txt b-file.txt
Let us first add another symbolic link using the
If we remove the file
The link
IMPORTANT::::The most significant drawback is that hard links cannot be created to
link a file from one file system to another file on another file system. A Unix file
structure hierarchy can consist of several different file systems (possibly on several
physical disks). Each file system maintains its own information regarding the internal
structure of the system and the individual files on the system. Hard links only know this
system-specific information, which make hard links unable to span file systems. Soft
links, on the other hand, know the name of the file, which is more general, and are able
to span file systems.
Sunday, August 31, 2008
How to mute the windows beep....
1. Right-click on My Computer
2. On the Hardware tab, click on [Device Manager]
3. On the "View" menu, select "Show hidden devices"
4. Under "Non-Plug and Play Drivers", right-click "Beep"
5. Click "Disable"
6. Answer [Yes] when asked if you really want to disable it
7. Answer [No] when asked if you want to reboot
8. Right-click "Beep" again.
9. Click "Properties"
10. On the "Driver" tab, set the Startup type to Disabled
11. Click [Stop]
12. Click [OK]
13. Answer [No] when asked if you want to reboot
Ok suppose it worked...
I have a case.. and i have no idea. i am working on a remote machine.. if i off the beep it would off the beep of that remote machine hardware.. and i am not the administrator of the system through which i remotely access the 'beep' machine..Solutions ??????
Friday, August 29, 2008
Linux Commands....
So, as we learn we will update the blog... Now, this is called Freedom.
Today my mentor gave me his site link, which had the as u learn, so as u dump...schema... in his website.
The link is : http://www.zulfilee.net/
Now comes the worst part.. knowledge which is jst not structured.
1. We get the system call nos. in /usr/include/asm/unistd.h. So adding a new system call we need to append an entry here.
2. We have ftp to get and put files in another system. now this file transfer protocol is quite comman.. I was just going thru net and found something called ncftp. ncftp gives additional features as bookmarking the folder u visited to get or put something. The bookmarks are kept in the location $HOME/.ncftp/bookmark.file.
So what is nc. A bit of research just got me to a blog which said nc may stand for netcat. Netcat is a very fundamental tool. FTP is very easy to handle.. u do ftp mks.us.oracle.com or ftp 172.11.111.111 and you are prompted to enter user id and password . then u do cd to the location and then use bi for binary mode.. hash to show hashes as the file is being copied.. and then u do mget or mput..or just get or put.
But this is the application level of things.. FTP is an application which works on the principal or the fundamental layer of netcat which is a utility . something like a c code is first converted into an assembly language code. so these two are analogous.
try doing nc in the shell and type HELP. we get a no of basic commands so all operations are first written in terms of these basic commands and then assembly code and binary code which is executed then but the user sees is the ftp command. mget and mput.. so thanks to nc for making life easy... !!!
We talk of more here.. but this time a bit more systematic......(we will have them numbered :) )
1. To list the ports being used with the process we can use the command
netstat -anp
Now to search for a given port we can use a pipe..and say
netstat -anp|grep "port no." (without quotes.)
Saturday, August 23, 2008
How to find out if OS is 64 bit or 32 bit......
HKEY_LOCAL_MACHINE/HARDWARE/Description.
2. On a linux machine if you login into the machine(may be using a putty), the description of the machine is displayed. else a simple command uname -a should do.
3.On an AIX machine things become a bit bitter. The uname thing doesnt work. So we have another command there which is:
bootinfo -K (It gives the kernal info if its 32 bit or 64 bit).
Now theres a link to the most basic commands in AIX,which shud'nt be left at home when u r at work on AIX machine. Link is: http://www.ibm.com/developerworks/aix/library/au-dutta_cmds.html
Ok, back to our topic of discussion.
4. Solaris gives answer to the same question by the command:
/usr/bin/isainfo -kv
5. Now if the problem is somehow to identify inside a code what platform its running on and then if its 32 bit or 64 bit might be difficult.
Ok, here we will make a simple assumption. And this is what makes things different for this blog...
we have a small program.A C code:
#include
Now the integer pointer for a 32 bit compiler will be 4 byte size.. and for a 64 byte compiler.
Again we are not addressing here the question we arose earlier that is if the system is 32 bit or 64 bit. but we have talked if the compiler is 32 bit or 64 bit.
So if the answer we get here is 8 , its sure to be a 64 bit compiler which will run on a 64 bit system. But if we get the answer as 4, we are not really sure of.
------------------------------------------------------------------------------------------------
Editing this information after i got some new info..... regarding the discussion
so write any C program anywhere in the system..
Then just compile it. as gcc filename.c
And then do readelf -a a.out
This gives the whole description of the symbol table. and the register usage. Just look at the address of any register there. You will get 0x<16> ... here is an answer.. each char in hex needs 4 bits to represent . If its 16digit no, this is 64 bit addressable memory. means a 64 bit machine... so the compiler helped in tracing the architecture.
Though i checked it in a Linux 32 and 64 bit machine.. it should do with all unix version.. :)
Saturday, August 16, 2008
The Great ASM installation on NT ...
ASM stands for Automatic Storage Management, an option provided in the Oracle Installations. In layman terms an ASM concept can be understood analogous to RAID concept in Operating System scenario, where we have redundant array of disks to provide high availability (in the sense that we have a backup for information retrieval with minimum loss).
So the first step to an ASM installation is:
1. Install a normal oracle database software. A 10.2.0.1 version software install will do.
2. Now if it were a normal installation of a database we would have done a Netca and Dbca installation after the software installation. Here we will go for the as usual netca installation but we need to configure few things before going for a dbca installation.
3. We first goto the bin directory of the installed oracle database software and call the asmtool.exe to create the raw disks(we need more than 1 disks to secure information , as in RAID).
The asmtool can be prompted by cmd on Windows. as:
asmtool.exe -create
eg. C:\
4. Now we set in a system environment variable OSM_INSTALL_TEST to true.
5. The next level is starting a css service. CSS stands for Cluster Synchronization Service.
It can be initiated by calling "localconfig.bat add" from the bin directory of ur oracle home.
6.Now we go for dbca. The last step. The dbca can be called from the bin directory of oracle home(like the netca, the bin contains netca.bat and dbca.bat and many more.....) .
When you call dbca. it gives option to configure the ASM. click and proceed. At the end it tries to mount the available disk (for us its Disk1 we created above). Going to Create Disk , we supply the path of the Disk1 but it fails........ it does not find the disk.. the problem comes here... Its smooth sailing in Linux but our concern is Windows.
The problem here is a system variable OSM_INSTALL_TEST value is not reflected. The easiest solution is to reboot or restart the explorer. But in some scenarios that's not what is required.
In a testing scenario where the farm jobs need to be automated, a reboot will create more issues.
7. So, drilling deep into the OSM_INSTALL_TEST value and from where it is read by the dbca.. took a week time to finally figure out the solution.
We need to put value in the Registry location [HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_
"OSM_INSTALL_TEST"="true".
and this works.... :) now no reboot required for ASM installation
P.S. : The article will be useful only to those going for a silent installation of the software....
Friday, July 18, 2008
IP_ImP
2.As with broadcast, IP officially reserves the entire range from 127.0.0.0 through 127.255.255.255 for loopback purposes. Nodes should not use this range on the Internet, and it should not be considered part of the normal Class A range.
3.Zero Addresses: As with the loopback range, the address range from 0.0.0.0 through 0.255.255.255 should not be considered part of the normal Class A range. 0.x.x.x addresses serve no particular function in IP, but nodes attempting to use them will be unable to communicate properly on the Internet.
4.Private AddressesThe IP standard defines specific address ranges within Class A, Class B, and Class C reserved for use by private networks (intranets). The table below lists these reserved ranges of the IP address space.
Class
Private start address Private finish address
A 10.0.0.0 10.255.255.255
B 172.16.0.0 172.31.255.255
C 192.168.0.0 192.168.255.255
5.IPv6 Address TypesIPv6 does not use classes. IPv6 supports the following three IP address types: unicast multicast anycast.Multicast addresses in IPv6 start with 'FF' (255) just like IPv4 addresses. Anycast in IPv6 is a variation on multicast. Whereas multicast delivers messages to all nodes in the multicast group, anycast delivers messages to any one node in the multicast group. Anycast is an advanced networking concept designed to support the failover and load balancing needs of applications.
6.
Class Host address range Network address Default mask
A 0.0.0.0 - 127.255.255.255 x.0.0.0 255.0.0.0
B 128.0.0.0 - 191.255.255.255 x.x.0.0 255.255.0.0
C 192.0.0.0 - 223.255.255.255 x.x.x.0 255.255.255.0
7.SUBNETS:a subnetwork, or subnet, is a portion of the network's computers and network devices that have a common, designated IP address routing prefix.e.g., 255.255.255.0 is the subnet mask for the 192.168.1.0 network with a 24-bit routing prefix (192.168.1.0/24). The subnet identifier consists of the remaining bits in a subnet's prefix after the network identifier. In the cited example, 192.168.0.0 is the network identifier (and 255.255.0.0 the network mask) and "1" is the subnet identifier
8. A classful network is a network that has a subnet mask of 255.0.0.0, 255.255.0.0 or 255.255.255.0.
9.Classless Inter-Domain Routing (CIDR) notation: For example, 192.0.2.96/24 indicates an IP address where the first 24 bits are used as network address (same as 255.255.255.0).
Thursday, July 17, 2008
Simple_Shell_Scripting/Help/Command_Usage
$ln Page1 Book1
syntax: ln {oldfile} {newfile}
2. $wc
3. grep {word to find} {filename} //finds word in the file
4. sort -r
sort -nr
sort -n
5.Printing last/first line of given file.
tail -+ {line number} {filename}
will print the last
by default will print 10 last lines of file.
you can use head and tail command with -sign to get respectively the top and bottom lines of
the file.
6. To check how many files in the system
$ls /-R wc -l
As it will take a lot of time.. we can run this in background using "&"
Our command becomes now $ ls / -R wc -l &
7. To list all files in directory subdirectory we can do.
$ ls -lR
8. To get info about all running process:
$ ps -ag
9. To stop all process except the shell do:
$kill 0 //zero
10. Take this. u did $ ls
$ echo $?
If it returns 0 on the screen, this denotes successful completion of the command.(here ls).
11. $lsmore One full page of output at a time.
12. $ls -lwc -l prints no of files in current directory.
13. $ tail +20
here head is the filter which takes its input from tail command and passes this lines to input to head, whose output is redirected to hlist file.
14. if you copy ur shell script to bin.. u can execute it by its name itself.
so if ur script name is "first"
then do : $cp first ~/bin
$ first shud execute now.
15.echo is used to print the thing on console
16. chmod +x
17. $ls a* will show all files whose name begin with 'a'.
$ls ? searches for file with name of single letter.
$ls /bin/[!a-o] OR $ls /bin/[^a-o] . if the first character following the [is a ! or ^ then any
char not enclosed is matched i.e. do not show us file name that begining with a,b,c ...o.\
18. Operator Meaning
! expression Logical NOT
expression1 -a expression 2 Logical AND
expression 1 -o expression 2 Logical OR